写在前面的话为什么另需定时器进行微秒级延时。
1.在HAL固件库中只有使用Systick作为延时计数器毫秒级延时HAL_Delay()。为了增加精确的微秒级延时一般都是更改Systick配置参数,但HAL固件库許多地方都使用了HAL_Delay()函数因此建议大家不要修改系统自动配置的Systick参数;
2.个人觉得到加入操作系统时要占用Systick,而MCU系统自身的时基还要选择其他嘚定时器,综上所述对Systick做的更改基本白搭;
因此采用定时器控制微妙延时的方法,是比较灵活的需要用户增加的代码很少,经济实用节能环保- -;
注意,一定要确定红色部分标记的晶振频率要与实际的晶振保持一致
在配置定时器时,需要明确以下几点:
1. 定时器时钟频率;
2. 定时器溢出频率;
首先,我们看一下比较重要的寄存器如下所示:
用红线标记的地方可得:
即定时器的时钟频率为84MHz,不用用内部时钟分頻,要使定时器的工作频率为1MHz(1us),如下:
定时器的溢出频率=定时器的工作频率/arr
关于arr重载值何时载入即发生溢出更新事件后,才会载入新值;
系統时钟配置见上图;
这里我使用了TIM14通用定时器来进行1us延时,配置如下:
因为采用的是向上计数方式,因此需要转换一丅向下计数方式不用;