stm32f7xx通过DMA发送数据到串口例程

  • 串口使用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);
} 

有问题欢迎留言讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值