单通道ADC采集实验(单次非扫描软件触发)
实验简要(F1为例)
1、功能描述
通过ADC1通道1(PA1)采集电位器的电压,并显示ADC转换的数字量及换算后的电压值
2、确定最小刻度
VREF+ = 3.3V 0V≤VIN≤3.3V 最小刻度 = 3.3 / 4096
F4/F7/H7系列还需要考虑ADC分辨率
3、确定转换时间
采样时间239.5个ADC时钟周期为例,可以得到转换时间为21us
4、模式组合
单次转换模式、不使用扫描模式
ADC寄存器介绍(F1为例)
ADC控制寄存器 1(ADC_CR1)
ADC控制寄存器 2(ADC_CR2)
ADC控制寄存器 2(ADC_CR2)
ADC采样时间寄存器1(ADC_SMPR1)
ADC采样时间寄存器2(ADC_SMPR2)
ADC规则序列寄存器 1(ADC_SQR1)
ADC规则序列寄存器 2(ADC_SQR2)

ADC规则序列寄存器 3(ADC_SQR3)
ADC规则数据寄存器 (ADC_DR)
单通道ADC采集实验配置步骤
相关HAL库函数介绍
函数 | 主要寄存器 | 主要功能 |
HAL_ADC_Init() | CR1、CR2 | 配置ADC工作参数 |
HAL_ADCEx_Calibration_Start() | CR2 | ADC校准 |
HAL_ADC_MspInit() | 无 | 存放NVIC、CLOCK、GPIO初始化代码 |
HAL_RCCEx_PeriphCLKConfig() | RCC_CFGR | 设置扩展外设时钟,如:ADC、RTC等 |
HAL_ADC_ConfigChannel() | SQRx、SMPRx | 配置ADC相应通道的相关参数 |
HAL_ADC_Start() | CR2 | 启动A/D转换 |
HAL_ADC_PollForConversion() | SR | 等待规则通道转换完成 |
HAL_ADC_GetValue() | DR | 获取规则通道A/D转换结果 |
关键结构体介绍(F1为例)
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;
STM32CubeMX配置
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){Error_Handler();}