请问为什么STM32串口接收大量数据时会等不到RXNE标志

2019-07-14 14:55发布

   while(1)
    {
       UartState = HAL_UART_Receive(&huart1,(uint8_t*)&RxData,1,1);
       if(UartState == HAL_tiMEOUT)
       {
          break;
       }
      push_char(ldc_parser,RxData);
    }


长时间向串口发送数据后,进不了push_char函数了,就是一直接收超时,但是串口确实一直在发送数据;波特率为115200

debug看,是一直在这个循环里面,timeout了
    while(__HAL_UART_GET_FLAG(huart, Flag) == RESET)
    {
      /* Check for the Timeout */
      if(Timeout != HAL_MAX_DELAY)
      {
        if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
        {
         }
       }
     }

请问各位有遇到过这种情况的吗?还请多多指教
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
TOPCB
1楼-- · 2019-07-14 21:34
发生溢出错误以后,需要重新初始化串口。
jfuwre
2楼-- · 2019-07-15 03:04
一直发送,间隔频率是多少?push_char(ldc_parser,RxData);这个处理放在中断里面?还有耗时多少(预估)!!
lizhongrui
3楼-- · 2019-07-15 04:41
RxData是什么类型呢
60user36
4楼-- · 2019-07-15 06:53
怀疑你数据太快,所以有可能请测试一下:
串口有一个overrun的中断,USART_IT_ORE: OverRun Error interrupt
注册一下这个中断处理函数,看看能不能进入这个中断。
如果确实是这个问题,提供两个解决方案:
1.降低数据发送频率
2.开启硬件流控制,参考串口的RTS针脚
dingyang598
5楼-- · 2019-07-15 09:33
 精彩回答 2  元偷偷看……
daqiang985
6楼-- · 2019-07-15 14:48
HAL库效率不高,没怎么用,表示不清楚。帮忙顶起

一周热门 更多>