hal库空闲中断 + DMA
-
在CubeMX中对所需要的进行配置,主要是RCC,UART(配置UART,添加DMA, 中断使能)
-
先使能空闲中断
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
-
打开DMA
HAL_UART_Receive_DMA(&huart1, Rx1_buf, BUF_SIZE);
-
在stm32g0xx_it.c的 USART1_IRQHandler 中添加中断处理(不一定都写在这里面,也可以使用中断回调函数)
-
判断是否为空闲中断
if(RESET != __HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE)) { }
-
清楚中断标志位
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
-
关闭DMA
HAL_UART_DMAStop(&huart1);
HAL_UART_DMAStop
为什么要关DMA?
是发送和接收都关了码?
-
计算接收长度
data_length = BUF_SIZE - __HAL_DMA_GET_COUNTER(&hdma_usart1_rx);
-
清空接收缓存
准备接收下一次数据
-
重新开启DMA
HAL_UART_Receive_DMA(&huart1, Rx1_buf, BUF_SIZE);
-
在合适的位置中加入你的操作
-