串口使用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);
- }
复制代码
|