首页/文章/ 详情

嵌入式学习(十)—系统定时器systick

1年前浏览146
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

bit[23:0]一共24位,用来获取当前系统嘀嗒定时器的计数器的值。
----------------------------------------------------------------------------
系统嘀嗒定时器校准寄存器STK_CALIB

这个寄存器暂时没有用到,暂时不用深究。
----------------------------------------------------------------------------
下图是SysTick的功能框图。


来源:不懂幽默的秦二
控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-06-21
最近编辑:1年前
点墨设计
本科 | 高级硬件工程... 十年饮冰,难凉热血!
获赞 0粉丝 5文章 48课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈