初级会员

- 积分
- 163
- 金钱
- 163
- 注册时间
- 2021-10-22
- 在线时间
- 35 小时
|
1金钱
《STM32 不完全手册(寄存器版)》P 69有如下描述:
因为在ucos下 SysTick不能再被随意更改,如果我们还想利用 SysTick来做 delay_us或者
delay_ms的延时,就必须想点办法了,这里我们利用的是时钟摘取法。以 delay_us为例,比如
delay_us(50),在刚进入 delay_us的时候先计算好这段延时需要等待的 SysTick计数次数,这 里
为 50*9(假设系统时钟为 72Mhz,那么 SysTick每增加 1,就是 1/9us),然后我们就一直统计
SysTick的计数变化,直到这个值变化了 50*9,一旦检测到变化达到或者超过这个值,就说明
延时 50us时间到了。这样,我们只是抓取 SysTick计数器的变化,并不需要修改 SysTick的任
何状态,完全不影响 SysTick作为 UCOS时钟节拍的功能,这就是实现 delay和操作系统共用
SysTick定时器的原理。
请教各位,红色字体部分如何理解?
SysTick一般情况下应该是ms级吧? 1/9us是什么意思?
|
最佳答案
查看完整内容[请看2#楼]
原子delay函数里systick延时是us级的 定时器时钟用了系统时钟的8分频 所以定时器频率是72000000/8Hz 变化周期取倒数1/9us
|