STM32 DMA 传输类型调试记录

news2024/10/7 4:26:35

外设到内存

模式:单次、外设地址不自增,内存地址自增

hdma_usart1_rx.Instance = DMA1_Channel5;				// 使用通道 5
hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; 	// 方向:外设 to 内存
hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;		// 外设地址是否自增:不自增
hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;			// 内存地址是否自增:自增
hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;	// 外设数据位宽:字节
hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;		// 内存数据位宽:字节
hdma_usart1_rx.Init.Mode = DMA_NORMAL;							// DMA 模式:普通,即单次传输
hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW;				// 优先级:低优先级
函数原型:
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);
函数使用:
HAL_DMA_Start_IT(huart->hdmarx, (uint32_t)&huart->Instance->DR, *(uint32_t*)tmp, Size);

源地址:(uint32_t)&huart->Instance->DR,即串口的数据寄存器,虽然占 32 位地址空间,但高 24 位为保留位,所以该寄存器保存一个字节。
目的地址:用户自定义的一个 buf
数据长度:传送的数据长度

HAL_UART_Receive_DMA(&huart1, recv_buf, sizeof(recv_buf));
	/* Enable the DMA transfer for the receiver request by setting the DMAR bit 
       in the UART CR3 register */
    SET_BIT(huart->Instance->CR3, USART_CR3_DMAR); // UART 控制寄存器3,bit6 使能/禁止 DMA 接收

CPU 使能 DMA 传输后,活由 DMA 来干,CPU 就去忙其它事情了。

演示:
请添加图片描述
模式:循环、外设地址不自增,内存地址自增

hdma_usart1_rx.Init.Mode = DMA_CIRCULAR; // // DMA 模式:循环

演示:
请添加图片描述

内存到外设

模式:单次

    hdma_usart1_tx.Instance = DMA1_Channel4;
    hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;	// 内存到外设
    hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE;		// 外设地址不自增
    hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE;			// 内存地址自增
    hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;	// 外设数据位宽:字节
    hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;		// 内存数据位宽:字节
    hdma_usart1_tx.Init.Mode = DMA_NORMAL;					// 单次
    hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW;
uint8_t buf[10] = "hello";
HAL_UART_Transmit_DMA(&huart1, buf, sizeof(buf));

DMA 将内存数据 buf[10] 一个字节一个字节地搬运到串口的数据寄存器,搬运时,内存地址按字节递增,外设地址保持不变。
在这里插入图片描述
模式:循环

hdma_usart1_tx.Init.Mode = DMA_CIRCULAR; // 循环

即 DMA 一遍又一遍地将 buf[10] 的数据按字节方式依次拷贝到串口的数据寄存器 DR 中。
由于 DMA 搬运效率太高,串口输出太快,可以看到串口助手接收计数增长很猛,但显示的数据不多,串口助手的bug?
请添加图片描述
将波特率提高到 1500000 再跑下效果请添加图片描述
可以看到 DMA 的效率是非常高的。

内存到内存

模式:单次,源地址自增,内存地址自增

  /* Configure DMA request hdma_memtomem_dma1_channel1 on DMA1_Channel1 */
  hdma_memtomem_dma1_channel1.Instance = DMA1_Channel1;
  hdma_memtomem_dma1_channel1.Init.Direction = DMA_MEMORY_TO_MEMORY;
  hdma_memtomem_dma1_channel1.Init.PeriphInc = DMA_PINC_ENABLE;	// 源地址自增
  hdma_memtomem_dma1_channel1.Init.MemInc = DMA_MINC_ENABLE;	// 目的地址自增
  hdma_memtomem_dma1_channel1.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  hdma_memtomem_dma1_channel1.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  hdma_memtomem_dma1_channel1.Init.Mode = DMA_NORMAL;
  hdma_memtomem_dma1_channel1.Init.Priority = DMA_PRIORITY_LOW;

演示:
请添加图片描述

模式:单次,源地址自增,内存地址不自增

  hdma_memtomem_dma1_channel1.Init.PeriphInc = DMA_PINC_ENABLE;	// 源地址自增
  hdma_memtomem_dma1_channel1.Init.MemInc = DMA_MINC_ENABLE;	// 目的地址自增

在这里插入图片描述
模式:单次,源地址不自增,内存地址自增
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/751595.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云开发校园微社区-二手交易兼职交友微信小程序

云开发校园微社区微信小程序开源源码,这是一款云开发校园微社区-二手交易_兼职_交友_项目微信小程序开源源码,可以给你提供快捷方便的校园生活,有很多有趣实用的板块和功能,如:闲置交易、表白交友、疑问互答、任务兼职…

css3其他效果

1)媒体查询 不同分辨率下不同的样式,适应不同的屏幕 最大宽度,最小宽度 2)颜色渐变 渐变之后是一张图片 background-image 默认效果是从上到下(to bottom)的渐变 linear-gradient是线性渐变 要是想改变方…

udp如何传输大数据附udp高速传输技术解决方案

当遇到UDP传输大数据时,首先需要考虑使用专业的大数据传输软件或工具来满足UDP传输大数据的需求。其次,需要对UDP大数据传输的各个方面进行分析和优化,以确保传输的快速、安全、稳定和高效。 什么是UDP? UDP(用户数据…

算法和算法评价

1 算法的基本概念 1.1 算法是什么? 算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每条序列指令表示一个或多个操作。 举例:程序 数据结构(要处理的信息) 算法(处理信息的步骤…

VMware vCenter Server 8.0安装并添加ESXi 7.0主机(含ESXi 6.7版本升级至7.0版本)

目录 一、VMware vSphere虚拟化方案名词梳理 1、VMware Workstation:虚拟化工具 2、VMware vSphere:虚拟化方案 2.1 ESXi:裸金属架构的虚拟化技术 2.2 vCenter Server:批量连接 ESXi 的管理工具 2.3 vSphere Client&#xf…

Linux--验证内存地址空间排布

验证&#xff1a; #include<stdio.h> #include<stdlib.h>int g_val1 10; int g_val2 20;int g_val3; int g_val4;int main(int argc, char* argv[], char* env[]) {//任务:验证进程地址空间//代码区printf("code address:%p\n", main);//只读常量区co…

录好的视频怎么把声音提取出来?这四种方法轻松提取

当我们录制好一段视频后&#xff0c;如果需要对视频中的声音进行编辑&#xff0c;或者是要对视频中的语音内容进行翻译&#xff0c;这时我们将需要提取视频中的声音&#xff0c;可以使得对语音内容进行编辑或翻译更加方便&#xff0c;因为不需要在视频中不断寻找对应的片段。那…

Python 自学 day02 循环语法 for ,函数定义和使用,容器的定义和使用,列表的函数和使用

1.for 循环基础语法 2.获取数字序列的函数 range 2.1 range 函数用法一 ; num range(5) #获取一个 0 到 4 的数字序列 &#xff08;注意不包含参数本身&#xff09; 2.2 range 函数用法二 &#xff1a; num1 range(2,5) #获取 一个 2 数到 4 的数字序列&#…

如何利用智云通CRM快速获取客户并实现销售

开发新市场是企业扩展业务和增加销售的重要策略之一。然而&#xff0c;在面对新的市场和客户时&#xff0c;如何高效地获取客户并实现销售一直是企业面临的挑战。智云通CRM作为一款领先的客户关系管理软件&#xff0c;则为企业提供了全方位的解决方案&#xff0c;帮助企业在开拓…

如何将jar 包下载到自定义maven仓库

下载命令 mvn install:install-file -Dfileartifactid-version.jar -DgroupIdgroupid -DartifactIdartifactid -Dversionversion -Dpackagingjar -DlocalRepositoryPath. -DcreateChecksumtrue参数解释 在上述命令中&#xff0c;需要替换以下参数&#xff1a; artifactid-vers…

阿里云无影云电脑具体价格表(1元入口)

阿里云无影云电脑配置费用&#xff0c;4核8G企业办公型云电脑可以免费使用3个月&#xff0c;无影云电脑地域不同费用不同&#xff0c;无影云电脑是由云桌面配置、云盘、互联网访问带宽、AD Connector、桌面组共用桌面session等费用组成&#xff0c;阿里云百科分享阿里云无影云电…

如何使用python这样的简单程序语言,在自己的电脑上搭建一个共享文件服务器.

文章目录 1. 前言2. 视频教程3. 本地文件服务器搭建3.1 python的安装和设置3.2 cpolar的安装和注册 4. 本地文件服务器的发布4.1 Cpolar云端设置4.2 Cpolar本地设置 5. 公网访问测试6. 结语 1. 前言 数据共享作为和连接作为互联网的基础应用&#xff0c;不仅在商业和办公场景有…

数据库应用:MySQL索引

目录 一、理论 1.MySQL三层逻辑架构 2.索引结构 3.MyISAM与InnoDB对比 4.sql优化 5.MySQL 索引 6.MySQL索引原理 二、实验 1.创建索引 三、总结 一、理论 1.MySQL三层逻辑架构 MySQL的存储引擎架构将查询处理与数据的存储/提取相分离。 MySQL的逻辑架构图如下&…

Flask结合gunicorn和nginx反向代理的生产环境部署及踩坑记录

前言 之前自己写的flask使用gunicorn上线生产环境没有什么问题&#xff0c;但是最近搭建了一个现成的flask项目&#xff0c;当使用python直接运行时不会有问题&#xff0c;而使用gunicorn时则会出现一些问题。 部署过程 运行测试 这里使用pyenv创建了一个虚拟环境&#xff0…

Android PackageManagerService源码分析和APK安装原理详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 一、PackageManagerService简称PMS&#xff1a;PackageManagerService是Android系统中核…

城市餐饮油烟的监测与治理

摘要&#xff1a;为控制餐饮油烟污染&#xff0c;改善城市大气污染和生态环境&#xff0c;针对城市餐饮油烟污染现状&#xff0c;提出相应的治理政策。加快餐饮油烟污染立法进度&#xff0c;推进相关法律法规修订&#xff0c;加大油烟污染执法力度&#xff1b;维护清洗油烟净化…

windows安装使用 tesseract-ocr

OCR&#xff08;Optical character recognition&#xff0c;光学字符识别&#xff09;是一种将图像中的手写字或者印刷文本转换为机器编码文本的技术。 tesseract-ocr 是由Google开发&#xff0c;支持100多种语言 文档 tessdoc&#xff1a; https://tesseract-ocr.github.io…

3Ds max创建闪烁的星星效果

在这个简单的教程中&#xff0c;您将学习如何通过几个步骤创建闪烁的星星效果。 推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 步骤-1 在顶视图中创建球体 步骤-2 应用星形材料。 步骤-3 复制球体并稍微调整其大小&#xff08;两个球体必须完全相同&…

Ubuntu 的安装及其设置

文章目录 安装 Ubuntu屏幕分辨率设置修改软件源服务器锁屏时间设置设置 dash跨系统拖拽复制文件的设置 安装 Ubuntu 首先安装 VMware 虚拟机&#xff0c;虚拟机的安装比较简单&#xff0c;一步步点击Next即可完成安装。 安装完成后启动虚拟机&#xff0c;点击创建新的虚拟机。…

modelscope本地模型使用教程

阿里魔塔社区modelscope&#xff08;https://modelscope.cn/home&#xff09; 如果使用过模型&#xff0c;那么模型文件默认缓存地址&#xff1a;C:\Users\Administrator.cache\modelscope\hub 魔塔社区本地使用&#xff1a; 1、安装python环境&#xff1a;使用miniconda&…