1:在配置完成后的main函数中不可使能接收中断
// __HAL_UART_ENABLE_IT(&huart4, UART_IT_RXNE);//接收中断
__HAL_UART_ENABLE_IT(&huart4, UART_IT_IDLE);//空闲中断
HAL_UART_Receive_DMA(&huart4,rx4_buffer, 255);//使能MDA接收
HAL_UART_Transmit(&huart4, (uint8_t *)aTxStartMessage, sizeof(aTxStartMessage),1000);
2:中断处理时必须停止DMA,负责缓冲数组箭头指向上一些的位置
__HAL_UART_CLEAR_IDLEFLAG(&huart4);//清楚空闲中断标志位
HAL_UART_DMAStop(&huart4);//停止DMA
temp = __HAL_DMA_GET_COUNTER(huart4.hdmarx);//获取缓冲长度
rx4_len = 255 - temp;
HAL_UART_Transmit(&huart4, (uint8_t *)rx4_buffer,rx4_len,1000);//发送返回
memset(rx4_buffer,0,255);//清零
rx4_len=0;
temp=0;
HAL_UART_Receive_DMA(&huart4,(uint8_t *)rx4_buffer, 255);//重新使能DMA
3:如果不是关停DMA的后果
一句话总结:DMA不会以0位重新开始,而是上一次的位置