
SysTick定时器又称为系统嘀嗒定时器,ARM-M系列内核的MCU都包含这个定时器,使用内核的SysTick定时器来实现延时,可以不占用系统定时器,节约资源。它是在MCU内核中实现的,与MCU外设无关,它的代码可以在不同的MCU之间移植。 SysTick是一个24位递减定时器,涉及到的寄存器主要有4个,控制和状态寄存器,重装载值寄存器,当前值寄存器,校准寄存器,即计数器可以从最大值224开始,最多,每个时钟周期减1,当减到0时,产生SysTick异常,同时再自动重载定时器初值,开始新一轮计数。通过设置初值,就可以得到期望时间。如图所示,y为定时器初值,随着时间增加,y值逐渐减小,直至为零,再重新加载初值,如此往复,得到x1,x2,x3这些时间段,就是我们延时的时间。 ![]() 举个例子,stm32f407的工作频率为164MHz,意味着1s时间内,会计数168000000次,那么1ms计数168000次,168000这个数字可以作为systick计数器的初值。把这个值写入系统定时器,定时器在每个时钟周期减1,同时产生中断通知,再次加载168000,如此反复。 ------------------------------------------------------------------------- 系统定时器的控制寄存器比较少,整体比较简单,包括STK_CTRL,STK_LOAD,STK_VAL,STK_CALIB四个寄存器,因为系统嘀嗒定时器属于内核的外设,相关寄存器在内核编程手册中,不在STM32F4xx的参考手册中。 系统嘀嗒定时器控制和状态寄存器STK_CTRL![]() 重点关注 bit[0]用于使能系统嘀嗒定时器。 bit[1]使能系统嘀嗒定时器中断。 bit[2]设置系统嘀嗒定时器的时钟来源。 ---------------------------------------------------------------------------- 系统嘀嗒定时器加载值寄存器STK_LOAD ![]() bit[23:0]一共24位,用来设置系统嘀嗒定时器的初值,范围为1~16777216 ---------------------------------------------------------------------------- 系统嘀嗒定时器当前值寄存器STK_VAL ![]() ---------------------------------------------------------------------------- 系统嘀嗒定时器校准寄存器STK_CALIB ![]() ---------------------------------------------------------------------------- 下图是SysTick的功能框图。 ![]() 转载自:diandianmo |
经验分享 | STM32U5系列TIMER+DMA+DAC应用演示
经验分享 | STM32G4 UART+TIMER+DMA应用示例
经验分享 | STM32定时器同步启动示例及应用提醒
经验分享 | STM32 TIMER+DMA输出PWM异常二案例
经验分享 | 更改STM32定时器周期后的输出疑问分析
基于定时器捕获测量脉宽的应用示例
狂欢三】STM32C031使用TIM定时器DMA方式实现WS2812彩灯输出(三)
【狂欢三】STM32C031使用TIM定时器DMA方式实现PWM输出(二)
【狂欢三】STM32C031使用TIM定时器PWM输出
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法