串口中断接收问题HAL_UART_Receive_IT

在main中开启接收,pdata全局数组

HAL_UART_Receive_IT( &huart1, pdata, 6);


这个函数没有动

void USART1_IRQHandler(void)

{

  /* USER CODE BEGIN USART1_IRQn 0 */

  /* USER CODE BEGIN 0 */


  /* USER CODE END 0 */

  /* USER CODE END USART1_IRQn 0 */

  HAL_UART_IRQHandler(&huart1);

  /* USER CODE BEGIN USART1_IRQn 1 */

  /* USER CODE END USART1_IRQn 1 */

}


主要是在回调函数中进行处理

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{

if( huart == &huart1 )

//其他处理

CodeResolve();

}

}


目前测试是接收到什么就返回什么,已知传输6个字节,我发现发7个过去会传前六个回来,且第七个会留到下一次,发2个过去,不会触发回调但是也被保存下来了

两个问题:

  1.   如何在接收两个的时候不保存,每次发过去都是空缓存区接收,如何清缓存区?

  2.  发7个字节过去时不触发回调,并将缓存清空,因为字节多了,已经错误了?

有没有比较好的方式,感谢


已邀请:

lijx

赞同来自:

改成sizeof(pdata)

这方世界属于我

赞同来自:

串口接收中断这东西还是自己写效率高还灵活

Zchao

赞同来自:

HAL_UART_Receive_IT( &huart1, pdata, 6);

这里的接收字节是6个,慢慢细品。。。楼上有人提出解决方法。

如果要实现收啥发啥,建议用串口空闲中断

要回复问题请先登录注册