这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » GD32 » GD32串口一直进溢出中断的bug分析与解决办法

共1条 1/1 1 跳转至

GD32串口一直进溢出中断的bug分析与解决办法

院士
2025-04-20 23:12:04     打赏

GD32串口一直进溢出中断的bug分析与解决办法

GD32单片机在调试串口时,在#1处打断点,会导致串口溢出中断,再全速运行,会不断地进#2处,但不会进#1。

void USART0_IRQHandler(void)
{
  uint8_t dat;
  if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)) //#2
  {
    dat= usart_data_receive(USART0);        //#1       
    usart_interrupt_flag_clear(USART0,USART_INT_FLAG_RBNE);
    //用户数据处理函数   
  }
}

这个bug是一个典型的中断处理不完全的案例。在没有Uart FIFO的MCU硬件设计中,MCU可能因为处理更高优先级的中断而来不及接收串口数据,从而导致了串口数据溢出的问题。在这个案例里,软件设计人员开启了Uart的OE中断,即溢出中断。故当发生溢出时,MCU直接进入了溢出中断,而设计人员这时并未完善代码,串口中断函数里面没有清除溢出中断的操作,导致MCU一直触发了溢出中断,反复进入串口中断。

解决办法

  解决办法其实也非常简单,在进入中断处理函数里面时,先检查是否溢出中断触发,或者检查溢出标志位是否置位,如果置位则清除溢出中断即可。通常,这时的串口接收数据也做丢弃处理。

  解决办法其实也非常简单,在进入中断处理函数里面时,先检查是否溢出中断触发,或者检查溢出标志位是否置位,如果置位则清除溢出中断即可。通常,这时的串口接收数据也做丢弃处理。





关键词: 串口     溢出     中断     解决    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]