stm32之30.DMA

DMA(硬件加速方法)一般用于帮运比较大的数据(如:摄像头数据图像传输),寄存器-》DMA-》RAM 或者 RAM-》DMA-》寄存器提高CPU的工作效率

源码--

#include "myhead.h"
#include "adc.h"#include "delay.h"#include "usart.h"
extern u16 ADC1_Value;u16 ADC1_Value;void DMA_init(void)
{GPIO_InitTypeDef   GPIO_InitStructure;ADC_InitTypeDef       ADC_InitStructure;ADC_CommonInitTypeDef ADC_CommonInitStructure;DMA_InitTypeDef       DMA_InitStructure;//1.时钟使能ADC1 GPIOARCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//1分频RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);//2分频RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);//1分频//DMA2初始化DMA_InitStructure.DMA_Channel =  DMA_Channel_0;  //通道0DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(ADC1->DR); //搬运的起始地址DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADC1_Value; //搬运的目的地址DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;   //DMA搬运的方向DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;   //设置搬运起始点到目的地发数据宽度DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;   //字节大小  半个字节DMA_InitStructure.DMA_BufferSize = 1;    //设置缓存块数DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //设置地址自动递增  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;     //DMA搬运模式 Nomal Circular循环DMA_InitStructure.DMA_Priority = DMA_Priority_High;   //触发优先级DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;DMA_Init(DMA2_Stream0, &DMA_InitStructure);DMA_Cmd(DMA2_Stream0, ENABLE);  //使能DMAGPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不需要上下拉电阻GPIO_Init(GPIOA, &GPIO_InitStructure);//3.ADC的公共部分配置ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式,双重模式,三重模式ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;  //84MHZ---/4 给到具体ADC  21MHZ<=36MHZADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;  //多重ADC模式有关,一般独立ADC都不需要开启ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//多重ADC模式的采样间隔ADC_CommonInit(&ADC_CommonInitStructure);//4.指定ADC配置ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;  //精度选择ADC_InitStructure.ADC_ScanConvMode = DISABLE;           //扫描模式选择   开扫描/关扫描    单个ADC开了多个通道才要扫描模式ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;      //连续转换模式  开/关ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;    //ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfConversion = 1;   //待转换的通道数量    如果adc通道开多个(adc1,adc3),通道数量跟数量一样多,上面扫描模式就得开ADC_Init(ADC1, &ADC_InitStructure);/* Enable DMA request after last transfer (Single-ADC mode) */  //ADC1->CR2  第9bit DDS位  中文手册276页ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);/* Enable ADC3 DMA *///ADC1->CR2  第8bit DMA位  中文手册276页ADC_DMACmd(ADC1, ENABLE);//5.通道规则设置--设置adc通道的转换顺序ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 1, ADC_SampleTime_3Cycles);//ADC_SampleTime_3Cycles通道转换速度,等级越高转换速度越快//6.使能ADC模块ADC_Cmd(ADC1,ENABLE);
}int main(void)
{adc_init();usart1_init(9600);DMA_init();ADC_SoftwareStartConv(ADC1);   //ADC通道配置必须放DMA_init/adc_init()后面while(1){//3.3v/4096 =xV/ADC1->DRprintf("%.2fv\r\n",ADC1_Value*3.3/4095);  //不断读取ADC1的转换结果  转换成电压值  (.2f表示double类型小数点后两位打印结果)delay_ms(1000);}}

DMA2支持搬运的外设有如图

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

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

相关文章

STM32 Nucleo-144开发板开箱bring-up

文章目录 1. 开篇2. 开发环境搭建2.1 下载官方例程2.2 ST-Link安装 3. STM32F446ZE demo工程3.1 STM32F446ZE简介3.2 跑个demo试一试 1. 开篇 最近做项目&#xff0c;用到STM32F446ZET6这款MCU&#xff0c;为了赶进度&#xff0c;前期软件需要提前开发&#xff0c;于是在某宝买…

826. 安排工作以达到最大收益;2257. 统计网格图中没有被保卫的格子数;816. 模糊坐标

826. 安排工作以达到最大收益 核心思想&#xff1a;排序维护最大利润。首先我们需要对工人按照能力排序&#xff0c;前面工人满足的最大利润后面的工人肯定是满足的&#xff0c;所以我们只需要用一个tmp来维护小于等于当前工人的最大利润&#xff0c;然后如何得到tmp&#xff…

【web开发】5.Mysql及python代码执行数据库操作

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、MYSQL二、MySQL管理查看已有数据库创建数据库删除数据库进入数据库创建表删除表展示表的行列插入数据查看表中的数据删除数据修改数据 三、python代码执行数据库…

STM32定时器的One Pulse Mode,OPM应用

文章目录 OPM应用1-精准延时应用2-精准定时 OPM T IMx_CR1的OPM位 位 3 OPM&#xff1a;单脉冲模式 (One-pulse mode) 0&#xff1a;计数器在发生更新事件时不会停止计数 1&#xff1a;计数器在发生下一更新事件时停止计数&#xff08;将 CEN 位清零&#xff09; 应用1-精准延时…

C++设计模式_03_模板方法Template Method

文章目录 1. 设计模式分类1.1 GOF-23 模式分类1.2 从封装变化角度对模式分类 2. 重构&#xff08;使用模式的方法&#xff09;2.1 重构获得模式 Refactoring to Patterns2.2 重构关键技法 3. “组件协作”模式4. Template Method 模式4.1 动机&#xff08; Motivation&#xff…

磐基2.0搭建es集群

参考&#xff1a; k8s安装elasticsearch集群 k8s安装elasticsearch集群_k8s部署elasticsearch集群_MasonYyp的博客-CSDN博客1 环境简述搭建es集群需要使用的技术如下&#xff1a;k8s集群、StatefulSet控制器、Service&#xff08;NodePort&#xff09;服务、PV、PVC、volumeC…

洛谷 LGR SCP-J 2023 c++语言模拟试题 10. 以下程序片段的时间复杂度为( )

之前在牛客的一个群中看到有位哥们发的题 好像是洛谷哪次的模拟题&#xff0c;还写着什么 LGR SCP-J 2023 c语言模拟试题 题目 就是给段代码询问时间复杂度 for (int i1; i<n; i){for (int j1; j<n; ji){for (int k1; k<n; k j){}} } 跑代码 一开始想不出怎么解就…

数据结构(C语言版)概念、数据类型、线性表

数据结构&#xff08;C语言&#xff09;基本概念 数据的基本单位 数据的基本单位是位&#xff08;bit&#xff09;和字节&#xff08;byte&#xff09;。位是最小的存储单位&#xff0c;它可以表示一个二进制的0或1。字节由8个位组成&#xff0c;用于表示一个字符或数字。在计…

ElasticSearch第二讲:ES详解 - ElasticSearch基础概念

ElasticSearch第二讲&#xff1a;ES详解 - ElasticSearch基础概念 在学习ElasticSearch之前&#xff0c;先简单了解下ES流行度&#xff0c;使用背景&#xff0c;以及相关概念等。本文是ElasticSearch第二讲&#xff0c;ElasticSearch的基础概念。 文章目录 ElasticSearch第二讲…

将PyCharm中的终端运行前面的PS修改成当前环境

最近使用Pycharm中的Terminal来pip安装一些pakage&#xff0c;发现Terminal运行前面的显示的是PS&#xff0c;然后输入安装指令报错。“python无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。” 解决方法&#xff1a; 只需要在pycharm的设置中修改一些termi…

01JVM_内存结构

一、什么是JVM 1.JVM的定义 Java程序的运行环境&#xff0c;java二进制字节码的运行环境 2.JVM的好处 ①一次编写&#xff0c;到处运行 ②自动内存管理&#xff0c;垃圾回收功能 ③数组下标越界检查 ④多态 3.jvm&#xff0c;jre&#xff0c;jdk的比较 3.常见的JVM 主…

Redis限流实践:实现用户消息推送每天最多通知2次的功能

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

java从入门到起飞(八)——循环和递归

文章目录 Java循环1. 什么是循环&#xff1f;1.1 为什么需要循环&#xff1f;1.2 循环的分类 2. Java中的循环结构2.1 for循环2.2 while循环2.3 do-while循环 3. 循环控制语句3.1 break语句3.2 continue语句 4. 总结 Java递归1. 什么是递归2. 递归的原理3. 递归的实现4. 递归的…

更换 yum 阿里源 - 手把手教你怎么配置,在也不需要求别人了 - 看懂一个就相当于看懂了其他的linux系统

更换阿里源 我的是centos8 当然 centos7 也可以换 后面有更详细的怎么配 &#xff0c;再也不用求别人怎么弄了 最直接的方式 直接复制 执行 centos7 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo或者 wget -O /etc/yum.repos.…

基于SpringBoot + Vue的项目整合WebSocket的入门教程

1、WebSocket简介 WebSocket是一种网络通信协议&#xff0c;可以在单个TCP连接上进行全双工通信。它于2011年被IETF定为标准RFC 6455&#xff0c;并由RFC7936进行补充规范。在WebSocket API中&#xff0c;浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性…

酷雷曼第二期无人机技能培训圆满举办

第2期无人机技能培训 2023年8月24日-8月25日&#xff0c;第二期酷雷曼无人机技能培训及执照考试在北京圆满举办&#xff0c;来自五湖四海、全国各地的合作商千里相聚&#xff0c;培训现场热闹融洽&#xff0c;再续精彩盛况。 随着《无人驾驶航空器飞行管理暂行条例》正式发布…

性能测试 —— Jmeter 命令行详细

我们在启动Jmeter时 会看见&#xff1a;Don’t use GUI mode for load testing !, only for Test creation and Test debugging.For load testing, use CLI Mode (was NON GUI) 这句话的意思就是说&#xff0c;不要使用gui模式进行负载测试&#xff0c;gui模式仅仅是创建脚本…

Mysql JSON

select json_extract(c2, $.a) select c2->"$.a" // json_extract的语法糖 &#xff08;取出的值会保留"双引号" so不适合实战&#xff09; 注&#xff1a;mysql若是引擎Mariadb则不支持json操作符-&#xff1e;&#xff1e;语法糖 select c2->…

扫地僧静态养站王站群:搜狗SEO站群收录养站效果

扫地僧静态养站王站群:Sogou搜狗SEO出站及收录效果,扫地僧静态站群采用了静态生成式的方式&#xff0c;只需要一个后台管理系统即可管理多个网站&#xff0c;大大提高了建站效率。建站大概45天左右&#xff0c;收录率百分之三十至百分之五十左右 如果对购买的域名进行把控&…

游戏思考30(补充版):关于逆水寒铁牢关副本、白石副本和技能的一些注释(2023/0902)

前期介绍 我是一名逆水寒的玩家&#xff0c;做一些游戏的笔记当作攻略记录下来&#xff0c;荣光不朽-帝霸来源视频连接 传送门 一、旧版铁牢关&#xff08;非逆水寒老兵服&#xff09; &#xff08;1&#xff09;老一&#xff1a;巨鹰 1&#xff09;机制一&#xff1a;三阵风…