2025-11-20 06:48:25
首先得明白systick是看门狗时间器,专门管计时和触发中断。这个计数器最多能数到六万五千三百五十五,因为它是16位的,所以最大计数值就是2的16次方减一。不过实际使用时得看系统时钟频率,比如72MHz的板子,计数一次要1微秒。那它操作哪些寄存器呢?主要有四个,分别是sysTickCtrl、sysTickLoad、sysTickValue和sysTickCtrl。前两个是控制寄存器,后两个是计数和加载寄存器。当计数器到零时,会自动清零并触发中断,同时把中断标志位设为1,这样程序就能处理超时问题了。
为什么最多只能数六万五千三百五十五呢?因为systick计数器是16位的,所以最大值是65535。不过得注意预分频器的作用,如果预分频值设为256,实际最大计数值就会变成65535乘以256,等于16777215。这个数据来自STM32参考手册,里面明确写了sysTickLoad寄存器是24位的,最高可以存16777215这个数。实际操作时,开发者需要先用sysTickLoad把计数值写进去,然后开启计数器。比如写1秒的话,72MHz的时钟需要写72乘以1e6再减一,也就是71999999。当计数器减到零时,会自动触发中断,这时候程序就得处理超时了。不过如果预分频器开的话,比如设成8位,那最大计数值就是16777215,相当于约1.5秒的时间。所以具体能数多少得看寄存器配置,但基础计数器本身是16位,最多只能到六万五千三百五十五。
本题链接: