STM32CubeMx-ADC

发布者:MysticalGlow最新更新时间:2019-09-11 来源: eefocus关键字:STM32CubeMX  ADC 手机看文章 扫描二维码
随时随地手机看文章

本章通过两个例程介绍STM32的模数转换器(ADC),第一个通过ADC采集内部温度传感器通道电压,然后得出MCU内部温度。第二个通过DMA的方式采集两个ADC通道电压。


1.ADC


本章程序在串口printf工程的基础上修改,复制串口printf的工程,修改文件夹名。击xxx.ioc打开STM32cubeMX的工程文件重新配置。ADC1外设选择温度传感器通道。

ADC1配置如下,选择默认设置。其Date Alignment设置为数据右对齐; 采样时间 239.5周期。对于每个要转换的通道,采样时间建议尽量长一点,以获得较高的准确度,但是这样会降低 ADC 的转换速率。 ADC 的转换时间可以由以下公式计算:


Tcovn=采样时间+12.5 个周期


其中: Tcovn 为总转换时间,采样时间是根据每个通道的 SMP 位的设置来决定的。例如,


当 ADCCLK=14Mhz 的时候,并设置 1.5 个周期的采样时间,则得到:  TCONV = 1.5 + 12.5 = 14周期 = 14×(1 / (14 × 1000000)) = 1μs。


生成报告以及代码,编译程序。在adc.c文件中可以看到ADC初始化函数。


在stm32f1xx_hal_adc.h头文件中可以找到如下ADC操作函数。和串口一样,ADC也可以通过三种方式控制。

在main()函数前面声明变量保存AD采集的值

在main()函数while(1)循环里面添加函数声明变量保存AD采集的值

在adc.c还要添加ADC校准

HAL_ADC_GetValue(&hadc1);读取ADC转换数据,数据为12位。查看数据手册可知,寄存器为16位存储转换数据,数据右对齐,则转换的数据范围为0~2^12-1,即0~4095.

AD_Value*3300/4096为将转换后的数据转化为电压,单位为mV,参考电压为3.3V。查询数据手册可以电压和温度的关系。经过计算公式装换后等到MCU内部温度值。


编译程序并下载到开发板。打开串口调试助手。设置波特率为115200。串口助手上会显示MCU温度。


2.ADC_DMA


前面介绍了通过ADC轮询的方式采集单通道的数据。现在介绍一下通过DMA方式采集多通道的数据。


复制串口printf工程的工程,修改文件夹名。点击xxx.ioc打开STM32cubeMX的工程文件重新配置。使用PA6,PA7管脚作为ADC1的输入管脚。


ADC1配置:使能扫描转换模式(Scan Conversion Mode),使能连续转换模式(Continuous Conversion Mode),使能DMA连续请求。ADC规则组选择转换通道数为2(Number Of Conversion)。其他为默认设置。


添加DMA设置,设置为连续传输模式,数据长度为字

生成报告以及代码,编译程序。在adc.c文件中可以看到ADC初始化函数。


在main函数前面添加变量。其中ADC_Value作为转换数据缓存数组,ad1,ad2存储PA6,PA7的电压值。

在while(1)前面以DMA方式开启ADC装换。HAL_ADC_Start_DMA()函数第二个参数为数据存储起始地址,第三个参数为DMA传输数据的长度。


由于DMA采用了连续传输的模式,ADC采集到的数据会不断传到到存储器中(此处即为数组ADC_Value)。ADC采集的数据从ADC_Value[0]一直存储到ADC_Value[99],然后采集到的数据又重新存储到ADC_Value[0],一直到ADC_Value[99]。所以ADC_Value数组里面的数据会不断被刷新。这个过程中是通过DMA控制的,不需要CPU参与。我们只需读取ADC_Value里面的数据即可得到ADC采集到的数据。


      其中ADC_Value[0]为通道6(PA6)采集的数据,ADC_Value[1]为通道7(PA7)采集的数据,ADC_Value[2]为通道6采集的数据,如此类推。数组偶数下标的数据为通道6采集数据,数组奇数下标的数据为通道7采集数据。


在while(1)循环中添加应用程序,将采集的数据装换为电压值并输出。


程序中将数组偶数下标数据加起来求平均值,实现均值滤波的功能,再将数据转换为电压值,即为PA6管脚的电压值。同理对数组奇数下标数据处理得到PA7管脚的电压值。


编译程序并下载到开发板。打开串口调试助手。设置波特率为115200。串口助手上会显示采集到的电压值,使用杜邦线连接开发板上的3.3v和GND引脚测试。


关键字:STM32CubeMX  ADC 引用地址:STM32CubeMx-ADC

上一篇:STM32学习---GPIO和按键(流水灯学习)
下一篇:STM32Cube-直接存储器访问(DMA)

推荐阅读最新更新时间:2024-11-13 15:10

STM32 ADC自我学习总结
记录一下STM32的ADC编程方法! 前面已经学习了DMA,知道如何使用DMA去减小CPU的负担,这里的ADC转换也来使用DMA---这个也是STM32的ADC转换最常见的方式。 ---第一步是---了解STM32的ADC对应的GPIO口----如下图---不用记住,可以查询,我是将它剪下来粘贴到书本的相应章节----! ---第二步是---配置相应ADC转换的GPIO口----这里使用PC0--PC1 static void ADC1_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHB
[单片机]
STM32 <font color='red'>ADC</font>自我学习总结
STM32CubeMX学习笔记:printf()输出数据
在使用ST官网的库建立工程时,我们可以调用printf(),在使用STM32CubeMX建立工程时,调用printf(),无法打印出数据,度娘告知,需要添加如下函数: int fputc(int ch,FILE *f) { uint8_t temp ={ch}; HAL_UART_Transmit(&huart1,temp,1,2); return(ch); } 函数可以添加在main()函数前面,也可以添加在usart.c里面。 作用:重新定义printf(),指向huart1(串口1),在这里可以更改为其他串口。
[单片机]
STM32基础1--STM32CubeMx项目配置
1.0:选择STM芯片 启动STM32CubeMx之后,点击File- New Project ,本人使用的是正点原子探索者STM32F407的开发版,因此在搜索栏输入芯片STM32F407ZGT6,然后双击,然后完成新建项目。 注:如果不知道开发板的芯片,可以查看供应商给的原理图或者直接看芯片的标识,建议最好看直接看芯片的标识。 2.0:设置RCC 3.0:设置SYS 注:在BUG里面有很多选项,根据自己开发板的接口选择,由于SWD(Serial Wire Debug)接线简单,现在市场的上开发板基本都是由于这个接口。 4.0:硬件配置 正点原子探索者开发板中,有两个LED与4个按
[单片机]
STM32基础1--STM32CubeMx项目配置
超低功耗、18位、差分PULSAR ADC驱动(CN0237)
电路功能与优势   图1所示电路使用超低功耗、18位1 MSPS ADCAD7982 ,由低功耗全差分放大器ADA4940-1来驱动。低噪声精密5.0V基准电压源 ADR395用于提供该ADC所需的5V电源。图1所示的所有IC均采用3 mm × 3 mm LFCSP或3 mm × 5 mm MSOP小型封装,从而有助于降低电路板成本和空间。   电路中ADA4940-1的功耗不到9 mW。18位1 MSPS AD7982 ADC的功耗仅7 mW (1 MSPS时),远低于市面上的同类ADC。此功耗也随吞吐量而变化。ADR395功耗仅为0.7mW,使系统总功耗低于17 mW。   图1 高性能18位差分ADC驱动器(简易
[模拟电子]
超低功耗、18位、差分PULSAR <font color='red'>ADC</font>驱动(CN0237)
基于网分的高速模数转换器输入阻抗测量
在通信领域,随着中频(IF)频率越来越高,了解输入阻抗如何随频率而变化变得日益重要。本文解释了为什么ADC输入阻抗随频率而变化,以及为什么这是个电路设计难题;然后比较了确定输入阻抗的两种方法:利用网络分析仪测量法和利用数学分析方法计算法。本文还介绍了正确使用网络分析仪的过程,并且提供了一个数学模型,其计算结果与实际测量结果非常接近。   利用高速ADC进行设计时,常常要考虑这样的问题: ADC的模拟输入阻抗与频率有何关系? 数据手册只给出对应一个频点的阻抗。如果要处理100 MHz以上的IF,那输入阻抗是多少?输入阻抗是随频率变化还是保持不变?   考虑在信号链中使用任何新器件时,输入/输出阻抗通常是让所需的信号链各模块配合
[测试测量]
基于网分的高速<font color='red'>模数转换器</font>输入阻抗测量
STM32CubeMX Hal库的一些坑
使用的是stm32f103 V1.40版本的库 UART DMA发送的问题 发送函数 HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); 发送完毕之后成功的回调函数也正常,可是再次发送的时候就发不出去了。一直返回错误。 我们看下这个函数的代码 HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) { uint32_t *tmp;
[单片机]
STM32cubeMX使用心得
使用STM32cubeMX创建工程 首先你需要下载STM32cubeMX软件版本,我使用的是——5.0.1.软件版本可以去官网下载。 其次你需要一个合适你工程的《STMcube_FW_F1_Vxx》库链接如下:提取码:uqbw https://pan.baidu.com/s/1x-tMOqPwUC0R9O2xAx2QfQ 当我们使用STM32cubeMX创建一个工程时选择MCU selector - core,series。 最后在选择具体什么型号的芯片。 工程配置说明: 系统核心- systeam core 数模转换- analog 定时器功能- timers 通讯功能- connectivity 音频- multi
[单片机]
<font color='red'>STM32cubeMX</font>使用心得
STM32 ADC应用要注意的几点问题
所有的STM32芯片中都带有逐次逼近型ADC模块,关于它的应用非常广泛和频繁。不过,应用过程中时常也会遇到些问题,这尽力小结下,与大家分享出来算作一些提醒。 1、Vdda没有供电或没有正常供电;STM32系列众多,该参数不可一概而论,细节请参考各个芯片数据手册。 2、采样电阻取值不合适,跟采样时间不匹配,经常表现为输入电阻过大、配置的采样时间偏短。实际设计时可以参考下STM32官方各系列评估板的相关电路。另外可以参考ST官方的应用笔记AN2834。关于ADC 应用其它的应用笔记,可以去WWW.STMCU.COM.CN搜索ADC即可。 3、ADC上电开启到稳定需要一段时间,即Tstab,该参数在数据手册里有介绍。在
[单片机]
STM32 <font color='red'>ADC</font>应用要注意的几点问题
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved