STM32F7 HAL库串口大量收发数据,偶尔出现收不到数据的问题

串口同时收发数据,发送数据没有问题,接收数据的时候发现有的时候会收不到,进入Debug调试查看缓存,发现会收到一个字节,然后下一个字节会接着在缓存第二位继续填充。利用memset清空缓存、清除了标志位,发现还是偶尔会出现这个Bug,有哪位大神知道是为啥?

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart->Instance == USART6)                           /* 如果是串口1 */
    {
			
								
			if(0==rxIndex)
			{
				memset(rxBuffer, 0, BUFFER_SIZE);
			}	 
								
								
			if((rxIndex&0x8000)==0)
			{
//								if(0==rxIndex)
//								{
//									memset(rxBuffer, 0, BUFFER_SIZE);
//								}
            if(rxIndex & 0x4000)                       /* 接收到了0x0d */
            {
                if(rxData[0] != 0x0A) 
                {
                    rxIndex = 0;                       /* 接收错误,重新开始 */
                }
                else 
                {
                    rxIndex |= 0x8000;                 /* 接收完成了 */
                }
            }
            else                                              /* 还没收到0X0D */
            {
                if(rxData[0] == 0x0D)
                {
                    rxIndex |= 0x4000;
                }
                else
                {
                    rxBuffer[rxIndex & 0X3FFF] = rxData[0] ;
                    rxIndex++;
                    if(rxIndex > (BUFFER_SIZE - 1))
                    {
                        rxIndex = 0;                   /* 接收数据错误,重新开始接收 */
                    }
                }
            }
        }
		   if(HAL_UART_Receive_IT(&huart6,(uint8_t*)&rxData,RXBUFFERSIZE)!= HAL_OK)
			 {
				 
				 if(HAL_UART_Receive_IT(&huart6,(uint8_t*)&rxData,RXBUFFERSIZE)==HAL_BUSY)
				 {
					 
									 __HAL_UNLOCK(&huart6);
				 huart6.RxState= HAL_UART_STATE_READY;


				}
				 __HAL_UART_ENABLE_IT(&huart6,UART_IT_ERR);
		 }
					 
		     if(__HAL_UART_GET_FLAG(&huart6, UART_FLAG_ORE) != RESET)
    {
        //取出串口缓存中多余的字节数
        uint8_t data = (uint8_t)(huart6.Instance->RDR);
        //清除ORE错误
        __HAL_UART_CLEAR_FLAG(&huart6, UART_FLAG_ORE);
    }

		 HAL_UART_Receive_IT(&huart6,(uint8_t*)&rxData,RXBUFFERSIZE);		 
		 
    }
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值