关于STM32串口DMA只能发送一次数据的问题

原因:

可能是忘记关闭DMA导致串口、下一次DMA无法正常工作

解决办法:

在传输完成之后,关闭DMA,这里是调用串口DMA关闭函数,形参为串口初始化结构体地址,我这里是串口2。

HAL_UART_DMAStop(&huart2);    //关闭寄存器——>外设的串口DMA

完美优化:

传输完成标志位

TCX标志位,例如:发送通道为7,即TC7

DAM外设通道表

 例如,我使用的是串口2DMA的TX发送模式,即通道为USART2_TX,为通道7

代码解决

调用的是__HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__);宏定义来获取标志位。

第一个形参为串口初始化结构体,第二个形参为通道完成标志位,这里我使用的是通道7,即TC7

    if(__HAL_DMA_GET_FLAG(&hdma_usart2_tx,DMA_FLAG_TC7))//获取传输完成标志
    {
        __HAL_DMA_CLEAR_FLAG(&hdma_usart2_tx,DMA_FLAG_TC7);//清楚传输完成标志位
        HAL_UART_DMAStop(&huart2);                      //关闭DMA传输
    }

简单的一种使用办法:

      while(1)
      {
        if((__HAL_DMA_GET_FLAG(&hdma_usart2_tx,DMA_FLAG_TC7)))
        {
          __HAL_DMA_CLEAR_FLAG(&hdma_usart2_tx,DMA_FLAG_TC7);
          HAL_UART_DMAStop(&huart2); 
          break;
        }
      }

补充:

如果仍然无法解决的话,再检查一下时钟是否使能,串口中断是否设置。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值