龙飞虎 发表于 2021-9-28 09:19:45

systick定时器中断使用注意事项

Cortex-M内核中有一个用来为用户提供时期的滴答定时器Systick定时器。

用户在使用Systick做定时器时反应会出现问题,程序不能进入定中断。这是因为华大的驱动库中的延时函数是借助于systick定时器来实现的。例如1ms延时函数代码如下:
void delay1ms(uint32_t u32Cnt)
{
    uint32_t u32end;
   
    SysTick->LOAD = 0xFFFFFF;
    SysTick->VAL= 0;
    SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;
   
    while(u32Cnt-- > 0)
    {
      SysTick->VAL= 0;
      u32end = 0x1000000 - SystemCoreClock/1000;
      while(SysTick->VAL > u32end)
      {
            ;
      }
    }
   
    SysTick->CTRL = (SysTick->CTRL & (~SysTick_CTRL_ENABLE_Msk));
}从代码的最后一行可以看到,在退出延时函数时把systick已经关掉,systick不会再计数。如果用户要使用systick的定时功能,则在对其初始化后就不能再调用任何驱动库中提供的延时函数(注意,PLL和ADC的设置函数中有调用延时函数)

页: [1]
查看完整版本: systick定时器中断使用注意事项