在主循环中进行按键扫描时程序卡死,最后发现是卡在delay函数处,程序没有进入SysTick中断处理函数。
uint32_t timingDelay = 0;
void SysTick_Handler(void)
{
timingDelay--;
}
void Delay_Ms(uint32_t t){
timingDelay = t;
while(timingDelay);
}
参考文章STM32串口中断卡死主循环问题分析,检查代码发现在初始化RTC的时候启用了中断,没有编写对应的处理函数,RTC的中断标志位没有清除导致后续的中断请求无法的到响应。
解决办法:
// 编写中断对应的处理函数,并清除中断标志位
void RTC_IRQHandler(){
if(RTC_GetITStatus(RTC_IT_SEC)){
}
RTC_ClearITPendingBit(RTC_IT_SEC);
}
如果中断用不到的话也可以直接将中断关闭,我这边是因为之后要用到所以提前把中断启用了。