1. SysTick滴答定时器基础入门
SysTick滴答定时器是Cortex-M3内核自带的一个24位倒计数定时器,它就像是STM32单片机内部的"心跳计时器"。我刚开始接触STM32F103C8T6时,发现这个小小的定时器特别实用,不需要占用额外的硬件定时器资源就能实现精准延时。
这个定时器最大的优势是它的可移植性,因为它是内核级别的外设,所有基于Cortex-M3内核的芯片都有这个功能。在实际项目中,我经常用它来做简单的延时控制,比如LED闪烁、按键消抖,甚至是作为实时操作系统的时间基准。
SysTick有四个关键寄存器需要了解:
- CTRL(控制寄存器):负责启动/停止定时器、选择时钟源、使能中断
- LOAD(重装载寄存器):设置定时器的初始计数值
- VAL(当前值寄存器):显示当前的计数值
- CALIB(校准寄存器):提供工厂校准值,一般用不上
对于STM32F103C8T6来说,系统时钟通常是72MHz,但SysTick可以选择两种时钟源:直接使用系统时钟(72MHz)或者系统时钟的八分之一(9MHz)。我实测下来,选择9MHz作为时钟源在精度和功耗方面都有不错的表现。
2. 精准延时实现原理详解
实现精准延时的关键在于理解SysTick的工作机制。它就像一个倒计时的沙漏:我们先设置好沙漏的总沙量(LOAD值),然后启动沙漏,当沙子漏完时,就会产生一个信号告诉我们时间到了。
具体来说,当选择9MHz时钟源时,SysTick每计数一次的时间是1/9,000,000秒。如果想要实现1微秒的延时,就需要让SysTick计数9次。因为9次计数 × (1/9,000,000)秒 = 1微秒。
在实际编程中,我通常这样操作:
- 先计算好需要延时的微秒数对应的计数值
- 将这个值写入LOAD寄存器
- 清空VAL寄存器确保从零开始计数


2299

被折叠的 条评论
为什么被折叠?



