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)) { } } } 请问各位有遇到过这种情况的吗?还请多多指教 |
把最后的1该成1000试试,这个是说等待延时,1ms的话太快了。
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
串口有一个overrun的中断,USART_IT_ORE: OverRun Error interrupt
注册一下这个中断处理函数,看看能不能进入这个中断。
如果确实是这个问题,提供两个解决方案:
1.降低数据发送频率
2.开启硬件流控制,参考串口的RTS针脚
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
那个接收超时判断在HAL里已经执行了。
楼主在这里又运行:
if(UartState == HAL_TIMEOUT)
{
break;
}
由于break了,当然无法执行下一句: push_char(ldc_parser,RxData);
评分
查看全部评分