本文介绍STM32串口空闲中断加DMA接收不定长字符串的方法。将串口3配置接收中断使能、空闲中断使能、添加DMA通道来接收不定长数据。
cubemx配置:
使能串口三采用Asynchronnous模式
使能串口三中断
添加DMA通道
代码
MX_GPIO_Init();
MX_DMA_Init();
MX_USART3_UART_Init();
/* USER CODE BEGIN 2 */
HAL_UARTEx_ReceiveToIdle_DMA(&huart3,receiveData,sizeof(receiveData));
__HAL_DMA_DISABLE_IT(&hdma_usart3_rx,DMA_IT_HT);
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
if(huart==&huart3){
HAL_UART_Transmit_DMA(&huart3,receiveData,Size);
HAL_UARTEx_ReceiveToIdle_DMA(&huart3,receiveData,sizeof(receiveData));
__HAL_DMA_DISABLE_IT(&hdma_usart3_rx,DMA_IT_HT);
}
}
使用HAL_UARTEx_ReceiveToIdle_DMA函数时,DMA的"传输过半"也会触发HAL_UARTEx_RxEventCallback回调函数,处理方法也很简单关闭"DMA传输过中断"即可,__HAL_DMA_DISABLE_IT(&hdma_usart3_rx,DMA_IT_HT)
串口助手
线上串口调试助手:波特律动 串口助手 (baud-dance.com)
好了,如果能帮到您,还请帮忙点个赞,谢谢。