【芯片】Systick
时间
| 单位名称 | 标准符号 | 常见简写 | 与秒(s)的换算关系 | 相邻单位间的换算关系 |
|---|---|---|---|---|
| 秒 | s | — | 1 s = 1 s(基本单位) | 1 s = 10³ ms(1 秒 = 1000 毫秒) |
| 毫秒 | ms | — | 1 ms = 10⁻³ s = 0.001 s | 1 ms = 10³ μs(1 毫秒 = 1000 微秒) |
| 微秒 | μs | us | 1 μs = 10⁻⁶ s = 0.000001 s | 1 μs = 10³ ns(1 微秒 = 1000 纳秒) |
| 纳秒 | ns | — | 1 ns = 10⁻⁹ s = 0.000000001 s | 1 ns = 10⁻³ μs(1 纳秒 = 0.001 微秒) |
SysTick:系统滴答定时器
SysTick 本身是相对计数器,要让它精准映射现实时间,需解决时钟源精度和误差补偿问题
1、选择稳定的时钟源(核心前提)
- 内部 RC 振荡器:成本低、无需外部元件,但精度差(漂移可达 1%~5%),导致 SysTick 的计数周期与现实时间偏差较大(如 100MHz RC 时钟实际可能只有 99MHz,1ms 定时会变成 1.01ms)。
- 外部晶振(XTAL):精度高(漂移通常 < 10ppm,即百万分之十),是工业 / 汽车电子中 SysTick 映射现实时间的首选。
2. 精准计算重载值(RELOAD)
根据时钟源频率和目标现实时间,严格按照公式计算重载值,避免整数截断误差。
例如:若 HCLK=48MHz,要实现500μs定时:
- 单个计数周期:
1/48MHz ≈ 20.8333ns - 所需计数次数:
500μs / 20.8333ns = 24000次 - 重载值配置:
RELOAD = 23999(无截断误差,精准匹配)
问题1、SysTick 有哪些典型应用?
- 操作系统任务调度:为 RTOS(如 FreeRTOS、uCOS)提供系统节拍(tick),实现任务时间片轮转和延时管理
- 精确延时函数:实现 ms/us 级阻塞或非阻塞延时(如 HAL_Delay ())
- 系统运行时间统计:记录系统启动以来的 tick 数,用于性能分析和日志时间戳
- 软件定时器:基于 SysTick 中断实现多个定时任务管理
问题2、RTOS 为什么选择 SysTick 作为系统时钟?
- 可移植性:所有 Cortex-M 内核都集成 SysTick,无需额外配置
- 低功耗:内核自带,不占用额外外设资源
- 统一接口:提供标准的 tick 中断,简化 RTOS 移植
- 系统级支持:与 NVIC 紧密集成,支持任务上下文切