请问为什么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条回答
youpukeji668
1楼-- · 2019-07-15 17:12
HAL_UART_Receive()一次接收一个Byte数据会有丢数据的情况。我之前遇到过。改成不定长数据接收解决的。或者用LL库也可以处理
svmuwer
2楼-- · 2019-07-15 21:01
增加缓存,这个好像是接收数据溢出引起的
ctwewer
3楼-- · 2019-07-15 22:59
本帖最后由 wenyangzeng 于 2018-7-6 21:39 编辑

那个接收超时判断在HAL里已经执行了。
楼主在这里又运行:
if(UartState == HAL_TIMEOUT)
       {
          break;
       }
由于break了,当然无法执行下一句: push_char(ldc_parser,RxData);
lee_st
4楼-- · 2019-07-16 01:11
 精彩回答 2  元偷偷看……
lee_st
5楼-- · 2019-07-16 07:09
赶快放弃库哦
lee_st
6楼-- · 2019-07-16 08:45
现在还来得及的

一周热门 更多>