硬汉嵌入式论坛

 找回密码
 立即注册
查看: 109|回复: 1
收起左侧

[技术讨论] GD32H7 串口溢出错误解决办法

[复制链接]

5

主题

15

回帖

30

积分

新手上路

积分
30
发表于 前天 10:31 | 显示全部楼层 |阅读模式
问题背景:

  • 使用GD32H7 的一路串口作为 CLI 的调试后。


问题现象:
  • 偶发现象。
  • 偶尔上电,发现串口 CLI 没有任何响应,系统中的其他任务都正常运行。
  • 重新上电重启后 CLI 又能正常使用。


解决办法:
  • 通过log 和 状态寄存器观察,发现串口无响应的时候卡在了溢出中断处,在串口进入中断后清除相应标志位就解决了。
  • [C] 纯文本查看 复制代码
    /*!
        \brief      this function handles USART RBNE interrupt 
        \param[in]  none
        \param[out] none
        \retval     none
    */
    void USART0_IRQHandler(void)
    {
        portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
        if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)) {
            /* receive data */
            char data = usart_data_receive(USART0);
            usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE);
    
            if (xQueue_rx && xTaskGetSchedulerState() != taskSCHEDULER_SUSPENDED) {
                xQueueSendFromISR(xQueue_rx, &data, &xHigherPriorityTaskWoken);
                protYIELD_FROM_ISR(xHigherPriorityTaskWoken);
            }
        } else if (RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE_ORERR)) {
            usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE_ORERR);
            (void)usart_data_receive(USART0);
        }
    }



回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115679
QQ
发表于 前天 15:42 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-11 22:35 , Processed in 0.328416 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表