stm32 HAL库串口收发-中断接收DMA发送不定长数据

使用的时候发现:接收完一个字节立即用DMA的方式发送出去,会出现数据的丢失,如用串口调试助手发送1234,返回的只有13 目前只能用缓存buf+协议结束(如0x0d,0x0a)的方式解决。

stm32cubeMX的配置界面如下: 1.使用DMA,方向是内存到外设 2.使用USART1 代码方面:

#define Length_MAX  255    //数组最大长度
uint8_t RxBuf[Length_MAX]; //缓存数组
uint8_t RxByte[1];		   //接收数组
uint8_t Length=0;          //目前数据长度
int main(void)
{
          
   
 
  HAL_Init();
  SystemClock_Config();

  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART1_UART_Init();
  HAL_UART_Receive_IT(&huart1, (uint8_t *)RxByte, 1);//使能接收中断

  while (1);
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//中断回调函数
{
          
   
	RxBuf[Length++]=RxByte[0];
	if(Length==Length_MAX)
		Length=0;
	if(RxBuf[Length-1]==0x0a && RxBuf[Length-2]==0x0d)
	{
          
   		
		while(HAL_UART_Transmit_DMA(&huart1, RxBuf, Length-2)==HAL_OK);
		Length=0;
	}
	HAL_UART_Receive_IT(&huart1, (uint8_t *)RxByte, 1);//使能接收中断

}

测试效果:

经验分享 程序员 微信小程序 职场和发展