stm32内部集成的ADC介绍
一、参考电压的范围为
/*2.4V≦ V ≦3.6V
所以它的输入模拟电压范围0 <= V <=V*/
二、需要测量负电压或测量的电压信号超出范围时,要先经过运算电路进行平移或利用电阻分压。
三、我采用的是51单片机上面的10k的电阻来模拟输入
四、规则通道和注入通道
/*所谓规则,那么就是按常理出牌的,我们可以称之为正常的通道,那么与之对应的是注入通道,就是
在规则通道正在转换的时候是可以被注入通道打断,转而去执行注入通道转换的,当注入通道转换完
成之后,才继续去进行规则通道里面的转换,TM32ADC的规则通道组最多包含16 个转换,而注入通道
组最多包含 4 个通道*/
五、初始化ADC这是必须的,比东有一个结构体来初始化这个ADC
1、首先确定从哪里输入我们的模拟量呢?
这里涉及到ADC通道的知识,每个ADC通道都对应着一个GPIO引脚端口
PC0对应的默认复用功能是ADC1、ADC2、ADC3的通道10
所以最开始应该配置GPIO,现在可以来做个猜测
2、配置GPIO
GPIO_Mode = GPIO_Mode_AIN
GPIO_Pin = GPIO_Pin_10
GPIO_Speed = GPIO_Speed_50MHz
以上就是模拟输入
六、然后是配置ADC,也就是初始化ADC了,
找到这样一个结构体
ADC_InitTypeDef
结构体成员有{
FunctionalState ADC_ContinuousConvMode
uint32_t ADC_DataAlign
uint32_t ADC_ExternalTrigConv
uint32_t ADC_Mode
uint8_t ADC_NbrOfChannel
FunctionalState ADC_ScanConvMode
}
1、ADC_ContinuousConvMode的取值有
Specifies whether the conversion is performed in Continuous or Single mode.
This parameter can be set to ENABLE or DISABLE
此参数用来配置是否开启循环采集ENABLE or DISABLE
2、ADC_DataAlign明显意思是数据对齐,它的取值有
#define ADC_DataAlign_Left ((uint32_t)0x00000800)
#define ADC_DataAlign_Right ((uint32_t)0x00000000)
#define IS_ADC_DATA_ALIGN(ALIGN)
左对齐,右对齐。。
3、ADC_ExternalTrigConv外部中断触发方式?它的取值有
#define ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO ((uint32_t)0x000C0000)
#define ADC_ExternalTrigConv_None ((uint32_t)0x000E0000)
#define ADC_ExternalTrigConv_T1_CC1 ((uint32_t)0x00000000)
#define ADC_ExternalTrigConv_T1_CC2 ((uint32_t)0x00020000)
#define ADC_ExternalTrigConv_T1_CC3 ((uint32_t)0x00040000)
#define ADC_ExternalTrigConv_T2_CC2 ((uint32_t)0x00060000)
#define ADC_ExternalTrigConv_T2_CC3 ((uint32_t)0x00020000)
#define ADC_ExternalTrigConv_T3_CC1 ((uint32_t)0x00000000)
#define ADC_ExternalTrigConv_T3_TRGO ((uint32_t)0x00080000)
#define ADC_ExternalTrigConv_T4_CC4 ((uint32_t)0x000A0000)
#define ADC_ExternalTrigConv_T5_CC1 ((uint32_t)0x000A0000)
#define ADC_ExternalTrigConv_T5_CC3 ((uint32_t)0x000C0000)
#define ADC_ExternalTrigConv_T8_CC1 ((uint32_t)0x00060000)
#define ADC_ExternalTrigConv_T8_TRGO ((uint32_t)0x00080000)
触发方式很丰富,当然 ADC_ExternalTrigConv_None这就表示不采用外部中断方式触发(那么软件触发)
4、ADC_Mode ADC的模式?
Configures the ADC to operate in independent or dual mode.
This parameter can be a value of ADC_mode
它的取值有
#define ADC_Mode_AlterTrig ((uint32_t)0x00090000)
#define ADC_Mode_FastInterl ((uint32_t)0x00070000)
#define ADC_Mode_Independent ((uint32_t)0x00000000)
#define ADC_Mode_InjecSimult ((uint32_t)0x00050000)
#define ADC_Mode_InjecSimult_FastInterl ((uint32_t)0x00030000)
#define ADC_Mode_InjecSimult_SlowInterl ((uint32_t)0x00040000)
#define ADC_Mode_RegInjecSimult ((uint32_t)0x00010000)
#define ADC_Mode_RegSimult ((uint32_t)0x00060000)
#define ADC_Mode_RegSimult_AlterTrig ((uint32_t)0x00020000)
#define ADC_Mode_SlowInterl ((uint32_t)0x00080000)
貌似是有注入组、和规则组的概念,有些单词不是很熟悉,没关系那就先这样吧!用到了再来
5、ADC_NbrOfChannel采样通道?
明显一般采用的是是16个规则通道,那取值就是1--16
Specifies the number of ADC channels that will be converted using the sequencer for regular
channel group.This parameter must range from 1 to 16
6、ADC_ScanConvMode,字面意思不是很懂,看手册
Specifies whether the conversion is performed in Scan (multichannels) or Single (one channel)
mode. This parameter can be set to ENABLE or DISABLE
意思是当有多个通道的时候,使用扫描的方式,反之只有单个通道的是那么就是选择单通道了
那么取值就是ENABLE or DISABLE
至此结构成员分析完毕,下面来猜测一下,应该怎样赋值,声明:单通道采集,右对齐(方便存数据) |