
一、SysTick系统滴答定时器 SysTick是一个24位定时器,属于Cortex-M4内核中的一个外设,类似NVIC。 一个周期定时器,用于提供时间基准,多为操作系统所使用,常用于对时间要求严格的情况,意义是很重要的 SysTick定时器一次最多可以计数2^24(24bit)个时钟脉冲,这个脉冲计数值保存在当前计数值寄存器STK_VAL(Systick current value register)中,只能向下计数,也就是倒计数。 每接收到一个时钟脉冲(CPU主频),STK_VAL的值就会向下减1,当减到0时,硬件会自动将重装载寄存器STK_LOAD(可以设定,跟STK_VAL初始值相等)中保存的数值加载到STK_VAL,使其重新计数,并且,系统滴答定时器就产生一次中断,以此循环往复,只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息 Systick相关寄存器 ![]() ![]() 若VAL中的数值为 80,脉冲频率为 80MHz,则VAL由 80 减到 0 所需要的时间为80/80MHz=1us,并且当减到 0 时会触发中断(相当于 1us 定时器),同时 LOAD 的值也会重新载入到VAL中 STM32CubeMX系统时钟的配置 ![]() 在 STM32CubeMX 中配置好时钟树后,时钟频率会输入到 Cortex System timer内核时钟 。所以, SysTick 的脉冲频率来自于此 二、SysTick系统定时器原理 在HAL_Init()(HAL_Init–>HAL_InitTick–>HAL_SYSTICK_Config–>SysTick_Config) 使用SysTick作为时基源,并配置1ms定时(重置后的默认时钟为 HSI)。但是 HSI 为内部时钟,而我们使用的是外部时钟,这里的1ms定时是不精准的
精准的1ms定时在系统定时器配置函数SysTick_Config() 在core_cm4.h头文件里面
在这个函数里面进行对系统定时器的寄存器进行配置 系统滴答定时器中断服务函数:每隔1ms进入该服务函数 注:SysTick系统滴答定时器每1ms产生中断
在中断服务函数中 uwTick 会每1ms加1, 一直循环,直到溢出达到232(大约要一直运行40几天) uwTick一般用于计数或者延时函数(HAL_Delay()
HAL_GetTick获取当前uwTick,若传入参数500,tickstart 为 HAL_GetTick() 最初的值(即进入延时时uwTick的值),固定不变。 HAL_GetTick() 与 tickstart 的差值若小于用户定义的500,则继续循环等待;若超过500,则跳出循环(即跳出HAL_Delay() ),延时结束 总结 提示:这里对文章进行总结: Systick的两大作用: 1、可以产生精确的延时(HAL_Delay()) 2、可以提供给操作系统一个单独的心跳(时钟)节拍(操作系统时基) |
STM32系列芯片之间相互移植注意事项
STM32如何成为现代科技的隐形引擎
大神都是怎么学习STM32的,我也跟着学
如果你解决了这些问题,就可以直接学STM32
经验分享 | 基于STM32G4芯片TIM+SPI+DMA应用示例
新手学几天STM32,为啥一脸茫然
实战经验 | STM32G474勘误手册中SRAM Write Error详解
STM32电机控制用什么型号?高级定时器功能详解与芯片选型指南
STM32选型指南:这些型号让您的项目又快又省
25个STM32问答,考验你基础的时候到了