如何避免 HAL_UART_RECEIVE_IT() 溢出错误(错误代码 8)

问题描述 投票:0回答:0

我的 IT 在收到 8 个字节后被调用:

HAL_UART_Receive_IT(&huart2, buffer1, 8);

其中 buffer1 的长度为 8.

在我的回调函数中,我将 8 个字节复制到单独的缓冲区 2 和空缓冲区 1 并重新启动接收。 这样我不断收到:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){

    for(int i=0; i<8; i++){
        buffer2[i] = buffer1[i];
        buffer1[i] = '\0';
    }

    HAL_UART_Receive_IT(&huart2, buffer1, 8);

}

问题:如果我的串口输入超过8个字节,8个字节后执行回调函数,就会报overrun error,无法再接收

我的行为如下,它在 8 个字节后被调用,然后,在重新启动后我似乎正在读取 one more 字节到我的缓冲区 1,之后发生错误。在我看来,扩孔字节存储在某个地方,有没有办法丢弃溢出?

我知道 uart 函数以循环方式工作我的 buffer1,因此我的期望是:

example- 接收 10 个字节。 8字节后的IT 重启接收 读取剩余的 2 个字节。

uart hal overrun
© www.soinside.com 2019 - 2024. All rights reserved.