1. Cortex-M SysTick定时器系统概述
SysTick定时器是ARM Cortex-M处理器内核中一个简单但功能强大的24位倒计时定时器,它作为处理器核心的一部分,为嵌入式系统提供了精确的时间基准。与通用定时器不同,SysTick直接集成在处理器内核中,这使得它具有更高的可靠性和更低的延迟。
在典型的Cortex-M微控制器中,SysTick由四个主要寄存器组成:
- CTRL(控制和状态寄存器):用于启用/禁用定时器、选择时钟源和检查计数状态
- LOAD(重载值寄存器):设置定时器溢出时的重载值
- VAL(当前值寄存器):读取或写入当前计数值
- CALIB(校准值寄存器):提供厂商预设的校准值(非必需)
SysTick的工作流程可以描述为:
- 系统启动时,程序员通过LOAD寄存器设置重载值
- 定时器从重载值开始递减计数
- 当计数值达到0时,触发SysTick中断(如果已使能)
- 定时器自动重新加载LOAD值并继续计数
关键提示:SysTick使用处理器时钟(或外部参考时钟)作为时钟源,这意味着它的定时精度与系统时钟频率直接相关。在配置时需要特别注意时钟树设置。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. SysTick的硬件设计与工作原理
2.1 寄存器级深度解析
SysTick的每个寄存器都有其特定的功能位:
CTRL寄存器(0xE000E010)
code复制bit[0] ENABLE: 定时器使能位
bit[1] TICKINT: 中断使能位
bit[2] CLKSOURCE: 时钟源选择(0=外部参考时钟,1=处理器时钟)
bit[16] COUNTFLAG: 计数到0标志位
LOAD寄存器(0xE000E014)
- 24位有效值,写入值=实际周期数-1
- 例如:要配置1ms中断,系统时钟72MHz
LOAD = (72,000,000 / 1000) - 1 = 71,999
VAL寄存器(0xE000E018)
- 写入任何值都会清除计数器并将COUNTFLAG清零
- 读取时返回当前计数值
CALIB寄存器(0xE000E01C)
- 提供厂商预设的10ms校准值(NOREF=1时使用)
- 不是所有芯片都实现此寄存器
