stm32的adc使用(借鉴)

发布者:Xinmei最新更新时间:2024-10-17 来源: cnblogs关键字:stm32  adc使用  查询模式 手机看文章 扫描二维码
随时随地手机看文章

STM32F407_ADC查询模式配置介绍
1.ADC对应管脚介绍
|---管脚------对应ADC----||---管脚------对应ADC----|
| PA0 <---> ADC123_IN0 ||   PA1 <---> ADC123_IN1 |
| PA2 <---> ADC123_IN2 ||   PA3 <---> ADC123_IN3 |
| PA4 <---> ADC12_IN4  ||   PA5 <---> ADC12_IN5  |
| PA6 <---> ADC12_IN6  ||   PA7 <---> ADC12_IN7  |
| PB0 <---> ADC12_IN8  ||   PB1 <---> ADC12_IN9  |
| PC4 <---> ADC12_IN14 ||   PC5 <---> ADC12_IN15 |
| PC0 <---> ADC123_IN10||   PC1 <---> ADC123_IN11|
| PC2 <---> ADC123_IN12||   PC3 <---> ADC123_IN13|
| PF3 <---> ADC3_IN9   ||   PF4 <---> ADC3_IN14  |
| PF5 <---> ADC3_IN15  ||   PF6 <---> ADC3_IN4   |
| PF7 <---> ADC3_IN5   ||   PF8 <---> ADC3_IN6   |
| PF9 <---> ADC3_IN7   ||   PF10<---> ADC3_IN8   |


2.配置查询模式如下
void ADC_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef  ADC_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

//初始化GPIOA的Pin_0为模拟量输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
GPIO_Init(GPIOA, &GPIO_InitStructure);

ADC_DeInit();
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;   //精度为12位           
ADC_InitStructure.ADC_ScanConvMode = DISABLE;   //扫描转换模式失能,单通道不用
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;   //连续转换使能
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; //不用外部触发,软件触发转换
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //数据右对齐,低字节对齐
ADC_InitStructure.ADC_NbrOfConversion = 1;     //规定了顺序进行规则转换的ADC通道的数目
ADC_Init(ADC1, &ADC_InitStructure);


ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles);//ADC,通道,1转换,所选通道的采样周期

ADC_Cmd(ADC1, ENABLE);   //使能
ADC_SoftwareStartConv(ADC1);    //软件启动转换
}


unsigned short GetADCValue(void)
{
return ADC_GetConversionValue(ADC1);
}


3.其他具体配置介绍如下
通道选择:
可以把转换组织成两组:规则组和注入组。在任意多个通道上以任意顺序进行的一系列
转换构成成组转换。例如,可以如下顺序完成转换:通道 3、通道 8、通道 2、通道 2、通道
0、通道 2、通道 2、通道 15。
规则组由多达 16 个转换组成。规则通道和它们的转换顺序在 ADC_SQRx 寄存器中选择。
规则组中转换的总数应写入 ADC_SQR1 寄存器的 L[3:0]位中。
注入组由多达 4 个转换组成。注入通道和它们的转换顺序在 ADC_JSQR 寄存器中选择。
注入组里的转换总数目应写入 ADC_JSQR 寄存器的 L[1:0]位中。?如果 ADC_SQRx 或 ADC_JSQR
寄存器在转换期间被更改,当前的转换被清除,一个新的启动脉冲将发送到 ADC 以转换新
选择的组。


单次转换模式:
单次转换模式下,ADC 只执行一次转换。该模式既可通过设置 ADC_CR2 寄存器的 ADON
位(只适用于规则通道)启动也可通过外部触发启动(适用于规则通道或注入通道),这 时 CONT
位为 0。
一旦选择通道的转换完成:
如果一个规则通道被转换:
─转换数据被储存在 16 位 ADC_DR 寄存器中
─EOC(转换结束)标志被设置?─?如果设置了 EOCIE,则产生中断。
如果一个注入通道被转换:
─转换数据被储存在 16 位的 ADC_DRJ1 寄存器中
─JEOC(注入转换结束)标志被设置?─?如果设置了 JEOCIE 位,则产生中断。
然后 ADC 停止


连续转换模式:
在连续转换模式中,当前面 ADC 转换一结束马上就启动另一次转换。此模式可通过外部触
发启动或通过设置 ADC_CR2 寄存器上的 ADON 位启动,此时 CONT 位是 1。??
每个转换后:
如果一个规则通道被转换:
─转换数据被储存在 16 位的 ADC_DR 寄存器中
─EOC(转换结束)标志被设置
─如果设置了 EOCIE,则产生中断。
注入通道不能被用于连续转换模式,唯一的例外是当规则通道配置为连续转换后,注入通道
配置为自动转换。


扫描模式:
此模式用来扫描一组模拟通道。
扫描模式可通过设置 ADC_CR1 寄存器的 SCAN 位来选择。一旦这个位被设置,ADC 扫描
所有被 ADC_SQRX 寄存器(对规则通道)或 ADC_JSQR(对注入通道)选中的所有通道。在每个组
的每个通道上执行单次转换。在每个转换结束时,同一组的下一个通道被自动转换。如果设
置了 CONT 位,转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道
继续转换。
如果设置了 DMA 位,在每次 EOC 后,DMA 控制器把规则组通道的转换数据传输到 SRAM
中。而注入通道转换的数据总是存储在 ADC_JDRx 寄存器中。
在以下情况中,ADC_SR 寄存器的 EOC 位将被设置:
在每个规则组序列结束后,如果 EOCS 位被清 0
在每个规则通道转换结束,如果 EOCS 位设置为 1
注入通道转换结束数据总是存放在 ADC_JDRx 寄存器中


注入通道管理:
触发注入
清除 ADC_CR1 寄存器的 JAUTO 位,并且设置 SCAN 位,即可使用触发注入功能。
1.?利用外部触发或通过设置 ADC_CR2 寄存器的 ADON 位,启动一组规则通道的转换。
2.?如果在规则通道转换期间产生一外部注入触发或者 JSWSTART 位被设置,当前转换被
复位,注入通道序列被以单次扫描方式进行转换。
3.?然后,恢复上次被中断的规则组通道转换。如果在注入转换期间产生一规则事件,
注入转换不会被中断,但是规则序列将在注入序列结束后被执行。
注:?当使用触发的注入转换时,必须保证触发事件的间隔长于注入序列。例如:序列长度
为 30 个 ADC 时钟周期(即 2 个具有 3 个时钟间隔采样时间的转换),触发之间最小的间隔必
须是 31 个 ADC 时钟周期。
自动注入
如果设置了 JAUTO 位,在规则组通道之后,注入组通道被自动转换。这可以用来转换
在 ADC_SQRx 和 ADC_JSQR 寄存器中设置的多至 20 个转换序列。
在此模式里,必须禁止注入通道的外部触发。
如果除 JAUTO 位外还设置了 CONT 位,规则通道至注入通道的转换序列被连续执行。


间断模式:
规则组
此模式通过设置 ADC_CR1 寄存器上的 DISCEN 位激活。它可以用来执行一个短序列的 n 次转
换(n<=8),此转换是 ADC_SQRx 寄存器所选择的转换序列的一部分。数值 n 由 ADC_CR1 寄存
器的 DISCNUM[2:0]位给出。
一个外部触发信号可以启动 ADC_SQRx 寄存器中描述的下一轮 n 次转换,直到此序列所
有的转换完成为止。总的序列长度由 ADC_SQR1 寄存器的 L[3:0]定义。
例如:
n=3,被转换的通道?=?0、1、2、3、6、7、9、10
第一次触发:转换的序列为?0、1、2
第二次触发:转换的序列为?3、6、7
第三次触发:转换的序列为?9、10,并产生 EOC 事件
第四次触发:转换的序列?0、1、2
注:?当以间断模式转换一个规则组时,转换序列结束后不自动从头开始。?当所有子组
被转换完成,下一次触发启动第一个子组的转换。在上面的例子中,第四次触发重新转换第
一子组的通道?0、1 和 2

注入组
此模式通过设置 ADC_CR1 寄存器的 JDISCEN 位激活。在一个外部触发事件后,该模式
按通道顺序逐个转换 ADC_JSQR 寄存器中选择的序列。?
一个外部触发信号可以启动 ADC_JSQR 寄存器选择的下一个通道序列的转换,直到序
列中所有的转换完成为止。总的序列长度由 ADC_JSQR 寄存器的 JL[1:0]位定义。
例如:?n=1,被转换的通道?=?1、2、3
第一次触发:通道 1 被转换
第二次触发:通道 2 被转换
第三次触发:通道 3 被转换,并且产生 EOC 和 JEOC 事件
第四次触发:通道 1 被转换

关键字:stm32  adc使用  查询模式 引用地址:stm32的adc使用(借鉴)

上一篇:Stm32固件库中关于NART的误解
下一篇:STM32时钟源

推荐阅读最新更新时间:2026-03-25 10:48

STM32】4—UART串口(查询模式
0 实验预期效果 完成串口数据的接收和发送 1 相关原理图 2 硬件配置 DAPLINK、STM32F407VET6: TXD —— PA10 注意!!!!一定要看清!!!不要接错!!TXD是接PA10!!! RXD —— PA9 注意!!!!一定要看清!!!不要接错!!RXD是接PA9!!! GND —— GND 5V —— 5V 3 软件配置 USART相关知识 USART 简介、功能说明、框图见博客:【STM32】基于STM32F407实现串口通信_Max_Shy的博客-CSDN博客_stm3
[单片机]
【<font color='red'>STM32</font>】4—UART串口(<font color='red'>查询</font><font color='red'>模式</font>)
stm32基础实验2(按键输入—查询模式
一、实验原理 1、实现步骤 (1)使能按键对应IO口时钟。调用函数:RCC_APB2PeriphClockCmd(); (2) 初始化IO模式:上拉/下拉输入。调用函数:GPIO_Init(); (3)扫描IO口电平(库函数/寄存器/位操作)。 读取IO口输入电平三种方式 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);(库函数) GPIOx_IDR:端口输入寄存器(寄存器) PEin(4)-读取GPIOE.4口电平(位操作) Static申明的局部变量,存储在静态存储区。它在函数调用结束之后,不会被释放。它的
[单片机]
<font color='red'>stm32</font>基础实验2(按键输入—<font color='red'>查询</font><font color='red'>模式</font>)
stm32系列--ADC使用
#include adc.h #include delay.h ////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途 //ALIENTEK战舰STM32开发板 //ADC 代码 //正点原子@ALIENTEK //技术论坛:www.openedv.com //修改日期:2012/9/7 //版本:V1.0 //版权所有,盗版必究。 //Copyright(C) 广州市星翼电子科技有限公司 2009-2019 //All rights reser
[单片机]
STM32 ADC使用说明
前言 最近是有一个产品用到了ADC,使用的是STM32L051 芯片,使用 STM32CubeMX 生成的代码,本来以为简简单单,但是在调用 HAL ADC校准函数的时候遇到一个问题有点疑问,度娘一下也没有找到解答,还是经过翻阅了一些资料才得到答案,特此来记录一下。 前言 一、ADC 配置说明 1.1 ADC 采样步骤 二、ADC 校准 2.1 什么是ADC校准? 2.2 为什么 ADC 使用需要校准? 2.2 什么时候使用 ADC 校准? 2.3 ADC 采样每次都需要校准吗? 三、HAL 库校准函数 3.1 单端校准和差分校准 3.2 不同系列的校准函数 3.3 更多的校准模式 结语 一
[单片机]
<font color='red'>STM32</font> <font color='red'>ADC</font> 的<font color='red'>使用</font>说明
11、STM32ADC的原理与使用(内附代码)
一、ADC的原理及定义 Analog-to-Digital Converter的缩写。中文译名:模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。其实就是一个取样、量化、编码的一个过程。 典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。比如电量、光照传感器等常用。 二、模拟信号 模拟信号是指用连续变化的物理量表示的信息,其信号的幅度,或频率,或相位随时间作连续变化,如目前广播的声音信号,或图像信号等。 三、数字信号 数字信号指幅度的取值是离散的,幅值表示被限制在有限个数值之内。 二进制码就是一种数字信号。二进制码受噪声的影响小,易于有数字电路进行处理,所以得到了广泛
[单片机]
11、<font color='red'>STM32</font>的<font color='red'>ADC</font>的原理与<font color='red'>使用</font>(内附代码)
stm32ADC的规则通道和注入通道混合使用
之前完成了规则通道DMA的数据传输了,不过平时在使用ADC的时候可能就会遇到很多情况,不可能就这样简单的按规则通道来采样,DMA存储,使用数据的;可能有时候会需要立刻采样,那样我们就需要利用到注入通道了。文档关于注入通道的解释: 1、利用外部触发或通过设置ADC_CR2寄存器的ADON位,启动一组规则通道的转换。 2、如果在规则通道转换期间产生一外部注入触发,当前转换被复位,注入通道序列被以单次扫描方式进行转换。 3、然后,恢复上次被中断的规则组通道转换。如果在注入转换期间产生一规则事件,注入转换不会被中断,但是规则序列将在注入序列结束后被执行。 将变阻器的那路ADC设置为注入通道: 1 ADC_InjectedSeq
[单片机]
STM32ADC的原理与使用
一、ADC的原理及定义 Analog-to-Digital Converter的缩写。中文译名:模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。其实就是一个取样、量化、编码的一个过程。 典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。比如电量、光照传感器等常用。 ---------------------------------------------------------------------------------------------------------------------------------------------------------
[单片机]
<font color='red'>STM32</font>的<font color='red'>ADC</font>的原理与<font color='red'>使用</font>
STM32 使用DMA处理ADC 学习笔记!!
ADC: 1.STM32内部的ADC模块有三个ADC1,ADC2,ADC3,他们彼此独立,所以可以进行同步采样。 2ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生,要在RCC_CFGR配置,再ADC自己的寄存器中在没有时钟分频的配置位。 3.ADC转换时间: STM32F103xx增强型产,时钟为56MHz时为1μ s( 时钟为72MHz为1.17 μ s) 4.ADC的转换精度默认设置为12位,输入范围: ADC输入范围:V REF-≤ VIN ≤ VREF+ 5.共有18个通道,其中外部16个通道,内部两个通道,内部温度传感器连接在ADC1_IN16,内部参考电压V REFINT连接在ADC1_IN17 6.转
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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