滴答定时器(systick)是一个24位的向下计数的定时器,我们通过cubemx的配置让它1ms产生一次中断
cubemx配置
我这里是配置主频为80Mhz的方法,常见的还有配置主频为170Mhz的方法大家可以自行搜索,之后我都会以80Mhz为例
主频决定着程序的运行速度,但是蓝桥杯比赛代码量不多,80Mhz和170Mhz差别不大
如果有其他中断可以把滴答定时器的中断优先级设置得高一点,但是不能高过串口的中断优先级
代码
cubemx配置完之后自动生成一个 __IO uint32_t uwTick变量,这个变量在中断里面每1ms加1,十分重要,很多地方都会用到,这里介绍一个LED闪烁的代码
闪烁有几种表示方式
①以0.2s为间隔闪烁5次,指亮灭五次,总时间为2s
②直接表明间隔0.2s,持续时间不定
③直接表明间隔,持续时间为2s
闪烁的过程建议直接写在滴答定时器的中断处理函数中,最准确,滴答定时器的中断函数一般在it的.c文件中,可以移到main.c中来更好处理
某段程序内
if(某种情况发生)
{
LED_flag=1;//标志位置1
LED_tick=uwtick;
}
else
{
LED_flag=0;
}
然后在滴答定时器中断函数中进行判断再闪烁
void SysTick_Handler(void)
{
HAL_IncTick();//uwtick++
if(LED_flag)
{
if(uwTick-LED_tick==200)//以0.2s为间隔LD1闪烁
{
LED_tick=uwTick;
LED_disp(ucled^=0x01);
}
}
}