STM32采用串口DMA方式连续发送数据

一、DMA的认识

DMA(直接存储器访问):用于在外设与存储器之间以及存储器与存储器之间进行高速数据传输。DMA传输过程的初始化和启动由CPU完成,传输过程由DMA控制器来执行,无需CPU参与,从而节省CPU资源,提高利用率。

1.1 DMA传输四要素

1、传输源:DMA数据传输的来源
2、传输目标:DMA数据传输的目的
3、传输数量:DMA传输数据的数量
4、触发信号:启动一次DMA数据传输的动作

1.2 DMA框图

在这里插入图片描述

1.3 DMA数据传输方式

普通模式:传输结束后,不再产生DMA操作。若开始新的DMA传输,需在关闭DMA通道情况下,重新启动DMA传输。
循环模式:用于处理环形缓冲区和连续数据流。当激活循环模式后,每轮传输结束时,要传输的数据数量将自动用设置的初始值进行加载,并继续响应DMA请求。

二、用DMA实现数据传输

  • 创建项目工程,选择芯片型号

在这里插入图片描述

  • 选择RCC->HSE->Crystal

在这里插入图片描述

  • 设置串口
    1、点击USATR1
    2、设置MODE为异步通信(Asynchronous)
    3、基础参数:波特率为115200 Bits/s。传输数据长度为8 Bit。奇偶检验无,停止位1 接收和发送都使能
    4、GPIO引脚自动设置 USART1_RX/USART_TX
    在这里插入图片描述
  • 使能中断
    在这里插入图片描述
  • DMA设置
    点击DMASettings 下的 Add 添加通道,传输速率设置为中速
    在这里插入图片描述
  • 模式设置为Normal,右侧选择Memory
    在这里插入图片描述
  • 在System view下选择DMA,左侧点击ADD添加

在这里插入图片描述

  • 进行时钟设置

在这里插入图片描述

  • 设置工程名和IDE版本

在这里插入图片描述

  • generate code即可完成
    在这里插入图片描述

三、添加代码运行

在下图位置添加代码:

在这里插入图片描述

   uint8_t send_char[]="hello world\n";//发送的字符串

在这里插入图片描述

    HAL_UART_Transmit_DMA(&huart1,(uint8_t *)send_char,0xc);//DMA发送
		HAL_Delay(500);//延时

编译无误:
在这里插入图片描述
烧录:
在这里插入图片描述
boot0接0,打开SSCOM串口助手,打开串口即可接收。
在这里插入图片描述

四、总结

DMA传输过程不占用CPUu,更快更高效更加节约资源。

五、参考资料

https://blog.csdn.net/as480133937/article/details/104827639/

猜你喜欢

转载自blog.csdn.net/m0_46275263/article/details/121176313