STM32H743+CubeMX-ADC(16bit分辨率)+DMA采样三路模拟量(并行),没过采样。
文章目录
- 一、前言
- 二、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内部).
系统框图如下(从右到左):
- ADC3采样各个通道的模拟量,每当采样完成时,让DMA将采样的数据存放到内存RAM_D3里(声明一个全局数组ADC3_Data[3])。
- 每隔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采样三路模拟量(并行),没过采样。相关推荐
- STM32H743+CubeMX-ADC(16bit分辨率)+DMA采样三路模拟量,硬件过采样器实现1024倍过采样
一.前言 上一个笔记:STM32H743+CubeMX-ADC+DMA采样三路模拟量(并行),没过采样 这个应该是STM32上ADC采样的终极解决方案了,硬件1024倍过采样+DMA搬运数据. 在一个 ...
- STM32使用ADC+DMA进行多通道模拟量采集 (踩坑及傻瓜式解析)
STM32使用ADC+DMA进行多通道模拟量采集 (踩坑及通俗解析) 利用STM32的片上外设可采集多个模拟量(如传感器数值),并在嵌入式程序中使用.如果只使用了一个通道,用时令ADC转换而后读取 ...
- 用单片机普通IO口(不用ADC功能)采集模拟量
http://www.51hei.com/bbs/dpj-126017-1.html 以下介绍的这个方法是用没有 ADC 功能的芯片来检测模拟量,采集温度: 1. 温度检测电路图 : 2. 温度检 ...
- STM32F407 ADC+DMA+定时器 定时采样模拟量
STM32F407 ADC+DMA+定时器 定时采样模拟量 文章目录 STM32F407 ADC+DMA+定时器 定时采样模拟量 前言 一.硬件原理 1.1 ADC 1.2 定时器 3. DMA 二. ...
- 【STM32F429开发板用户手册】第33章 STM32F429的SPI总线应用之驱动DAC8563(双通道,16bit分辨率,正负10V)
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第33章 STM32F429的SPI总线应用之驱动DA ...
- 【STM32H7教程】第74章 STM32H7的SPI总线应用之驱动DAC8563(双通道,16bit分辨率,正负10V)
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第74章 STM32H7的SPI总线应用之驱动DA ...
- stm32h7高速通信_【STM32H7教程】第75章 STM32H7的SPI总线应用之驱动DAC8501(双路输出,16bit分辨率,0-5V)...
第75章 STM32H7的SPI总线应用之驱动DAC8501(双路输出,16bit分辨率,0-5V) 本章节为大家讲解标准SPI接线方式驱动模数转换器DAC8501,制作了中断和DMA两种 ...
- 【STM32F429开发板用户手册】第34章 STM32F429的SPI总线应用之驱动DAC8501(双路输出,16bit分辨率,0-5V)
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第34章 STM32F429的SPI总线应用之驱动DA ...
- stm8L ADC多通通DMA采集和EEPROM一起使用解决死机和数据错位问题——寄存器
一.简介 现象:本实验在使用ADC+DMA+EEPOM实验室,在eeprom写入数据的时候单片机死机,我在写eerpom时关闭adc和关闭dma,写完之后开启adc和dma单片机就不死机了,然后就出现 ...
最新文章
- 系统吞吐量(TPS)、用户并发量、性能测试概念和公式(转载)
- Lync Server 2010迁移至Lync Server 2013故障排错Part1:缺少McsStandalone.msi
- 终于等到你!2020年电子设计竞赛来了!
- my.ini修改后服务无法启动_Spring Cloud Eureka 服务实现不停机(Zero-downtime)部署
- Linux 命令(88)—— more 命令
- 深度剖析WinPcap之(二)——网络分析与嗅探的基础知识(3)
- linux opendir路径_Linux下目录文件的操作(opendir,readdir,closedir) 以及DIR,dirent,stat等结构体详解...
- CodeForces 595A Vitaly and Night
- ICML 2022 | 稀疏双下降:网络剪枝也能加剧模型过拟合?
- Mac、移动硬盘中拷贝后文件夹和文件都为灰色解决办法
- ContentRoot 和 WebRoot 的区别
- HTML+CSS+JS 01篇
- 设计模式入门--发布订阅模式
- 剑指Offer——京东实习笔试题汇总
- Flask结合flask_sqlalchemy教程
- PDF和图片怎样合并在一起
- android基础夯实2
- Ansys electronics desktop 2020R1安装之后出现了很大的问题
- UE4的JSON读写方式二
- ESP8266通信详细教程