记stm32中断处理函数的一次坑

今天在写蓝桥杯嵌入式的程序,后面写到串口部分时一直卡住了,具体情况是在RTC的秒中断函数中加了一个判断,当条件满足时用USART发送数据出去,由于是写了好多条程序再下载到板子上的,所以一直在找问题,浪费了很多时间。

这是有问题的原中断处理程序

void RTC_IRQHandler(void)
{
  if (RTC_GetITStatus(RTC_IT_SEC) != RESET)
  {
    RTC_ClearITPendingBit(RTC_IT_SEC);
    TimeDisplay = 1;
		RTC_WaitForLastTask();
		
		if(RTC_GetCounter()==24*3600)
		{
			RTC_SetCounter(0);
      RTC_WaitForLastTask();
    }
		
		if(RTC_GetCounter()==Report_time)
		{
			 USART_sendstr(1);        //==就是这儿的问题           
		}
  }
}

把上面一句改为一个变量标记,在主程序中处理就没问题了

void RTC_IRQHandler(void)
{
  if (RTC_GetITStatus(RTC_IT_SEC) != RESET)
  {
    RTC_ClearITPendingBit(RTC_IT_SEC);
    TimeDisplay = 1;
		RTC_WaitForLastTask();
		
		if(RTC_GetCounter()==24*3600)
		{
			RTC_SetCounter(0);
      RTC_WaitForLastTask();
    }
		
		if(RTC_GetCounter()==Report_time)
		{
          sendReport_F=1;         //标记变量
		}
  }
}

反思:

问题应该是中断上出了问题,在中断服务程序中运行相关代码导致再一次的进入另一中断,从而发生了一些不知名的错误。(试过把二者的中断优先级改为前大后效小后前小后大,但问题都没有解决)

你可能感兴趣的:(蓝桥杯嵌入式)