最近做项目需要用H743的ADC采样,发现和M3及M4的差别还是蛮多的,MPU的配置对DMA读取数据的影响、过采样机制等,其中H7的硬件过采样是个很实用的东西,硬汉大佬也进行了测试:

STM32H7的ADC过采样功能立竿见影,效果的确不错 - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn)

看了硬汉大佬的教程发现H7的ADC过采样讲的不多,我这里完善一下吧。其中很多都是我自己看cubeMX生成的工程源码中的注释和H7官方手册自己理解的,或许会有错误的地方,还请大佬们及时更正。废话不多说,直接上cubeMX。

1、配置RCC,这里有个注意的点,如果你要想将H7的主频提高到200MHZ以上要将Power Regulator Voltage Scale改成Scale 0,这个去看下手册就行,没什么可说的。

2、配置时钟树,项目使用12M的晶振,我配置的满频480MHZ。这里提一下,ADC可以有两个时钟源,具体看硬汉大佬的教程,我这里用的默认AHB,就什么也不用动。

3、MPU的配置,这里是按照硬汉大佬的教程中最适合新手的Normal模式来配置,如果使用了读写Cache性能会提升但是会出现DMA从SRAM中读出的ADC数据与Cache中的数据不一致,需要软件处理,我这里也是刚学H7,一知半解的状态,所以就直接使用了这种配置关闭了读写Cache。需要进一步研究的异步硬汉大佬的H7教程。

【安富莱】STM32H7用户手册发布,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔,更新至95章(2022-04-11) - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn)

4、开始配置ADC ,使用了ADC1的3、4、7三个通道,都是单端模式。

5、一些基本配置,和F1、F4差不很多。

6、 这里就是我要讲的重点,过采样的设置。先看配置

使能过采样,没什么好说的。

先说这个过采样率,手册上有说明H7系列支持2到1024倍的过采样,这个过采样率一定要设置成偶数,原因下一条讲,我是用的16倍过采样。

重点:过采样数据右移,这个就是最容易让人困惑的地方,过采样率的设置和数据的右移有什么关系呢?我们查看手册,发现H7的硬件过采样就是将每次过采样的数据累加起来,每一次的数据最大是2的16次方(16位ADC),如果采用最大的过采样率既1024倍过采样那么这些数值累加最大可以是2的16次方乘以1024,等于2的26次方,即占了存放数据寄存器从25到0的26个bit(原本一个数据15到0的16个bit),这里存放的是所有过采样数据的和,如何把这些和求平均数呢,当然就是除以过采样倍数,如何实现呢?数据右移!数据每右移一个bit,就相当于除以2,如果要除以16倍过采样,16是2的4次方,所以就是过采样数据之和右移4个bit,是不是很巧妙?此外手册中还指明所得的结果并不是直接舍弃最后一位,而是过采样数据之和除以过采样倍数后四舍五入的整数。

再后面:规则组采样模式,选择连续模式, 连续模式是指如果有注入组ADC触发规则组过采样累加数据还是继续保留,等注入通道结束后继续过采样并计算。如果选择不连续模式,就是当有注入通道触发时原来规则组的过采样累加数据不再保留,等注入通道结束后重新开始过采样。这里没有用到注入通道,应该不影响。

已触发规则过采样这个选项设置选触发一次就进行全部的过采样,这里我也有一些困惑,看了手册大概意思应该是该通道每触发一次是进行这一次全部的过采样还是每触发一次就只进行一次过采样,意思就是说如果选择触发一次就进行全部的过采样那么这个通道的采样周期是不会变化的,原来1秒采集一个数据的话开了过采样还是一秒采集一个数据,只是这一秒内实际上是采集了16次的,而如果选择了每次过采样都需要一次触发那就成了本来1秒采集一个数据开了过采样后就变成了16秒采集一个数据。

7、后面就是和F1、F4同样的配置

8、生成代码后和F1、F4系列一样直接调用函数 HAL_ADC_Start_DMA()可直接将数据存储到缓存区。

 //H7系列支持ADC校准,这里采用偏移校准(还可以选择线性校准,线性校准需要特定条件且//出厂时已校准过),单端输入(还可以选择差分输入)if(HAL_ADCEx_Calibration_Start(&hadc1,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED)!=HAL_OK){while(1);}//开启ADC的DMA,开启后会将各通道ADC原始值填充到对应数组中HAL_ADC_Start_DMA(&hadc1,(uint32_t *)ADC_ROSA_Raw,3); 

STM32 H7系列ADC DMA模式过采样设置详解 cubeMX相关推荐

  1. STM32F407 ADC+DMA+定时器 定时采样模拟量

    STM32F407 ADC+DMA+定时器 定时采样模拟量 文章目录 STM32F407 ADC+DMA+定时器 定时采样模拟量 前言 一.硬件原理 1.1 ADC 1.2 定时器 3. DMA 二. ...

  2. 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  3. 【×××系列八】Dynamic Multipoint *** for IPv6 详解

    [×××系列八]Dynamic Multipoint *** for IPv6 详解 一.前言 由于涉及IPV6加密,所以根据思科标准此次配置使用思科7200系列高级企业版IOS (详情参考我的上一篇 ...

  4. python的编程模式-Python设计模式之状态模式原理与用法详解

    本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...

  5. 怎样进入android模式,安卓手机如何进入Recovery模式的通用方式详解

    2014-12-12 15:24:16 安卓手机如何进入Recovery模式的通用方式详解 标签:安卓 Recovery模式 教程 Recovery模式是什么?这里说的Recovery模式主要指的是安 ...

  6. android doze模式源码分析,Android Doze模式启用和恢复详解

    从Android 6.0(API level 23)开始,Android提出了两个延长电池使用时间的省电特性给用户.用户管理可以在没有充电的情况下管理app的行为.当用户一段时间没有使用手机的时候,D ...

  7. Java单机部署,Nacos docker单机模式部署实现过程详解

    Nacos 的部署,我使用的时docker 部署(单机模式 mysql),官网文档:https://nacos.io/zh-cn/docs/quick-start-docker.html 拉取代码: ...

  8. 接口与继承系列教材 (十)- Java 内部类详解

    接口与继承系列教材 (十)- Java 内部类详解 内部类分为四种: 非静态内部类 静态内部类 匿名类 本地类 步骤1:非静态内部类 步骤2:静态内部类 步骤3:匿名类 步骤4:本地类 步骤5:在匿名 ...

  9. 跟着小马哥学系列之 Spring AOP(Pointcut 组件详解)

    学好路更宽,钱多少加班. --小马哥 版本修订 2021.5.19:去除目录 2021.5.21:引用 Spring 官方 Pointcut 概念,修改 Pointcut 功能表述 简介 大家好,我是 ...

最新文章

  1. 使用时空-频率模式分析从脑电数据的一些试验中提取N400成分
  2. Java 集合 之 房屋出租实例
  3. linux fstream open,fstream创建文件的问题
  4. 前端JavaScripts基础知识点
  5. Java面试题谷歌插件
  6. cmd imp导入dmp文件_cmd 导入oracle数据的dmp文件
  7. python图像分析_python分析问题步骤Python比较两个图片相似度的方法
  8. windows Mobile使用ActiveSync上网
  9. 企业安全三步走 惠普重新思考安全战略
  10. 经典的HTML5游戏及其源码分析
  11. Gradle报 skkiped gradle skipped due to earlier error
  12. 下载python开发环境
  13. C++ 侯捷视频学习(草稿)
  14. 68个dlib的landmarks
  15. php 手机号归属地 dat,GitHub - china-qd/phonedata: 手机号码归属地信息库、手机号归属地查询 phone.dat 最后更新:2020年04月...
  16. 秒杀场景的九个细节,细思极恐!
  17. Java中被final修饰的变量的几种赋值方式
  18. 电脑组成部件介绍图解:电脑的硬件组成部分及其作用各是什么?
  19. python单选按钮取消_取消选中单选按钮-PyQt4
  20. Facebook要来东区挖人了,微软准备好了吗?

热门文章

  1. hosts文件为空白或删除情况修复
  2. Gephi不显示Betweenness Centrality等中心性的问题
  3. 魔兽世界服务器维护12月13日,3月27日服务器维护提前完成 更新12M工具补丁
  4. 谷歌插件开发(实现CSDN快速登陆)
  5. 右键菜单管理 - Win系统
  6. React(六) —— redux
  7. 计算机显卡驱动全部卸载,Win7如何彻底卸载NVIDIA显卡驱动程序有哪些方法
  8. Python----空空如也
  9. Windows命令行复制文件
  10. Linux编译mplayer播放badapple及编译fbv加载图片(基于V3S预告板子要开源了)