打印
[研电赛技术支持]

GD32串口一直进溢出中断

[复制链接]
55|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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);
    //用户数据处理函数   
  }
}


查看手册





即表示数据有接收的情况下,再接收到一个字节,就会置位ORERR。这里默认开启了溢出中断。这里和51单片机和ST的芯片有所不同。所以在串口接收中断中,需考虑这种情况,下面是优化之后的代码

void USART0_IRQHandler(void)
{
  uint8_t dat;

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



在#1处打断点,会导致串口溢出中断,再全速运行,会直接进#2处,再全速运行,能正常运行了。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/lljss1980/article/details/127115652

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

88

帖子

0

粉丝