其他参数都默认即可。
记得打开串口接收中断
然后在主函数中开启空闲中断和DMA接收。recbuf是数据缓存数组自己定义一个,1024是数组长度。
__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);
HAL_UART_Receive_DMA(&huart1,recbuf,1024);
然后在串口中断处理函数(USART1_IRQHandler)中添加以下代码,即可。
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);
}
效果: