stm32-DMA转运数据

在配置前要记得先定义一下DMA转运的源端数组和目标数组两个数组哦。

接下来我们就开始准备配置吧

配置

初始化

1.RCC开启时钟(开启DMA的时钟)

void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState)
作用:开启时钟

2.初始化DAM参数(包括外设和存储器站点的起始地址、数据宽度、地址是否自增、方向、传输计数器、是否要自动重装、选择触发源、通道优先级等)

void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct)
作用:初始化DMA。

注意:如果选择硬件触发,还需要调用×××_DMACmd,开启触发信号的输出。

如果需要DMA的中断,需要调用DMA_ITConfig,开启中断输出,再在NVIC里配置相应的中断通道,然后写中断函数就行了

3.打开DMA

void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState)
作用:设置DMA是使能/失能

注意:在运行的过程中,如果转运完成,传输寄存器就会清0.这时,如果还想给传输寄存器赋值的话,就关闭DMA(失能)——写传输寄存器——开启DMA(使能)

那我们接下来写一下这个函数

DMA传输函数

1.将DMA失能

void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState)

2.给传输寄存器赋值

void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber); 
作用:设置当前数据寄存器(给传输寄存器写数据)

3.给DMA使能

void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState)

4.获取标志位观察是否转运完成

FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG);
作用:获取标志位状态

5.清除标志位

void DMA_ClearFlag(uint32_t DMAy_FLAG);
 

代码

MyDMA.c

#include "stm32f10x.h"                  // Device headeruint16_t MyDMA_Size;void MyDMA_Init(uint32_t AddrA, uint32_t AddrB, uint16_t Size)
{MyDMA_Size = Size;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);DMA_InitTypeDef DMA_InitStructure;DMA_InitStructure.DMA_PeripheralBaseAddr = AddrA;DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;DMA_InitStructure.DMA_MemoryBaseAddr = AddrB;DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;DMA_InitStructure.DMA_BufferSize = Size;DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;DMA_InitStructure.DMA_M2M = DMA_M2M_Enable;DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;DMA_Init(DMA1_Channel1, &DMA_InitStructure);DMA_Cmd(DMA1_Channel1, DISABLE);
}void MyDMA_Transfer(void)
{DMA_Cmd(DMA1_Channel1, DISABLE);DMA_SetCurrDataCounter(DMA1_Channel1, MyDMA_Size);DMA_Cmd(DMA1_Channel1, ENABLE);while (DMA_GetFlagStatus(DMA1_FLAG_TC1) == RESET);DMA_ClearFlag(DMA1_FLAG_TC1);
}

MyDMA.h

#ifndef __MYDMA_H
#define __MYDMA_Hvoid MyDMA_Init(uint32_t AddrA, uint32_t AddrB, uint16_t Size);
void MyDMA_Transfer(void);#endif

例题

DMA转运数据

接线

代码 

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "MyDMA.h"uint8_t DataA[] = {0x01, 0x02, 0x03, 0x04};
uint8_t DataB[] = {0, 0, 0, 0};int main(void)
{OLED_Init();MyDMA_Init((uint32_t)DataA, (uint32_t)DataB, 4);OLED_ShowString(1, 1, "DataA");OLED_ShowString(3, 1, "DataB");OLED_ShowHexNum(1, 8, (uint32_t)DataA, 8);OLED_ShowHexNum(3, 8, (uint32_t)DataB, 8);while (1){DataA[0] ++;DataA[1] ++;DataA[2] ++;DataA[3] ++;OLED_ShowHexNum(2, 1, DataA[0], 2);OLED_ShowHexNum(2, 4, DataA[1], 2);OLED_ShowHexNum(2, 7, DataA[2], 2);OLED_ShowHexNum(2, 10, DataA[3], 2);OLED_ShowHexNum(4, 1, DataB[0], 2);OLED_ShowHexNum(4, 4, DataB[1], 2);OLED_ShowHexNum(4, 7, DataB[2], 2);OLED_ShowHexNum(4, 10, DataB[3], 2);Delay_ms(1000);MyDMA_Transfer();OLED_ShowHexNum(2, 1, DataA[0], 2);OLED_ShowHexNum(2, 4, DataA[1], 2);OLED_ShowHexNum(2, 7, DataA[2], 2);OLED_ShowHexNum(2, 10, DataA[3], 2);OLED_ShowHexNum(4, 1, DataB[0], 2);OLED_ShowHexNum(4, 4, DataB[1], 2);OLED_ShowHexNum(4, 7, DataB[2], 2);OLED_ShowHexNum(4, 10, DataB[3], 2);Delay_ms(1000);}
}

 其他重要库函数

uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx);
作用:获取当前数据寄存器(返回当前传输寄存器的值)

 ITStatus DMA_GetITStatus(uint32_t DMAy_IT);
作用:获取中断状态

void DMA_ClearITPendingBit(uint32_t DMAy_IT);
作用:清除中断挂起位

有什么问题在评论区说哦!

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

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

相关文章

如何在Weblogic环境中启动认证方式对接Zabbix监控

在WebLogic Server中,启动认证可用于确保只有经过授权的用户和系统能够访问WebLogic Server及其应用程序,通过合理配置认证提供者和安全领域,管理员可以有效管理和控制用户访问。 本文将详细介绍如何在Weblogic环境中配置启动认证并对接Zabb…

用域名访问的网站一定要用OV SSL证书

一、什么是域名 域名,英文名为Domain Name,是互联网上用于识别和定位计算机的层次结构式的字符标识符,通过一系列的字符和点来表示,用于在数据传输时标识计算机的电子方位。简单来说,域名就是网站在互联网上的地址&am…

Django视图层探索:GET/POST请求处理、参数传递与响应方式详解

系列文章目录 Django入门全攻略:从零搭建你的第一个Web项目Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解Django ORM深度游&#xff…

【源码】源码物品销售系统多种支付接口出售源码轻松赚钱

源码物品销售系统,多种支付接口,出售源码轻松赚钱。一款基于phpmysql开发的内容付费管理系统。系统支持多种收费方式,免签收款,三级分销,实名认证, 用户投稿/奖励,自动升级,佣金提现…

python中的循环控制语句break与continue

学习这两个语句之前,我们要先了解这两个语句是什么意思: break:中断、打破的意思。所以它的跳出循环的意思 continue:继续的意思,意思是跳过当前条件,继续循环 新需求来了!我们不仅要告诉 Py…

Spark SQL - 操作数据集

本教程将通过一个具体的案例来演示如何在Spark SQL中操作数据集。我们将从创建本地文件开始,然后上传到HDFS,并使用Spark Shell启动Spark程序。接下来,我们将加载数据为DataSet,并给DataSet添加元数据信息。最后,我们将…

ChineseChess.2024.06.03

ChineseChess.2024.06.03 中国象棋,我下得不是象棋,是娱乐,是想看看自己的程序。哈哈 看很多主播挂棋局,吹牛批,为了涨粉,挂着,蛮摆个残局 中国象棋残局模拟器ChineseChess.2024.06.03

RabbitMQ(Direct 订阅模型-路由模式)的使用

文章目录 RabbitMQ(Direct 订阅模型-路由模式)一,Direct 订阅模型-路由模式介绍(Routing)二,使用1.添加依赖2.修改配置文件3.创建配置类4.注入RabbitMQ模版引擎5.消息的发送6.消息的接收(监听)7.设置回调函…

谁将决战上海滩,决定权在你手里

关注我们 - 数字罗塞塔计划 - 5月6日雨轩兰台的《【大比武01】AIGC赋能档案文创设计的尝试》,打响了“华夏伟业”杯第二届大比武活动的第一枪,截止到5月31日,入选的10篇优质内容已全部揭晓,好评如潮。感谢雨轩兰台、微柏软件、昀…

三种常见的报表模板,省时又方便

前言 在业务应用和数据分析中,报表是一种常见的数据展示形式,可以帮助用户更直观地理解和解读数据。然而,每次创建和设计一款报表都需要花费大量的时间和精力。为了提高报表设计的效率,本文小编以葡萄城公司的嵌入式BI工具——Wy…

webf 开发工具:数据库持久层基础文件生成工具

WZW.SqlMapHelpForJava是运行在.Net Framework4.0上的数据库持久层基础文件生成工具,支持多种关系型数据库的持久层基础文件、Java类的生成以及对配置文件的更新,与webf框架进行紧密配合,减少了数据库持久层基础文件编写工作量,提…

关于家储用防逆流电流互感器AKH-0.66/K K-φ16 100A/40mA详细介绍-安科瑞 蒋静

1.产品特点 产品外形美观,安装、接线方便,专用于通讯机房 100A 及以下配电系统改造,可与 AMC16 多回路监控仪表配合使用。 2.型号说明 3.外形尺寸(公差:2mm) 4.规格参数对照表 5.使用环境 (1)额定工作…

SPME2024开幕在即,深兰科技商用清洁机器人新品推介会蓄势待发

6月5日~7日,以“跨界融合洞见未来”为主题的“2024 SPME第六届上海国际物业管理产业博览会”(以下简称“物博会”)将在上海世博展览馆举行。应主办方邀请,深兰科技携多款AI清洁机器人亮相本届展会,向来自全球各地的观展企业家、经…

phpstudy配置的站点不能访问了

无法打开站点 打开网站的时候出现如下 没有人为主动去更改配置项,今天就不能正常访问了 检查了一遍配置,发现并无大碍,那就重新配置一遍看看 配置phpstudy 1、新建网站 2、选择项目入口文件夹 3、配置伪静态 4. 确认保存 在我的电脑 C:\…

Hive的常规操作

Hive常规操作 hive常用交互命令 -e执行sql语句 [rootmaster ~]# hive -e "show databases";-f执行sql脚本 [rootmaster ~]# hive -f /usr/local/demo.sql查看hive中输入的所有命令 [rootmaster ~]# cat ~/.hivehistory操作库 创建库 语法: create…

用贪心算法计算十进制数转二进制数(整数部分)

十进制整数转二进制数用什么方法?网上一搜,大部分答案都是用短除法,也就是除2反向取余法。这种方法是最基本最常用的,但是计算步骤多,还容易出错,那么还有没有其他更好的方法吗? 一、短除反向取…

关于WIN环境下pip DeepSpeed安装报错问题

问题描述 安装resemble-enhance项目时遇到的问题: >>> ERROR 1error: subprocess-exited-with-errorpython setup.py egg_info did not run successfully.exit code: 1[15 lines of output]test.cLINK : fatal error LNK1181: cannot open input file aio.libTraceb…

一维时间序列信号的基于小波集的时频超分辨率分析方法(Python)

由于小波变换只能反映信号的零维奇异性,即只能表达奇异点的位置和特性。事实上具有线奇异的函数在高维空间中非常普遍,例如,自然物体光滑边界使得自然图像的不连续性往往体现为光滑曲线上的奇异性,而并不仅仅是点奇异。对于一个二…

人工智能专业现代学徒制人才培养质量评价体系构建

一、 引 言 随着信息时代的发展,人工智能(AI)技术的飞跃进步对各行各业产生了深远影响,对专业人才的培养提出了更高要求。现代学徒制作为一种创新人才培养模式,通过校企合作,强调理论与实践的深度结合&…

性能测试学习-基本使用-元件组件介绍(二)

jmeter优点是:开源免费,小巧,丰富的学习资料和扩展组件 缺点是:1.不支持IP欺骗,分析和报表能力相对于LR欠缺精确度(以分钟为单位) 工具用户量分析报表IP欺骗费用体积扩展性Loadrunner多(万)精…