STM32hal库学习(F1)-ADC

ADC简介

ADC:

模数转换器

STM32hal库学习(F1)-ADC_第1张图片

常见ADC类型

ADC电路类型

优点

缺点

并联比较型

转换速度最快

成本高、功耗高,分辨率低

逐次逼近型

结构简单,功耗低

转换速度较慢

并联比较型

STM32hal库学习(F1)-ADC_第2张图片

分压部分+比较部分+编码部分

逐次逼近型

STM32hal库学习(F1)-ADC_第3张图片

控制电路+数码寄存器+D/A转换器+电压比较

特点:分辨率和采样速度相互矛盾,

           分辨率越高,采样速率越低

ADC的特性参数

分辨率(刻度划分)

表示ADC能辨别的最小模拟量,用二进制位数表示,比如:8、10、12、16位

转换时间

表示完成一次A/D转换所需要的时间,转换时间越短,采样速率越高

精度(物理量的精准程度)

最小刻度基础上叠加各种误差的参数,精度受ADC性能、温度和气压等影响

量化误差

用数字量近似表示模拟量,采用四舍五入原则,此过程产生的误差为量化误差

STM32各系列ADC的主要特征

主要特性

F1

F4

F7

H7

ADC类型

逐次逼近型

分辨率

12

6/8/10/12

6/8/10/12

8/10/12/14/16

ADC时钟频率

14MHzmax

36MHzmax

采样时间

采样时间越长, 转换结果相对越准确, 但是转换速度就越慢

转换时间

ADC时钟频率、分辨率和采样时间等有关

供电电压

VSSA 0VVDDA 2.4V~3.6V(全速运行)

参考电压

VREF 0VVREF+一般为3.3V

输入电压

VREFVINVREF+

ADC工作原理

F1结构框图

STM32hal库学习(F1)-ADC_第4张图片

F4结构框图

STM32hal库学习(F1)-ADC_第5张图片

F1输入通道

ADC1

IO

ADC2

IO

ADC3

IO

通道0

PA0

通道0

PA0

通道0

PA0

通道1

PA1

通道1

PA1

通道1

PA1

通道2

PA2

通道2

PA2

通道2

PA2

通道3

PA3

通道3

PA3

通道3

PA3

通道4

PA4

通道4

PA4

通道4

PF6

通道5

PA5

通道5

PA5

通道5

PF7

通道6

PA6

通道6

PA6

通道6

PF8

通道7

PA7

通道7

PA7

通道7

PF9

通道8

PB0

通道8

PB0

通道8

PF10

通道9

PB1

通道9

PB1

通道9

连接内部VSS

通道10

PC0

通道10

PC0

通道10

PC0

通道11

PC1

通道11

PC1

通道11

PC1

通道12

PC2

通道12

PC2

通道12

PC2

通道13

PC3

通道13

PC3

通道13

PC3

通道14

PC4

通道14

PC4

通道14

连接内部VSS

通道15

PC5

通道15

PC5

通道15

连接内部VSS

通道16

连接内部温度传感器

通道16

连接内部VSS

通道16

连接内部VSS

通道17

连接内部Vrefint

通道17

连接内部VSS

通道17

连接内部VSS

F1转换序列及其优先级

STM32hal库学习(F1)-ADC_第6张图片

F1规则序列

规则序列寄存器控制关系汇总

寄存器

寄存器位

功能

取值

SQR3

SQ1 [ 4 : 0 ]

设置第1个转换的通道

通道0~17

SQ2 [ 4 : 0 ]

设置第2个转换的通道

通道0~17

SQ3 [ 4 : 0 ]

设置第3个转换的通道

通道0~17

SQ4 [ 4 : 0 ]

设置第4个转换的通道

通道0~17

SQ5 [ 4 : 0 ]

设置第5个转换的通道

通道0~17

SQ6 [ 4 : 0 ]

设置第6个转换的通道

通道0~17

SQR2

SQ7 [ 4 : 0 ]

设置第7个转换的通道

通道0~17

SQ8 [ 4 : 0 ]

设置第8个转换的通道

通道0~17

SQ9 [ 4 : 0 ]

设置第9个转换的通道

通道0~17

SQ10 [ 4 : 0 ]

设置第10个转换的通道

通道0~17

SQ11 [ 4 : 0 ]

设置第11个转换的通道

通道0~17

SQ12 [ 4 : 0 ]

设置第12个转换的通道

通道0~17

SQR1

SQ13 [ 4 : 0 ]

设置第13个转换的通道

通道0~17

SQ14 [ 4 : 0 ]

设置第14个转换的通道

通道0~17

SQ15 [ 4 : 0 ]

设置第15个转换的通道

通道0~17

SQ16 [ 4 : 0 ]

设置第16个转换的通道

通道0~17

SQL [ 3 : 0 ]

设置规则序列要转换的通道数

0~15

F1注入序列

注入序列寄存器控制关系汇总

寄存器

寄存器位

功能

取值

JSQR

JSQ1 [ 4 : 0 ]

设置第1个转换的通道

通道0~17

JSQ2 [ 4 : 0 ]

设置第2个转换的通道

通道0~17

JSQ3 [ 4 : 0 ]

设置第3个转换的通道

通道0~17

JSQ4 [ 4 : 0 ]

设置第4个转换的通道

通道0~17

JL [ 1 : 0 ]

设置注入序列要转换的通道数

0~3

注入序列的转换顺序是从JSQx[ 4 : 0 ]x=4-JL[1:0])开始

F1触发源

ADON位触发转换(仅F1系列拥有)

ADC_CR2寄存器的ADON位为1时,再单独ADON位写1,只能启动规则组转换

外部触发

STM32hal库学习(F1)-ADC_第7张图片

F4/F7触发源

STM32hal库学习(F1)-ADC_第8张图片

F1转换时间

STM32hal库学习(F1)-ADC_第9张图片

STM32hal库学习(F1)-ADC_第10张图片F4/F7转换时间

STM32hal库学习(F1)-ADC_第11张图片STM32hal库学习(F1)-ADC_第12张图片F1数据寄存器

STM32hal库学习(F1)-ADC_第13张图片

F4/F7数据寄存器

STM32hal库学习(F1)-ADC_第14张图片

F1/F4/F7中断

STM32hal库学习(F1)-ADC_第15张图片转换模式

CONT

0

1

转换模式

单次转换模式

连续转换模式

转换组/转换模式

单次转换模式(只触发一次转换)

连续转换模式(自动触发下一次转换)

注意:只有规则组才能触发该模式

规则组

转换结果被储存在ADC_DR

EOC(转换结束)标志位被置1

如果设置了EOCIE位,则产生中断

然后ADC停止

转换结果被储存在ADC_DR

EOC(转换结束)标志位被置1

如果设置了EOCIE位,则产生中断

注入组

转换结果被储存在ADC_DRJx

JEOC(转换结束)标志位被置1

如果设置了JEOCIE位,则产生中断

然后ADC停止

转换结果被储存在ADC_DRJx

JEOC(转换结束)标志位被置1

如果设置了JEOCIE位,则产生中断

自动注入:将JAUTO位置1

扫描模式

SCAN

0

1

扫描模式

关闭扫描模式

使用扫描模式

关闭扫描模式

使用扫描模式

ADC只转换ADC_SQRx

ADC_JSQR选中的第一个通道进行转换

ADC会扫描所有被ADC_SQRx

ADC_JSQR选中的所有通道

模式组合

单次转换模式(不扫描)

只转换一个通道,而且是一次,需等待下一次触发

单次转换模式(扫描)

ADC_SQRx ADC_JSQR 选中的所有通道都转换一次

连续转换模式(不扫描)

只会转换一个通道,转换完后会自动执行下一次转换

连续转换模式(扫描)

ADC_SQRx ADC_JSQR 选中的所有通道都转换一次,并自动进入下一轮转换

具体例子

单次转换模式(不扫描)

使用ADC单通道,并要求进行一次转换

单次转换模式(扫描)

使用ADC多通道,并要求所有通道都转换一次就停止

连续转换模式(不扫描)

使用ADC单通道,并要求对该通道连续转换

连续转换模式(扫描)

使用ADC多通道,并要求所有通道都转换一次后,自动启动下一轮转换

ADC相关寄存器

ADC_CR1(ADC控制寄存器1)

STM32hal库学习(F1)-ADC_第16张图片

ADC_CR2(ADC控制寄存器2)

STM32hal库学习(F1)-ADC_第17张图片

STM32hal库学习(F1)-ADC_第18张图片

ADC_SMPR1(ADC采样时间寄存器1)

STM32hal库学习(F1)-ADC_第19张图片

ADC_SMPR2(ADC采样时间寄存器2)

STM32hal库学习(F1)-ADC_第20张图片

ADC_SQR1(ADC规则序列寄存器1)

STM32hal库学习(F1)-ADC_第21张图片

ADC_SQR2(ADC规则序列寄存器2)

STM32hal库学习(F1)-ADC_第22张图片

ADC_DR(ADC规则数据寄存器)

STM32hal库学习(F1)-ADC_第23张图片

配置步骤

单通道ADC采集配置步骤

STM32hal库学习(F1)-ADC_第24张图片

HAL库函数介绍

函数

主要寄存器

主要功能

HAL_ADC_Init()

CR1CR2

配置ADC工作参数

HAL_ADCEx_Calibration_Start()

CR2

ADC校准

HAL_ADC_MspInit()

存放NVICCLOCKGPIO初始化代码

HAL_RCCEx_PeriphCLKConfig()

RCC_CFGR

设置扩展外设时钟,如:ADCRTC

HAL_ADC_ConfigChannel()

SQRxSMPRx

配置ADC相应通道的相关参数

HAL_ADC_Start()

CR2

启动A/D转换

HAL_ADC_PollForConversion()

SR

等待规则通道转换完成

HAL_ADC_GetValue()

DR

获取规则通道A/D转换结果

//相关结构体
typedef struct 
{ 
    ADC_TypeDef *Instance; 			/* ADC 寄存器基地址 */ 
	ADC_InitTypeDef Init; 		    /* ADC 参数初始化结构体变量 */ 
	DMA_HandleTypeDef *DMA_Handle; 	/* DMA 配置结构体 */
	…… 
} ADC_HandleTypeDef;

typedef struct
 { 
	uint32_t DataAlign; 					/* 设置数据的对齐方式 */ 
	uint32_t ScanConvMode; 				    /* 扫描模式 */ 
   	FunctionalState ContinuousConvMode; 	/* 开启单次转换模式或者连续转换模式 */ 	                
    uint32_t NbrOfConversion; 				/* 设置转换通道数目 */ 
	FunctionalState DiscontinuousConvMode; 	/* 是否使用规则通道组间断模式 */ 
	uint32_t NbrOfDiscConversion; 			/* 配置间断模式的规则通道个数 */ 
	uint32_t ExternalTrigConv; 				/* ADC 外部触发源选择 */ 
} ADC_InitTypeDef;

typedef struct 
{ 
	uint32_t Channel; 		/* ADC 转换通道 */ 
	uint32_t Rank; 			/* ADC 转换顺序 */ 
	uint32_t SamplingTime; 	/* ADC 采样周期 */ 
}  ADC_ChannelConfTypeDef;

单通道ADC(DMA读取)采集配置步骤

STM32hal库学习(F1)-ADC_第25张图片

HAL库函数介绍

函数

主要寄存器

主要功能

HAL_ADC_Init()

CR1CR2

配置ADC工作参数

HAL_ADCEx_Calibration_Start()

CR2

ADC校准

HAL_ADC_MspInit()

存放NVICCLOCKGPIO初始化代码

HAL_RCCEx_PeriphCLKConfig()

RCC_CFGR

设置扩展外设时钟,如:ADCRTC

HAL_ADC_ConfigChannel()

SQRxSMPRx

配置ADC相应通道的相关参数

HAL_DMA_Start_IT()

CCRx

启动DMA、开启传输完成中断

HAL_ADC_Start_DMA()

CR2

触发ADC转换、使用DMA传输数据

//相关结构体
typedef struct 
{ 
	uint32_t Direction; 			/* 传输方向 */ 
	uint32_t PeriphInc; 			/* 外设(非)增量模式 */ 
	uint32_t MemInc; 				/* 存储器(非)增量模式 */ 
	uint32_t PeriphDataAlignment; 	/* 外设数据宽度 */ 
	uint32_t MemDataAlignment; 		/* 存储器数据宽度 */ 
	uint32_t Mode; 					/* 操作模式 */ 
	uint32_t Priority; 				/* DMA通道优先级 */ 
}DMA_InitTypeDef; 

你可能感兴趣的:(stm32,学习,嵌入式硬件)