当前位置: 首页 > news >正文

STM32-寄存器DMA配置指南

配置步骤 

在STM32F0xx中文参考手册中的DMA部分在开头给出了配置步骤


      每个通道都可以在外设寄存器固定地址和存储器地址之间执行 DMA 传输。DMA 传输的数据
量是可编程的,最大达到 65535。每次传输之后相应的计数寄存器都做一次递减操作,直到
计数为0。

DMA的请求映像如下

设置外设寄存器地址

这里使用DMA传输ADC1的数据,查看ADC1的数据地址为(uint32_t)(ADC1->DR)

所以赋值为

 DMA1_Channel1->CPAR=(uint32_t)(ADC1->DR);

设置存储器地址

填写需要被传输到的存储器地址,注意这里ADC使用了3个通道,所以存储的数据类型应该是在数组里,所以需要填的是数组的第一个数据的指针,并且需要在DMA传输过程中存储器地址自增。

uint16_tadc_dat[3]={0};//ADC数据传输到的位置 全局 因为选择的ADC为12为数据宽度所以用uint16_t
DMA1_Channel1->CMAR=(uint32_t)adc_dat;

传输的数据量

 当前传输的为3个数据,最大为65535

DMA1_Channel1->CNDTR |= 3;

其他配置

在 DMA_CCRx 中配置数据的传输方向、循环模式、外设和存储器的增量模式、外设和存
储器的数据宽度和传输一半产生中断或传输完成产生中断的设置。

DMA1_Channel1->CCR |= 0x00002561; 
//DMA优先级高 非存储器到存储器模式 存储器数据宽度16位 外设数 
//据宽度16位 存储器地址不自增 外设地址自增 循环模式 从外设读到存储器 开启DMA通道

所以延续上篇博客最终配置为

uint16_t adc_dat[3]={0};
/*要求如下:配置ADC1IN1,ADC1IN2,ADC1IN3,使用内部专用14Mhz振荡器,过采样为7.5个ADC周期,由TIM1中断作为触发信号,DMA搬运
并且开启模拟看门狗监控ADC1IN1,阈值为3.3v~3.0v并且开启模拟看门狗中断。ADC分辨率为默认的12位*/
void Demo(void){//打开HSI14时钟RCC->CR2 |=  0x00000001;//开启HSI14while(!(RCC->CR2 |= 0x00000002));//等待HSI14稳定RCC->CR2 |= 0x00000004;//允许ADC打开HSI14       //ADC自校准ADC1->CR |= 0x80000001; //开启自校准 ADC禁用while((ADC1->CR |= 0x80000000)); //等待自校准完成//ADC通道选择ADC1->CHSELR |= 0x0000000E; //选择通道1 2 3//ADC采样时间选择ADC1->SMPR |= 0x00000001; //7.5个采样周期//转换模式选择ADC1->CFGR1 |= 0x4C00003;//使用TIM1_TRGO作为触发事件源 外部触发禁止 单次转换模式  模拟看门狗监视通道1 模拟看门狗使能 在单一通道上使能模拟看门狗  使能 循环模式 使能DMA DMA循环模式 前向扫描//开启模拟看门狗ADC1->ISR |= 0x00000080;//开启模拟看门狗中断ADC1->IER |= 0x00000080;//模拟看门狗中断使能ADC1->TR |=0xE8C0FFF;//阈值为 4095~3723 即3.3v~3.0v//开始转换ADC1->CR &= 0xFFFFFFFE; //ADC解除禁用ADC1->CR |= 0x00000004; //开始转换//DMA配置DMA1_Channel1->CPAR=(uint32_t)(ADC1->DR); //源地址DMA1_Channel1->CMAR=(uint32_t)adc_dat;    //目标地址DMA1_Channel1->CNDTR |= 3;  //传输数目3DMA1_Channel1->CCR |= 0x00002561; //DMA优先级高 非存储器到存储器模式 存储器数据宽度16位 外设数据宽度16位 存储器地址不自增 外设地址自增 循环模式 从外设读到存储器 开启DMA通道
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Web响应式设计———1、Grid布局
  • 算法学习笔记(8.8)-多重背包
  • 【运维笔记】数据库无法启动,数据库炸后备份恢复数据
  • 深入理解JS中的发布订阅模式和观察者模式
  • Windows系统设置暂停更新,暂停时间可达3000天,“永久”暂停更新,亲测有效
  • 企业产品网络安全建设日志0725
  • 商场导航系统:从电子地图到AR导航,提升顾客体验与运营效率的智能解决方案
  • 政安晨【零基础玩转各类开源AI项目】基于Ubuntu系统部署LivePortrait :通过缝合和重定向控制实现高效的肖像动画制作
  • 无人机制造工艺流程详解
  • 深入探索SemiDrive E3系列的MCU SSDK
  • 算法 定长按组翻转链表
  • 合作伙伴中心Partner Center中添加了Copilot预览版
  • 探索 IT 领域的新宠儿:量子计算
  • CTF-NSSCTF题单[GKCTF2020]
  • 为什么有了MAC还需要IP?
  • JS 中的深拷贝与浅拷贝
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 2017-08-04 前端日报
  • k8s如何管理Pod
  • Quartz初级教程
  • Sass Day-01
  • 精彩代码 vue.js
  • 浅谈web中前端模板引擎的使用
  • 让你的分享飞起来——极光推出社会化分享组件
  • 7行Python代码的人脸识别
  • 阿里云ACE认证学习知识点梳理
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​MySQL主从复制一致性检测
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #单片机(TB6600驱动42步进电机)
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (搬运以学习)flask 上下文的实现
  • (二)学习JVM —— 垃圾回收机制
  • (含笔试题)深度解析数据在内存中的存储
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)重识new
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .axf 转化 .bin文件 的方法
  • .cn根服务器被攻击之后
  • .Family_物联网
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .Net Core 中间件与过滤器
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .net连接oracle数据库
  • .NET应用架构设计:原则、模式与实践 目录预览
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解