USART中断函数加入delay函数延时,无法再次进入中断是什么问题

2019-07-20 06:28发布

本帖最后由 lcclcc 于 2018-8-24 21:39 编辑

     各位高手,我今天看串口的视频自己写了个串口程序。  程序的目的是用电脑通过串口发送数据到STM32F4单片机,单片机串口接收到数据之后产生中断,中断服务函数里面让LED灯状态翻转、蜂鸣器响10ms然后关掉。可是我发现delay_ms(10);这个语句会使程序不能正常工作,具体现象是电脑发送数据时,LED灯闪了一下就灭了,蜂鸣器一直响,然后在电脑端再怎么点击发送数据,开发板上的LED和蜂鸣器的状态都不会有任何改变。我把delay_ms(10);这句注释掉,就不会有这种情况发生(只是蜂鸣器没有了声音)。我通过ST Link调试器查看USART_SR寄存器也没看出注释和不注释的时候USART_SR寄存器有什么区别。我现在把工程源码传上来,祈求各位大侠给点意见

中断服务函数:

//ÖжϷþÎñº¯Êý,
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1,USART_IT_RXNE))
  {
    LED0 = !LED0;
   LED1 = !LED1;
   LED2 = !LED2;
   USART1->SR &= 0xFFFFFFDF;
}
  // BEEP = 0;
  // delay_ms(10);
// BEEP = 1;

}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。