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);//使能接收中断
}
测试效果:
