🔬 实验14:SysTick 定时器

📌 实验目标
  • 掌握 SysTick 滴答定时器的配置方法
  • 学会使用 SysTick 实现精确延时
  • 理解 SysTick 作为系统心跳的作用
  • 实现 delay_ms 和 delay_us 函数

一、实验内容

  1. 配置 SysTick 定时器 1ms 中断
  2. 编写 SysTick_Handler 中断服务函数
  3. 实现基于 SysTick 的延时函数
  4. 验证延时准确性
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);
}
💡 这段代码怎么用?
  1. SysTick_Config(SystemCoreClock / 1000) 让 SysTick 每 1ms 中断一次;中断里 TimingDelay--,主程序忙等它归零
  2. 这就是课程配套 delay.cdelay_ms() 的基本原理——SysTick 只做「心跳」,不占用通用定时器
  3. SysTick 是 24 位倒计数,LOAD 最大 0xFFFFFF,所以单次 delay_ms 上限约 1864ms,更久要循环调用

二、参考资料

资料文件
SysTick PPT实验六 定时器-SysTick.pptx
实验指导文档实验6 定时器-SysTick定时器.docx