GD32串口一直进溢出中断

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处,再全速运行,能正常运行了。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值