STM32——ADC基本原理
ADC:Analog-to-Digital Converter的缩写,指模/数转换器或者模拟/数字转换器,是指将连续变量的模拟信号转换位离散的数字信号的器件。典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。
STM32F4x ADC特点:
1、可配置12位、10位、8位或6位分辨率。
2、在转换结束、注入转换结束以及发生模拟看门狗或溢出时间时产生中断。
3、单次和连续转换模式。
4、用于自动将通道0转换为通道“n”的扫描模式。
5、数据对齐以保持内置数据一致性。
6、可独立设置各通道采样时间。
7、外部触发器选项,可为规则转换和注入转换配置极性。
8、不连续采样模式。
9、双重/三重模式(具有2个或则更多ADC的器件提供)。
10、双重/三重ADC模式下可配置的DMA数据存储。
11、双重/三重交替模式下可配置的转换间延迟。
12、ADC转换类型。
13、ADC电源要求:全速运行时为2.4V到3.6V,慢速运行时为1.8V。
14、ADC输入范围:Vref-<=Vin<=Vref+
15、规则通道转换期间可产生DMA请求。
STM32F40x大容量芯片带3个ADC控制器:
其中144脚芯片因为带PF脚,所以多8个通道,为24个外部通道,小于144脚芯片只有16个外部通道。
STM32F4 系列ADC外部通道和引脚对应关系:
ADC引脚:
ADC框图:
STM32通道组:
1、规则通道组:相当正常运行的程序。最多16个通道。规则通道和它的转换顺序在ADC_SQRx寄存器中选择,规则组转换的总数应写入ADC_SQR1寄存器的L[3:0]中。
2、注入通道组:相当于中断。最多4个通道。注入组和它的转换顺序在ADC_JSQR寄存器中选择。注入组里转化的总数应写入ADC_JSQR寄存器的L[1:0]中。
注入通道就相当于中断,在规则通道执行过程中加入注入通道。
STM32F4的ADC的各个通道可以单次、连续、扫描或者间断执行。
单次转化VS连续转换
单次转换模式:
在单次转换模式下,ADC执行一次转换。CONT位为0时,可通过以下方式启动此模式:
1)将ADC_CR2寄存器中的SWATART位置1(仅适用于规则通道)
2)将JSWATART位置1(仅适用于注入通道)
3)外部触发(适用于规则通道或外部通道)
完成所选通道的转换之后:
1)如果转换了规则通道
——转换数据存储在16位ADC_DR寄存器中
——EOC(转换结束)标志置1
——EOCIE位置1时将产生中断
2)如果转换了注入通道
——转换数据存储在16位ADC_JDR1寄存器中
——JEOC(注入转换结束)标志置1
——JEOCIE位置1时将产生中断
然后ADC停止。
连续转换模式:
在连续转换模式下,ADC结束一个转换后立即启动一个新的转换。CONT位为1时,可通过外部触发或将ADC_CR2寄存器中的SWSTRT位置1来启动此模式(仅适用规则通道)
每次转换之后:
1)如果转换了规则通道组:
——上次转换的数据存储在16位ADC_DR寄存器中
——EOC(转换结束)标志置1
——EOCIE位置1时将产生中断
无法连续转换注入通道。连续模式下唯一的例外情况是,注入通道配置为在规则通道之后自己动转换(使用JAUTO位)。
扫描模式:
此模式用于扫描一组模拟通道。
通过将ADC_CR1寄存器中的SCAN位置1来选择扫描模式。将此位置1后,ADC会扫描在ADC_SQRx寄存器(对于规则通道)或者ASC_JSQR寄存器(对于注入通道)中选择的所有通道。对组中的每一个通道都执行一次转换。每次转换结束之后,会自动转换该组中的下一个通道。如果将CONT位置1,规则通道转换不会在组中最后一个所选通道处停止,而是再次从第一个所选通道继续转换。
如果将DMA位置1,则在每次规则通道转换之后,均使用直接存储器访问(DMA)控制器将转换自规则通道组的数据(存储在ADC_DR寄存器中)传输到SRAM。
在以下情况下,ADC_SR寄存器中的EOC位置1:
——如果EOCS位置清零,在每一个规则组序列转换结束时
——如果EOCS位置1,在每个规则通道转换结束时
从注入通道转换的数据始终存储在ADC_JDRx寄存器中
ADC_CR1控制寄存器1
ADC中断:
当模拟看门狗状态位和溢出状态位分别置1时,规则组和注入组在转换结束时可能会产生中断。可以使用单独的中断使能位以实现灵活性。
ADC_SR寄存器中存在另外两个标志,但这两个标志不存在中断相关性:
——JSTRT(开始转换注入组的通道)
——STRT(开始转换规则组的通道)
ADC_CCR通用控制寄存器
不要让ADC时钟超过36MHz,否则可能不准。
ADC_CR1寄存器
在扫描模式下,由ADC_SQRx或ADC_JSQRx寄存器选中的通达被转换,如果设置了EOCIE或则JEOCIE为0。在最后一个通道转换完毕后才会产生EOC或者JEOC中断。
ADC_CR2寄存器
数据对齐方式:
ADC_CR2寄存器中的ALIGN位选择转换后数据存储的对齐方式,数据可以左对齐或右对齐,如图29和图30所示。
注入组通道转换的数值已经减去了在ADC_JOFRx寄存器中定义的偏移亮,因此结果可以是一个负值。SEXT位是扩展的符号值。
对于规则组通道,不需减去偏移值,因此只有12个位有效。
ADC_SMPR1寄存器
ADC_SMPR2寄存器
ADC的采样时间
ADC_SQR1/SQR2/SQR3规则序列寄存器
ADC_DR规则通道数据寄存器
ADC_SR状态寄存器
常用库函数
ADC通用初始化函数ADC_Commonlnit
void ADC_Commonlnit(ADC_CommoninitTypeDef* ADC_CommoninitStruct);
typedef struct
{
uint32_t ADC_Mode;//多重ADC模式选择
uint32_t ADC_Prescaler;//ADC预分频
uint32_t ADC_DMAAccessMode;//DMA访问模式
uint32_t ADC_TwoSamplingDelay;//2个采样阶段之间的延迟
}ADC_CommonlnitTypeDef;
ADC初始化函数ADC_Init
void ADC_Init(ADC_TypeDef* ADCx_InitTypeDef* ADC_InitStruct);
typedef struct
{
uint32_t ADC_Resoulation;//ADC分辨率
FunctionalState ADC_SacnConvMode;//是否使用扫描模式。ADC_CR1位8:SCAN位
FunctionalState ADC_ContinuousConvMode;
//单次转换or连续转换:ADC_CR2的位:CONT
uint32_t ADC_ExternalTrigConvEdge;
//外部触发使能方式:ADC_CR2的位29:28,EXTEN
uint32_t ADC_ExternalTrigConv;//触发方式:ADC_CR2的位[19:17]:EXTSEL[2:0]
uint32_t ADC_DataAlign;//对齐方式:左对齐还是右对齐:ADC_CR2的位11:ALIGN
uint8_t ADC_NbrOfChannel;//规则通道序列长度:ADC_SQR1的位[23:20]:L[3:0]
}ADC_InitTypeDef;
ADC使能函数ADC_Cmd();
void ADC_Cmd(ADC_TypeDef* ADCx,FunctionalState NewState);
ADC_Cmd(ADC1,ENABLE);//使能指定的ADC1
ADC使能软件转换函数ADC_SoftwareStartConvCmd();
void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx,FunctionalState NewState);
ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能ADC1的软件转换启动
ADC规则通道配置函数ADC_RegualrChannelConfig();
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx,uint8_tADC_Channel,uint8_t ADC_SampleTime);
ADC_RegularChannelConfig(ADC1,ADC_Channel_5,1,ADC_SampleTime_480Cycles);
ADC获取转换结果函数ADC_GetConversionValue();
uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);
ADC_GetConversionValue(ADC1);//获取ADC1转换结果
STM32——ADC基本原理相关推荐
- STM32 ADC 同步规则模式 ADC1与ADC2同用一个DMA
STM32 ADC 支持同步规则模式 ,其官方解释为: 大致意思就是通道组的 ADC1 的多路开关(由 ADC1_CTLR2寄存器的 ETSRC[2:0]决定), ADC2 被同步触发.在 ADC1 ...
- STM32 ADC 采样 频率的确定
一 STM32 ADC 采样频率的确定 1. : 先看一些资料,确定一下ADC 的时钟: (1),由时钟控制器提供的ADCCLK 时钟和PCLK2(APB2 时钟)同步.CLK 控制器为A ...
- STM32 ADC转换实验
摘自:STM32 ADC转换实验 作者:追兮兮 发布时间: 2020-10-29 09:42:24 网址:https://blog.csdn.net/weixin_44234294/article/d ...
- STM32——ADC
STM32--ADC 宗旨:技术的学习是有限的,分享的精神是无限的. 一.ADC指标 有 18 个通道,可测量 16 个外部和 2 个内部信号源.各通道的 A/D 转换可以单次.连续.扫描或间断模式执 ...
- STM32 ADC模数转换
STM32 ADC模数转换 独立模式/双重DMA/三重DMA //使能ADC时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //APB2 ...
- stm32 ADC hal库实现
stm32 ADC hal库实现 1.ADC的作用 (1)简介: ADC(Analog-to-Digital Converter),即模拟-数字转换器,可以将连续变化的模拟信号转换为离散的数字信号,进 ...
- STM32 ADC单通道与多通道_DMA学习笔记
转自:https://blog.csdn.net/dmfylb/article/details/72802690 第一部分 ADC单路采集 下面我们将 PC0引脚配置成 AD1的通道10为例进行讲解 ...
- STM32 ADC采样
目录 1.基础概念 2.原理:ADC采样过程分为四步:采样.保持.量化.编码. 3.采样定理 4.采样保持放大器(SHA) 5.ADC电压值转换 6.ADC轮询采样 1.基础概念 ADC 全称:Ana ...
- STM32 ADC多通道规则采样和注入采样
layout: post tags: [STM32] comments: true 文章目录 layout: post tags: [STM32] comments: true 什么是ADC? STM ...
最新文章
- dev layoutview 怎么显示大小_Liunx驱动学习:基于imx6ul 驱动oledssd1306 实现终端显示...
- linux rm 删除所有文件,linux无需rm就可快速删除大量文件
- Win7 如何访问XP系统里的网上邻居?
- C++普通引用和常引用
- 收集的一些jQuery (我平常用的少的,但确实挺有效果的)
- 根据坐标如何在matlab中l连成曲线,matlab中,如何将两条曲线画在一个坐标系里,plot(x1,x2,y1,y2)还是怎样...
- LeetCode算法入门- Remove Nth Node From End of List -day17
- Delphi 生日提醒的方法《LceMeaning》
- 使用MRS CDL实现实时数据同步的极致性能
- Expression Blend4 中文
- R语言机器学习中数据可视化的杀手锏
- html table 表格
- python3多进程执行循环_Python3 并发编程之多进程(一)
- 蓝桥杯 第几个幸运数 set
- H7710s-DDP协议(抄录)
- php图片不存在输出默认图片,JS图片加载失败显示默认图片
- 使用N2N搭建虚拟局域网|可用于红警、我的世界联机
- 成功解决AttributeError: ‘Series‘ object has no attribute ‘split‘
- Unity 2D光照(2D Light)和阴影(Shadow Caster 2D)
- C语言将UTC时间转为时区时间的方法参考
热门文章
- 笔记本显示网络电缆被拔出怎么解决_笔记本提示网络电缆被拔出,我在自己的位置上显示网络电缆被拔出,但? 爱问知识人...
- Wi-Fi物联网设备配网的N种方式
- 山师计算机学科等级,2017全国第四轮学科评估结果公布 山师大位列山东省属高校首位...
- CentOS 7 部署TiDB 2.1.4集群
- 建立大型电商团队的参考
- 如何在 Linux 系统下检测硬盘上的坏道和坏块
- NodeMCU(ESP-12E)+阿里云实现数据上传和控制继电器开锁
- 数据通信网络的运行和维护
- Spring Boot:如何解决跨域问题 ?
- Sorting(排序)