jszy1987 发表于 2018-7-6 09:45:36

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

   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))
      {
         }
       }
   }

请问各位有遇到过这种情况的吗?还请多多指教


发表于 2018-7-6 09:51:24

HAL_UART_Receive(&huart1,(uint8_t*)&RxData,1,1);
把最后的1该成1000试试,这个是说等待延时,1ms的话太快了。

发表于 2018-7-6 09:51:53

发生溢出错误以后,需要重新初始化串口。

MrJiu 发表于 2018-7-6 09:54:41

一直发送,间隔频率是多少?push_char(ldc_parser,RxData);这个处理放在中断里面?还有耗时多少(预估)!!

电子星辰 发表于 2018-7-6 10:31:52

RxData是什么类型呢

stm1024 发表于 2018-7-6 10:41:28

怀疑你数据太快,所以有可能请测试一下:
串口有一个overrun的中断,USART_IT_ORE: OverRun Error interrupt
注册一下这个中断处理函数,看看能不能进入这个中断。
如果确实是这个问题,提供两个解决方案:
1.降低数据发送频率
2.开启硬件流控制,参考串口的RTS针脚

黑皮男 发表于 2018-7-6 11:07:24

看着像处理速度不够,最好用缓存来接收数据

叶♂子 发表于 2018-7-6 11:15:37

HAL库效率不高,没怎么用,表示不清楚。帮忙顶起

斜阳__ 发表于 2018-7-6 12:25:23

HAL_UART_Receive()一次接收一个Byte数据会有丢数据的情况。我之前遇到过。改成不定长数据接收解决的。或者用LL库也可以处理

jakecumt 发表于 2018-7-6 12:25:36

增加缓存,这个好像是接收数据溢出引起的
页: [1] 2
查看完整版本: STM32串口接收大量数据时会等不到RXNE标志,为什么