- 串口使用usart2
- dma使用dma1-stream6-channel4
- 使用hal库函数
DMA_Init(DMA1_Stream6,DMA_CHANNEL_4);
HAL_UART_Transmit_DMA(&UART2_Handler,page,num);
while(1)
{
if(__HAL_DMA_GET_FLAG(&UART2TxDMA_Handler,DMA_FLAG_TCIF2_6))//判断传输完成
{
__HAL_DMA_CLEAR_FLAG(&UART2TxDMA_Handler,DMA_FLAG_TCIF2_6);//清除标志位
HAL_UART_DMAStop(&UART2_Handler); //关闭dma
break;
}
pos=__HAL_DMA_GET_COUNTER(&UART1TxDMA_Handler);//传输进度
printf("pos:%d\n",pos);
}
void DMA_Init(DMA_Stream_TypeDef *DMA_Streamx,u32 chx)
{
__HAL_RCC_DMA1_CLK_ENABLE();
__HAL_LINKDMA(&UART2_Handler,hdmatx,UART2TxDMA_Handler);
UART2TxDMA_Handler.Instance=DMA_Streamx;
UART2TxDMA_Handler.Init.Channel=chx;
UART2TxDMA_Handler.Init.Direction=DMA_MEMORY_TO_PERIPH;
UART2TxDMA_Handler.Init.PeriphInc=DMA_PINC_DISABLE;
UART2TxDMA_Handler.Init.MemInc=DMA_MINC_ENABLE;
UART2TxDMA_Handler.Init.PeriphDataAlignment=DMA_PDATAALIGN_BYTE;
UART2TxDMA_Handler.Init.MemDataAlignment=DMA_MDATAALIGN_BYTE;
UART2TxDMA_Handler.Init.Mode=DMA_NORMAL;
UART2TxDMA_Handler.Init.Priority=DMA_PRIORITY_MEDIUM;
UART2TxDMA_Handler.Init.FIFOMode=DMA_FIFOMODE_DISABLE;
UART2TxDMA_Handler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL;
UART2TxDMA_Handler.Init.MemBurst=DMA_MBURST_SINGLE;
UART2TxDMA_Handler.Init.PeriphBurst=DMA_PBURST_SINGLE;
HAL_DMA_DeInit(&UART2TxDMA_Handler);
HAL_DMA_Init(&UART2TxDMA_Handler);
}
有问题欢迎留言讨论!