文章目录

  • 一、前言
  • 二、CubeMX
    • 2.1、RCC,SYS,Clock Configuration
    • 2.2、CORTEX_M7(cache与MPU)
    • 2.3、ADC3 Mode and Configuration
    • 2.4、DMA Settings
    • 2.5、Parameter Settings
    • 2.6、GPIO settings
  • 三、Keil
    • 3、1、Target
    • 2.2、Linker
  • 四、代码
    • 4.1、adc.c
    • 4.2、main.c
  • 五、硬件接线
  • 六、DEBUG
    • 6.1、Debug(printf)Viewer
    • 6.2、观察全局变量
  • 七、细节补充
    • 7.1、在HAL_ADCEx_Calibration_Start()之前添加HAL_Delay

相关笔记:
STM32H743-梳理ADC模数转换器在CubeMX上的配置
STM32H743+CubeMX-使用ADC模数转换器读取CPU的温度(串行方式)

一、前言


在实际项目上,ADC采样必须与DMA组合使用,实现并行采样。这里的“并行采样”并不是多个通道同时采样,而是ADC控制器一边采样,CPU一边干其他非常重要的活。当CPU在需要ADC采样的数据时,通过cache获取内存里模拟量的值即可。

这个笔记实现ADC3+DMA采样三路模拟量,分别是ADC_IN9, Vrefint Channel(MCU内部), Temperature Sensor Channel(MCU内部).

系统框图如下(从右到左):

  1. ADC3采样各个通道的模拟量,每当采样完成时,让DMA将采样的数据存放到内存RAM_D3里(声明一个全局数组ADC3_Data[3])。
  2. 每隔300ms,CPU通过cache获取全局变量ADC_Data[0] ~ ADC_Data[2]一共3个模拟量。

STM32工程:

链接:https://pan.baidu.com/s/1KbbWJ7K4SgKxjOns4iLOPA
提取码:kexw

二、CubeMX


2.1、RCC,SYS,Clock Configuration

这三项的设置跟笔记一样:
STM32H743+CubeMX-使用ADC模数转换器读取CPU的温度(串行方式)

2.2、CORTEX_M7(cache与MPU)

DMA不能访问DTCM内存,所以要开辟RAM_D3内存,让DMA有地方放数据。基于这个目的,需要开启Cortex_M7的cache与MPU功能。

2.3、ADC3 Mode and Configuration

2.4、DMA Settings

2.5、Parameter Settings

各个参数的说明,参考笔记:STM32H743-梳理ADC模数转换器在CubeMX上的配置

2.6、GPIO settings

只有ADC3_IN9是外部通道,所以只有一个GPIO口。

最后生成代码:

三、Keil


将全局数组ADC_Data[4]定义到内存RAM_D3域。参考笔记:STM32H743+CubeMX-将变量定义到指定内存(Keil软件)

3、1、Target

让Keil只管理DTCM内存,不要管理其他内存。

2.2、Linker

从ST官方手册RM0433可以查到,STM32H743的Flash首地址是0x08000000,DTCM(紧密耦合内存)的首地址是0x20000000。

.sct文件,最开始跟Target配置的ROM与RAM一一对应的。接下来,我们需要增加.sct的内存。

在.sct文件添加其他内存的描述。

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************LR_IROM1 0x08000000 0x00200000  {    ; load region size_regionER_IROM1 0x08000000 0x00200000  {  ; load address = execution address*.o (RESET, +First)*(InRoot$$Sections).ANY (+RO).ANY (+XO)}RW_IRAM1 0x20000000 0x00020000  {  ; RW data.ANY (+RW +ZI)}RW_IRAM4 0x38000000 0x00010000  {  ; RW data - 64KB SRAM4(0x38000000)*(.RAM_D3)}}

接着,一定要Rebuild整个工程,不然会报错。。

四、代码


4.1、adc.c

在函数MX_ADC3_Init():

4.2、main.c



五、硬件接线


只有ADC3_IN9是外部通道,为了方便测试,ADC3_IN9连接3.3V。

六、DEBUG


6.1、Debug(printf)Viewer

从printf的信息看到,Vrefint的值是正确的。ADC3_IN9与DC3.3V连接,所以它的值非常接近3.3V。

6.2、观察全局变量

实时观察全局变量。

七、细节补充


7.1、在HAL_ADCEx_Calibration_Start()之前添加HAL_Delay

有一些网友说,在某些板子上电时,电容正在充电,最好在HAL_ADCEx_Calibration_Start()之前延时一会会,等待电容充满电,板子的3.3V电源网络稳定后再执行HAL_ADCEx_Calibration_Start()。

STM32H743+CubeMX-ADC(16bit分辨率)+DMA采样三路模拟量(并行),没过采样。相关推荐

  1. STM32H743+CubeMX-ADC(16bit分辨率)+DMA采样三路模拟量,硬件过采样器实现1024倍过采样

    一.前言 上一个笔记:STM32H743+CubeMX-ADC+DMA采样三路模拟量(并行),没过采样 这个应该是STM32上ADC采样的终极解决方案了,硬件1024倍过采样+DMA搬运数据. 在一个 ...

  2. STM32使用ADC+DMA进行多通道模拟量采集 (踩坑及傻瓜式解析)

    STM32使用ADC+DMA进行多通道模拟量采集 (踩坑及通俗解析) ​ 利用STM32的片上外设可采集多个模拟量(如传感器数值),并在嵌入式程序中使用.如果只使用了一个通道,用时令ADC转换而后读取 ...

  3. 用单片机普通IO口(不用ADC功能)采集模拟量

    http://www.51hei.com/bbs/dpj-126017-1.html 以下介绍的这个方法是用没有 ADC 功能的芯片来检测模拟量,采集温度: 1. 温度检测电路图 :   2. 温度检 ...

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

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

  5. 【STM32F429开发板用户手册】第33章 STM32F429的SPI总线应用之驱动DAC8563(双通道,16bit分辨率,正负10V)

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第33章       STM32F429的SPI总线应用之驱动DA ...

  6. 【STM32H7教程】第74章 STM32H7的SPI总线应用之驱动DAC8563(双通道,16bit分辨率,正负10V)

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第74章       STM32H7的SPI总线应用之驱动DA ...

  7. stm32h7高速通信_【STM32H7教程】第75章 STM32H7的SPI总线应用之驱动DAC8501(双路输出,16bit分辨率,0-5V)...

    第75章       STM32H7的SPI总线应用之驱动DAC8501(双路输出,16bit分辨率,0-5V) 本章节为大家讲解标准SPI接线方式驱动模数转换器DAC8501,制作了中断和DMA两种 ...

  8. 【STM32F429开发板用户手册】第34章 STM32F429的SPI总线应用之驱动DAC8501(双路输出,16bit分辨率,0-5V)

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第34章       STM32F429的SPI总线应用之驱动DA ...

  9. stm8L ADC多通通DMA采集和EEPROM一起使用解决死机和数据错位问题——寄存器

    一.简介 现象:本实验在使用ADC+DMA+EEPOM实验室,在eeprom写入数据的时候单片机死机,我在写eerpom时关闭adc和关闭dma,写完之后开启adc和dma单片机就不死机了,然后就出现 ...

最新文章

  1. 系统吞吐量(TPS)、用户并发量、性能测试概念和公式(转载)
  2. Lync Server 2010迁移至Lync Server 2013故障排错Part1:缺少McsStandalone.msi
  3. 终于等到你!2020年电子设计竞赛来了!
  4. my.ini修改后服务无法启动_Spring Cloud Eureka 服务实现不停机(Zero-downtime)部署
  5. Linux 命令(88)—— more 命令
  6. 深度剖析WinPcap之(二)——网络分析与嗅探的基础知识(3)
  7. linux opendir路径_Linux下目录文件的操作(opendir,readdir,closedir) 以及DIR,dirent,stat等结构体详解...
  8. CodeForces 595A Vitaly and Night
  9. ICML 2022 | 稀疏双下降:网络剪枝也能加剧模型过拟合?
  10. Mac、移动硬盘中拷贝后文件夹和文件都为灰色解决办法
  11. ContentRoot 和 WebRoot 的区别
  12. HTML+CSS+JS 01篇
  13. 设计模式入门--发布订阅模式
  14. 剑指Offer——京东实习笔试题汇总
  15. Flask结合flask_sqlalchemy教程
  16. PDF和图片怎样合并在一起
  17. android基础夯实2
  18. Ansys electronics desktop 2020R1安装之后出现了很大的问题
  19. UE4的JSON读写方式二
  20. ESP8266通信详细教程

热门文章

  1. Django的分页器(paginator)
  2. vim模板插件vim-template的使用
  3. 软件的可扩展性与框架的可交互性
  4. Linux shell tips and tricks
  5. PIC18F中断定时器
  6. JAVA socket编程实例
  7. 至今还记忆犹新的即时通讯
  8. 飞鸽传书有关举证不够严谨
  9. 携号转网将于明年在全国范围内实施
  10. 中科院,NASA日全食网络直播[多个观测点入口]