1 .1系统滴答定时器
系统滴答定时器(SysTick),为内核定时器,是一个24位的递减计数器,其中可以选择1或8(8更多)分频,由AHB总线上的时钟经过分频到达VAL递减计数器,当VAL=0时,计数完成,标志位置1。还用重装载值,当VAL=0后,VAL计数器可以重新装载LOAD的值。
1.2系统滴答的寄存器与标志位
系统滴答定时器的寄存器如图所示,其中较为关键的是CLK源寄存器并不是选择时钟源,而是选择分频,因为系统滴答定时器的来源只有AHB总线。
1.3延时函数初始化![](https://img-blog.csdnimg.cn/direct/b917b4a4676a4cd2b0e462be0c7c6f44.png)
延时函数的初始化在hal库中默认为系统滴答定时器进行了8分频,其中G-FAC-US是一个全局变量,表示1mhz下1us的计时次数(1次)。此时的时钟频率是72/8=9MHZ,因此此时需要让g_fac_us计数9次。若不分频就是72次。
1.4延时函数
在初始化函数中得到了当前频率的1us的计次数,赋给重装计数器,并清空计数器进行使能,再判断ctrl是否完成计数。
补充,再delay_us中,使用了两种进行位操作的方式,两者本质一模一样,但是第一种可读性与维护性不强,第二种则是逻辑性不强,没有第一种简单粗暴。