stm32f405 HAL库串口接收错误。

错误分析

用的HAL库有丢包问题,

定义void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
   
    if(huart == &huart1)       
    {
        log_u("********************* huart1 err ********************************* \r\n");
        switch(huart->ErrorCode)
        {
            case HAL_UART_ERROR_NONE:
                log_u("HAL_UART_ERROR_NONE\r\n");
                break;
            case HAL_UART_ERROR_PE:
                log_u("HAL_UART_ERROR_PE\r\n");
                break;
            case HAL_UART_ERROR_NE:
                log_u("HAL_UART_ERROR_NE\r\n");
                break;
            case HAL_UART_ERROR_FE:
                log_u("HAL_UART_ERROR_FE\r\n");
                break;
            case HAL_UART_ERROR_ORE:
                log_u("HAL_UART_ERROR_ORE\r\n");
                break;
            case HAL_UART_ERROR_DMA:
                log_u("HAL_UART_ERROR_DMA\r\n");
                break;
            default:
                log_u("other\r\n");
                break;
        }
        huart->RxState = HAL_UART_STATE_READY;
        HAL_UART_Receive_IT( &huart1 , RxdBuff1, MAX_BUFFER);
        for(i=0; i         {
            RxdBuff1[i] = 0;
        }
    }    
}

错误日志为

[14:15:04]********************* huart1 err ********************************* 
[14:15:04]HAL_UART_ERROR_NE
[14:15:04]********************* huart1 err ********************************* 
[14:15:04]other
[14:15:04]********************* huart1 err ********************************* 
[14:15:04]HAL_UART_ERROR_ORE
[14:15:04]********************* huart1 err ********************************* 
[14:15:04]HAL_UART_ERROR_ORE

报HAL_UART_ERROR_NE错误

查看stm32数据手册

2 NF:检测到噪声标志 (Noise detected flag)
当在接收的帧上检测到噪声时,该位由硬件置 1。该位由软件序列清零(读入 USART_SR
存器,然后读入 USART_DR 寄存器)。
0:未检测到噪声
1:检测到噪声
注意: 如果 EIE 位置 1,则在进行多缓冲区通信时,该位不会生成中断,因为该位出现的时间与
本身生成中断的 RXNE 位因 NF 标志而生成的时间相同。
注意: 当线路无噪声时,可以通过将 ONEBIT 位编程为 1 提高 USART 对偏差的容差来禁止
NF 标志(请参见695 页的第 26.3.5 节: USART 接收器对时钟偏差的容差)。

将ONEBIT设置为1之后,错误率减少但是仍然存在。


你可能感兴趣的:(stm32开发)