本帖最后由 IFX_Lingling 于 2025-9-2 14:12 编辑
SysTick是 ARM Cortex-M 内核内置的 24 位系统定时器,其核心功能由以下四个寄存器实现:
1. CTRL(控制与状态寄存器) - 地址偏移:0x000
- 功能:控制定时器运行、中断及时钟源选择,提供状态标志。
- 关键位段:
位段 | 名称 | 类型 | 功能描述 | 0 | ENABLE | R/W | 使能定时器(1=启用,0=禁用) | 1 | TICKINT | R/W | 使能中断(1=计数到0时触发中断) | 2 | CLKSOURCE | R/W | 时钟源选择(0=外部时钟 HCLK/8,1=内核时钟 HCLK) | 16 | COUNTFLAG | R | 计数完成标志(1=计数器已归零,读取后自动清零) |
2.LOAD(重装载值寄存器) - 地址偏移:0x004
- 功能:设置定时器递减计数的初始值,决定定时周期。
- 特性:
- 24 位宽,有效值范围 0x000000 ~ 0xFFFFFF。
- 当计数器减至 0 时,自动从 LOAD 重新加载值。
3.VAL(当前值寄存器) - 地址偏移:0x008
- 功能:实时读取计数器当前值,或清零计数器。
- 特性:
- 只读:读取时返回剩余计数值。
- 可写:写入任意值会立即清零计数器,并清除 COUNTFLAG。
4.CALIB(校准值寄存器) - 地址偏移:0x00C
- 功能:提供校准参数(通常由芯片厂商预设),用于补偿时钟偏差。
- 关键位段:
[td] 位段 | 名称 | 类型 | 功能描述 | 31 | NOREF | R | 1=无外部参考时钟,0=外部参考时钟可用 | 30 | SKEW | R | 1=校准值不准确,0=校准值精确(10ms基准) | 23:0 | TENMS | R | 10ms 对应的计数值(用于校准时钟频率) |
- 注意事项:
- 通常为只读寄存器,用户无需直接操作。
- 校准值可用于计算精确的定时参数(如补偿时钟频率偏差)。
-
SysTick 中断入口函数
SysTick中断入口函数(通常命名为 SysTick_Handler)的配置涉及中断服务程序(ISR)的声明、优先级设置及中断触发逻辑。 在ModusToolbox里面直接使能中断,编写中断入口函数就可以了。 示例代码见附件:
|