原文链接:https://www.itdoy.com/index.php/post/14.html
STM32F429使用HAL库实现DMA发送UART串口数据时的代码如下:
MYDMA_USART_Transmit(&UART1_Handler,(uint8_t*)tx,i);//启动DMA传输方式
while(!__HAL_DMA_GET_FLAG(&UART1TxDMA_Handler,DMA_FLAG_TCIF3_7));//等待DMA2_Steam7传输完成
__HAL_DMA_CLEAR_FLAG(&UART1TxDMA_Handler,DMA_FLAG_TCIF3_7);//清除DMA2_Steam7传输完成标志
HAL_UART_DMAStop(&UART1_Handler);//传输完成以后关闭串口DMA
其中的“DMA_FLAG_TCIF3_7”表示什么含义呢?我们在“STM32F4XX HAL驱动说明书”中找到了部分答案:
DMA flag definitions
DMA_FLAG_FEIF0_4
DMA_FLAG_DMEIF0_4
DMA_FLAG_TEIF0_4
DMA_FLAG_HTIF0_4
DMA_FLAG_TCIF0_4
DMA_FLAG_FEIF1_5
DMA_FLAG_DMEIF1_5
DMA_FLAG_TEIF1_5
DMA_FLAG_HTIF1_5
DMA_FLAG_TCIF1_5
DMA_FLAG_FEIF2_6
DMA_FLAG_DMEIF2_6
DMA_FLAG_TEIF2_6
DMA_FLAG_HTIF2_6
DMA_FLAG_TCIF2_6
DMA_FLAG_FEIF3_7
DMA_FLAG_DMEIF3_7
DMA_FLAG_TEIF3_7
DMA_FLAG_HTIF3_7
DMA_FLAG_TCIF3_7
原来,这些都是“DMA flag definitions”,那么这些“DMA flag definitions”分别都代表什么含义呢?我们在“STM32F4XX中文参考手册”中找到了剩下的答案:
总结:根据以上寄存器的定义,我们可以看出,所谓的“DMA flag definitions”也就是对应着这些寄存器,比如“DMA_FLAG_TCIF3_7”就代表着“DMA_LISR”中“TCIF7”的数据流传输完成标志位(即数据流7的传输完成标志位),至于“3”,代表着通道“4”,3代表4是因为是从0开始计数表示。