OV-Watch-2-系统滴答定时器
一、系统滴答定时器介绍
【信盈达】- 关于STM32如何使用系统滴答定时器实现精准延时_哔哩哔哩_bilibili
SysTick 是 ARM Cortex-M 处理器内建的一个定时器,通常用于生成定时中断,用于实现操作系统的时间片轮转调度、延时功能或定期的定时任务。SysTick 定时器是一个 24 位递减计数器,通常用来生成周期性的中断,以便进行周期性任务的调度。
SysTick 定时器的工作原理:
- 24 位计数器:
- SysTick 定时器的核心是一个 24 (16,777,216)位的递减计数器。计数器从一个预定值递减到 0。当计数器到达 0 时,会触发一个中断。
- 计数器可以通过设置其初始值来指定时间间隔。
- 中断控制:
- SysTick 定时器生成的中断可以用来进行定时任务的执行,例如在 RTOS 中,SysTick 用来生成时间片,以进行任务调度。
- 也可以用于延时函数(如延时 1 毫秒、10 毫秒等),控制时间的流逝。
- 计时精度:
- SysTick 的精度通常取决于系统时钟频率。常见的情况下,系统时钟频率为 72 MHz 或 48 MHz,因此 SysTick 的中断周期可以非常精确。
SysTick_Type结构体
CTRL
(SysTick 控制与状态寄存器):- 偏移量:
0x000
- 类型:
__IOM uint32_t
(读写寄存器) - 描述: 该寄存器用于控制和查看 SysTick 定时器的状态。通过设置不同的控制位,能够启动、停止定时器,配置中断等。
常见控制位:
- ENABLE (位 0): 启动或停止 SysTick 定时器。
- TICKINT (位 1): 启用或禁用 SysTick 溢出中断。
- CLKSOURCE (位 2): 选择 SysTick 定时器的时钟源(HCLK 或外部时钟)。
- COUNTFLAG (位 16): 当计数器溢出时,设置为 1。
- 偏移量:
LOAD
(SysTick 重载值寄存器):- 偏移量:
0x004
- 类型:
__IOM uint32_t
(读写寄存器) - 描述: 该寄存器用于设置定时器的重载值。SysTick 定时器每当计数器减至零时,会根据
LOAD
寄存器的值重新加载并开始新的计数。
用途: 通过设置该寄存器的值来控制定时器的溢出周期。例如,如果你想让定时器每 1 毫秒溢出一次,你可以设置该寄存器的值为
SystemCoreClock / 1000
。- 偏移量:
VAL
(SysTick 当前值寄存器):- 偏移量:
0x008
- 类型:
__IOM uint32_t
(读写寄存器) - 描述: 该寄存器保存当前 SysTick 定时器的计数值。每当计数器从
LOAD
的值开始计数,直到它到达零时,VAL
会自动重载为LOAD
的值,并且会触发中断(如果启用了中断)。
用途: 读取此寄存器可以获取当前定时器的剩余计数值。它可用于计算经过的时间或检查定时器的状态。
- 偏移量:
CALIB
(SysTick 校准寄存器):- 偏移量:
0x00C
- 类型:
__IM uint32_t
(只读寄存器) - 描述: 该寄存器提供关于系统时钟的校准信息,包括 SysTick 定时器的校准值。它通常用于获取定时器的精度和所使用的时钟的频率。
用途: 这个寄存器通常用于调试和校准目的,帮助开发者了解系统时钟的频率和定时器的精度。
- 偏移量:
二、系统滴答定时器用于延时函数
1.1delay_init()
1 | void delay_init(void) |
1.2 delay_us()
1 |
|
1.3 delay_ms()
1 |
|
三、HAL_Delay()
1 | __weak void HAL_Delay(uint32_t Delay) |
注意:第9行默认将延时增加了1ms,weak函数可以根据自己的需求更改
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 The personal blog of DWen_666!