欢迎来到《圣博凯斯》变频供水设备官网
精锐于专业 / 卓然于品质 -- 20年专注于供水行业,缔造至臻品质 -- 服务热线:0731-85783205 18932453205

定时器分为哪三种_定时器分为哪几种

STM32F1开发指南《精英版》库函数版---第五章第一,系统init时钟初始化函数使用V3.5版本的库函数,该函数在系统启动后自动调用。

在startup_stm32f10x_xx.s文件中:

; resethandlerreset _ handlerprocexportreset _ handler [ weak ] import _ mainimportsysteminitldrr 0,=system init blx r0 ldr r0

初始化后的状态: SYSCLK (系统时钟) 72MHz

AHB总线时钟(使用SYSCLK ) 72MHz

APB1总线时钟(PCLK1) 36MHz

APB2总线时钟(PCLK2) 72MHz

PLL时钟72MHz

初始化后,可以从变量SystemCoreClock中获取系统变量。 如果SYSCLK=72MHz,则变量SystemCoreClock=72000000。 二、有Systick滴答计时器1、Systick计时器、CM3、CM4核心芯片。 2、Systick计时器常用于延时或实时系统的心跳时钟

节约MCU资源,无需浪费计时器。 例如,在UCOS中,时分复用需要最小的时间戳,一般在STM32 UCOS系统中使用Systick作为UCOS心跳时钟。

3、Systick计时器是系统滴答的计时器,是24位倒计时计时器。 计数到0后,从RELOAD寄存器中自动重新加载计时器初始值。 只要不清除Systick控件和状态寄存器的使能位,它就不会停止,并在休眠模式下工作。

4、SysTick计时器与NVIC捆绑在一起,用于产生SysTick异常(异常编号: 15 )。 5、也可以设定Systick中断的优先顺序。 6、4个Systick寄存器(参考Cortex M3权威指南):CTRL SysTick控件和状态寄存器

位0:ENABLE有效位:必须设置1才能使用Systick计时器

是否发生位1(Tickint )中断

位2:CLKSOURCE时钟源(由函数SysTick_CLKSourceConfig配置) ) ) )

位16 )计数标志)读取此位时自动清除----避免误读

在STM32的情况中,外部时钟源是HCLK(AHB总线时钟)的1/8核心时钟是hclk时钟。

配置函数: SysTick_CLKSourceConfig (;

):加载棒自动重载除法寄存器

24位重载寄存器即使在32位中也仅24位有效

):VAL SysTick当前值寄存器

):CALIB SysTick校准值寄存器

7、固件库中的Systick相关函数:

p style="text-align:left;">    SysTick_CLKSourceConfig()    //Systick时钟源选择  misc.c文件中

void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource){ /* Check the parameters */ assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource)); if (SysTick_CLKSource == SysTick_CLKSource_HCLK) { SysTick->CTRL |= SysTick_CLKSource_HCLK; } else { SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8; }} static __INLINE uint32_t SysTick_Config(uint32_t ticks){ if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ /* set reload register */ SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set Priority for Cortex-M0 System Interrupts */ NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); SysTick->VAL = 0; /* Load the SysTick Counter Value */ SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ return (0); /* Function successful */}

    SysTick_Config(uint32_t ticks) //初始化systick,时钟为HCLK,并开启中断     //core_cm3.h/core_cm4.h文件中(两个中断时间间隔)

8、Systick中断服务函数

void SysTick_Handler(void);

9、用中断的方式实现delay延时 static __IO uint32_t TimingDelay;void Delay(__IO uint32_t nTime){ TimingDelay = nTime; while(TimingDelay != 0);}void SysTick_Handler(void){ if (TimingDelay != 0x00) { TimingDelay--; }} int main(void) { … if (SysTick_Config(SystemCoreClock / 1000)) //systick时钟为HCLK,中断时间间隔1ms { while (1); } while(1) { Delay(200);//2ms … }} 三、delay延时函数

如果使用中发现延时不一致,问题一般都是因为不同内核时钟不一样而已。修改tciks值即可。

void delay_ms(u16 nms){ u32 temp; SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)SysTick->VAL =0x00;//清空计数器SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;//开始倒数 do{temp=SysTick->CTRL;}while((temp&0x01)&&!(temp&(1<<16)));//等待时间到达 SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;//关闭计数器SysTick->VAL =0X00; //清空计数器 }

猜你喜欢

  • 三菱plc计时器最大计时_三菱plc计时器分类

    关注“PLC狂热”,一起提高知识!回复“三菱全套”,接收三菱系列的电子资料收藏!很多同学绝对计时器和计数器很简单,但这部分的内容没有必要轻视。其实大多数人都没有掌握自己的使用方法。将计时器的当前值、设定值应用于寄存器、比较指令、触摸屏是最实用的知识点,其他书籍和案例中没有过多说明,但本文将重点说明。01计时器图2

  • 时钟脉冲和时钟周期一样吗_时钟脉冲和时钟周期

    什么是时钟脉冲,CPU为什么需要时钟,时钟信号是怎么产生的?首先知道什么是脉冲上图的一个方波称为一个脉冲,类似于人类的脉搏跳动。对于每一个方形脉冲,电压或电路从0上升到最大值的那条线叫做上升沿;反之,电压或电流逐渐下降的那条线叫做下降沿。一个脉冲称为CPU的一个时钟信号,或者时钟脉冲。一个脉冲周期就叫CPU时钟周

  • 系统时钟同步方式是什么_时钟同步系统采用哪几种方式对时

    时间同步装置(时钟系统)工作模式介绍时间同步装置(时钟系统)工作模式介绍PCS7系统基于TIA构建方式,在整个系统下包含了AS自动化系统,OS服务器/客户端,单站和各类远程站点等多种组件。这些组件都拥有自己的时钟系统,如果没有配置统一的时钟系统,可能会导致OS中的报警时钟与计算机时钟不一致,冗余服务器所看到同