🔬 实验14:SysTick 定时器
📌 实验目标
- 掌握 SysTick 滴答定时器的配置方法
- 学会使用 SysTick 实现精确延时
- 理解 SysTick 作为系统心跳的作用
- 实现 delay_ms 和 delay_us 函数
一、实验内容
- 配置 SysTick 定时器 1ms 中断
- 编写 SysTick_Handler 中断服务函数
- 实现基于 SysTick 的延时函数
- 验证延时准确性
SysTick 延时函数
static uint32_t TimingDelay;
void SysTick_Init(void)
{
// SystemCoreClock = 72MHz
// 72M / 1000 = 72000 → 1ms 中断一次
if (SysTick_Config(SystemCoreClock / 1000))
{
while (1); // 配置失败
}
}
void SysTick_Handler(void)
{
if (TimingDelay > 0)
TimingDelay--;
}
void delay_ms(uint32_t ms)
{
TimingDelay = ms;
while (TimingDelay != 0);
}
💡 这段代码怎么用?
SysTick_Config(SystemCoreClock / 1000)让 SysTick 每 1ms 中断一次;中断里TimingDelay--,主程序忙等它归零- 这就是课程配套
delay.c里delay_ms()的基本原理——SysTick 只做「心跳」,不占用通用定时器 - SysTick 是 24 位倒计数,LOAD 最大
0xFFFFFF,所以单次delay_ms上限约 1864ms,更久要循环调用
二、参考资料
| 资料 | 文件 |
|---|---|
| SysTick PPT | 实验六 定时器-SysTick.pptx |
| 实验指导文档 | 实验6 定时器-SysTick定时器.docx |