其他参数都默认即可。

记得打开串口接收中断

然后在主函数中开启空闲中断和 DMA 接收。recbuf 是数据缓存数组自己定义一个,1024 是数组长度。

1
2
__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);
HAL_UART_Receive_DMA(&huart1,recbuf,1024);

然后在串口中断处理函数(USART1_IRQHandler)中添加以下代码,即可。

1
2
3
4
5
6
if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)){
__HAL_UART_CLEAR_FLAG(&huart1,UART_FLAG_IDLE);
HAL_UART_DMAStop(&huart1);
HAL_UART_Transmit_DMA(&huart1,recbuf,1024-__HAL_DMA_GET_COUNTER(&hdma_usart1_rx));
HAL_UART_Receive_DMA(&huart1,recbuf,1024);
}