码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • STM32之USART2 DMA通信


    STM32之DMA通信

    • 一.DMA介绍
    • 二、创建DMA例程
      • 1.创建工程,选择芯片型号
      • 2.设置RCC,选择Cystal(可选)
      • 3.设置串口
      • 4.使能中断
      • 5.DMA设置
      • 6.模式设置为Normal,右侧选择Memory
      • 7.在System view下选择DMA
      • 8.左侧点击ADD的添加
      • 9.进行时钟设置
      • 10.设置工程名和IDE的版本
      • 11.提示
    • 测试有两种情况
    • 狂打日志原因查清
    • 博客参考

    一直没有时间研究DMA,很高效的数据传输方式,今天终于有机会一窥全貌了。

    一.DMA介绍

    DMA,全称Direct Memory Access,即直接存储器访问。
    DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
    在这里插入图片描述
    DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。
    DMA框图
    在这里插入图片描述

    二、创建DMA例程

    1.创建工程,选择芯片型号

    在这里插入图片描述
    芯片根据实际情况选择

    2.设置RCC,选择Cystal(可选)

    在这里插入图片描述

    3.设置串口

    1点击USATR1
    2设置MODE为异步通信(Asynchronous)
    3基础参数:波特率为115200 Bits/s。传输数据长度为8 Bit。奇偶检验无,停止位1 接收和发送都使能
    4GPIO引脚自动设置 USART1_RX/USART_TX
    在这里插入图片描述

    4.使能中断

    在这里插入图片描述

    5.DMA设置

    点击DMASettings 下的 Add 添加通道,传输速率设置为中速
    在这里插入图片描述

    6.模式设置为Normal,右侧选择Memory

    在这里插入图片描述

    7.在System view下选择DMA

    在这里插入图片描述

    8.左侧点击ADD的添加

    在这里插入图片描述

    9.进行时钟设置

    在这里插入图片描述

    10.设置工程名和IDE的版本

    在这里插入图片描述
    点击右上角GENERATE CODE,完成

    11.提示

    上面的步骤由于芯片差异,不是每一步都要求一样,按照实际情况来。

    三、代码改写及运行效果

    int main(void)
    {
      /* USER CODE BEGIN 1 */
    
      /* USER CODE END 1 */
    
      /* MCU Configuration--------------------------------------------------------*/
    
      /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
      HAL_Init();
    
      /* USER CODE BEGIN Init */
    
      /* USER CODE END Init */
    
      /* Configure the system clock */
      SystemClock_Config();
    
      /* USER CODE BEGIN SysInit */
    
      /* USER CODE END SysInit */
    
      /* Initialize all configured peripherals */
      MX_GPIO_Init();
      MX_DMA_Init();
      MX_USART2_UART_Init();
    
      uint8_t Senbuff[10] = {1,2,3,4,5,6,7,8,9,0};
      uint8_t Senbuff2[10] = {1,2,3,4,5,6,7,8,9,0}; 	
      uint16_t count = 0;
    
      while (1)
      {
    		 count++;
    		memset(Senbuff, 0, 10);
    		memcpy(Senbuff, Senbuff2, 10);
    		Senbuff[0] = count;
    		HAL_Delay(5);
        /* USER CODE END WHILE */
    		HAL_UART_Transmit_DMA(&huart2, (uint8_t *)Senbuff, sizeof(Senbuff));
    		
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10, GPIO_PIN_RESET);
    	  HAL_Delay(100);
    		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10, GPIO_PIN_SET);
    		HAL_Delay(100);
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    测试有两种情况

    1.开机只打印一次
    在这里插入图片描述

    2.开机狂打日志
    在这里插入图片描述
    至于为什么还在研究中…

    狂打日志原因查清

    UASRT2要勾选中断,重新生成代码正常了。DMA确实比较好用
    在这里插入图片描述

    博客参考

    1.主要参考STM32之DMA通信
    2.STM32的中断控制与DMA

  • 相关阅读:
    超级详细的mysql安装和配置教程
    logstash 采集的文件mv后
    技术管理进阶——你了解成长的全貌吗?
    基于Android的蓝牙智慧健康系统
    28-搭建Keepalived+LVS+Nginx高可用集群负载均衡
    评价指标(一)精确率,召回率,F1-score
    自己本地写完代码后,不要直接git pull拉远程代码,会导致代码丢失
    牛客网最具争议的Java面试成神笔记,GitHub已下载量已过百万
    从零开始使用Vscode调试XV6
    软件测试工作步骤详情
  • 原文地址:https://blog.csdn.net/liuqingsongmsdn2014/article/details/125607145
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号