ADC简介
- ADC(Analog-Digital Converter)模拟-数字转换器
- ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁
- 12位逐次逼近型ADC,1us转换时间
- 输入电压范围:0-3.3V,转换结果范围:0-4095
- 18个输入通道,可测量16个外部和2个内部信号源
- 规则组和注入组两个转换单元
- 模拟看门狗自动监测输入电压范围
- STM32F103C8T6 ADC资源:ADC1、ADC2,10个外部输入通道



| 通道 | ADC1 | ADC2 | ADC3 |
|---|---|---|---|
| 通道0 | PA0 | PA0 | PA0 |
| 通道1 | PA1 | PA1 | PA1 |
| 通道2 | PA2 | PA2 | PA2 |
| 通道3 | PA3 | PA3 | PA3 |
| 通道4 | PA4 | PA4 | PF6 |
| 通道5 | PA5 | PA5 | PF7 |
| 通道6 | PA6 | PA6 | PF8 |
| 通道7 | PA7 | PA7 | PF9 |
| 通道8 | PB0 | PB0 | PF10 |
| 通道9 | PB1 | PB1 | |
| 通道10 | PC0 | PC0 | PC0 |
| 通道11 | PC1 | PC1 | PC1 |
| 通道12 | PC2 | PC2 | PC2 |
| 通道13 | PC3 | PC3 | PC3 |
| 通道14 | PC4 | PC4 | |
| 通道15 | PC5 | PC5 | |
| 通道16 | 温度传感器 | ||
| 通道17 | 内部参考电压 |
转换模式
单次转换,非扫描模式

单次转换,非扫描模式

连续转换,非扫描模式

连续转换,非扫描模式

数据对齐

触发控制

- AD转换的步骤:采样,保持,量化,编码
- STM32 ADC的总转换时间为: $$ T_{CONV} = T_{sampling} + 12.5T_{ADC} $$
- 例如:当ADCCLK=14MHz,采样时间为1.5个ADC周期 $$ T_{CONV} = (1.5 + 12.5)T_{ADC} = 14T_{ADC} = 1μs $$
代码
|
|
RCC_ADCCLKConfig函数用于配置ADC时钟分频(ADC最高支持14M时钟)GPIO_InitTypeDef为ADC配置结构体ADC_Mode为ADC模式ADC_DataAlign为数据对齐模式ADC_ExternalTrigConv为外部触发模式ADC_ContinuousConvMode为连续转换使能ADC_ScanConvMode为扫描模式使能ADC_NbrOfChannel为ADC通道数
ADC_ResetCalibration函数用于复位ADC校准寄存器ADC_GetResetCalibrationStatus函数用于检查ADC校准寄存器状态ADC_StartCalibration函数用于校准ADCADC_GetCalibrationStatus函数用于检查ADC校准ADC_RegularChannelConfig函数用于配置规则组通道ADC_Channel为ADC通道:ADC_Channel_xADC_SampleTime为采样时间
ADC_GetFlagStatus函数用于获取ADC标志位ADC_GetConversionValue函数用于获取规则组结果ADC_SoftwareStartConvCmd函数用于软件触发ADC
| RCC_PCLK2 | 值 | 描述 |
|---|---|---|
| RCC_PCLK2_Div2 | ((uint32_t)0x00000000) | 二分频 |
| RCC_PCLK2_Div4 | ((uint32_t)0x00004000) | 四分频 |
| RCC_PCLK2_Div6 | ((uint32_t)0x00008000) | 六分频 |
| RCC_PCLK2_Div8 | ((uint32_t)0x0000C000) | 八分频 |
| ADC_Mode | 值 | 描述 |
|---|---|---|
| ADC_Mode_Independent | ((uint32_t)0x00000000) | 独立模式 |
| ADC_Mode_RegInjecSimult | ((uint32_t)0x00010000) | 混合的同步规则+注入同步模式 |
| ADC_Mode_RegSimult_AlterTrig | ((uint32_t)0x00020000) | 混合的同步规则+交替触发模式 |
| ADC_Mode_InjecSimult_FastInterl | ((uint32_t)0x00030000) | 混合同步注入+快速交叉模式 |
| ADC_Mode_InjecSimult_SlowInterl | ((uint32_t)0x00040000) | 混合同步注入+慢速交叉模式 |
| ADC_Mode_InjecSimult | ((uint32_t)0x00050000) | 注入同步模式 |
| ADC_Mode_RegSimult | ((uint32_t)0x00060000) | 规则同步模式 |
| ADC_Mode_FastInterl | ((uint32_t)0x00070000) | 快速交叉模式 |
| ADC_Mode_SlowInterl | ((uint32_t)0x00080000) | 慢速交叉模式 |
| ADC_Mode_AlterTrig | ((uint32_t)0x00090000) | 交替触发模式 |
更多ADC_Mode的相关内容:STM32F10xxx参考手册(中文).pdf 页码163/手册11.9
| ADC_DataAlign | 值 | 描述 |
|---|---|---|
| ADC_DataAlign_Right | ((uint32_t)0x00000000) | 右对齐 |
| ADC_DataAlign_Left | ((uint32_t)0x00000800) | 左对齐 |
| ADC_ExternalTrigConv | 值 | 描述 |
|---|---|---|
| ADC_ExternalTrigConv_T1_CC1 | ((uint32_t)0x00000000) | 内部信号 |
| ADC_ExternalTrigConv_T1_CC2 | ((uint32_t)0x00020000) | 内部信号 |
| ADC_ExternalTrigConv_T2_CC2 | ((uint32_t)0x00060000) | 内部信号 |
| ADC_ExternalTrigConv_T3_TRGO | ((uint32_t)0x00080000) | 内部信号 |
| ADC_ExternalTrigConv_T4_CC4 | ((uint32_t)0x000A0000) | 内部信号 |
| ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO | ((uint32_t)0x000C0000) | 外部引脚/内部信号 |
| ADC_ExternalTrigConv_T1_CC3 | ((uint32_t)0x00040000) | 内部信号 |
| ADC_ExternalTrigConv_None | ((uint32_t)0x000E0000) | 软件触发 |
| ADC_ExternalTrigConv_T3_CC1 | ((uint32_t)0x00000000) | 内部信号 |
| ADC_ExternalTrigConv_T2_CC3 | ((uint32_t)0x00020000) | 内部信号 |
| ADC_ExternalTrigConv_T8_CC1 | ((uint32_t)0x00060000) | 内部信号 |
| ADC_ExternalTrigConv_T8_TRGO | ((uint32_t)0x00080000) | 内部信号 |
| ADC_ExternalTrigConv_T5_CC1 | ((uint32_t)0x000A0000) | 内部信号 |
| ADC_ExternalTrigConv_T5_CC3 | ((uint32_t)0x000C0000) | 内部信号 |
前六个与后六个分别对应ADC12和ADC3,第七、八个可用于ADC123 更多外部触发相关内容:STM32F10xxx参考手册(中文).pdf 页码162/手册11.7
| ADC_SampleTime | 值 | 描述 |
|---|---|---|
| ADC_SampleTime_1Cycles5 | ((uint8_t)0x00) | Sample time equal to 1.5 cycles |
| ADC_SampleTime_7Cycles5 | ((uint8_t)0x01) | Sample time equal to 7.5 cycles |
| ADC_SampleTime_13Cycles5 | ((uint8_t)0x02) | Sample time equal to 13.5 cycles |
| ADC_SampleTime_28Cycles5 | ((uint8_t)0x03) | Sample time equal to 28.5 cycles |
| ADC_SampleTime_41Cycles5 | ((uint8_t)0x04) | Sample time equal to 41.5 cycles |
| ADC_SampleTime_55Cycles5 | ((uint8_t)0x05) | Sample time equal to 55.5 cycles |
| ADC_SampleTime_71Cycles5 | ((uint8_t)0x06) | Sample time equal to 71.5 cycles |
| ADC_SampleTime_239Cycles5 | ((uint8_t)0x07) | Sample time equal to 239.5 cycles |