Day23:ADC 原理与配置

ADC 功能:

模数转换器,将模拟电压 (0-3.3V) 转换为数字量 (12 位精度,0-4095)

转换过程:采样→保持→量化→编码

STM32 ADC 特性:

12 位分辨率,转换时间约 1μs (最高频率)

多通道 (最多 16 路),可扫描模式顺序转换

单次 / 连续转换模式

触发源:软件触发、定时器触发、外部触发

ADC 配置步骤:

使能 ADC 和 GPIO 时钟

配置 GPIO 为模拟输入 (如 PA0)

配置 ADC 参数 (分辨率、采样时间、转换模式)

使能 ADC 并校准

启动转换

代码示例:(单通道 ADC 采样)

// ADC初始化

ADC_HandleTypeDef hadc1;

void ADC1_Init(void){

GPIO_InitTypeDef GPIO_InitStruct;

// 使能GPIOA和ADC1时钟

__HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_ADC1_CLK_ENABLE();

// 配置PA0为模拟输入

GPIO_InitStruct.Pin = GPIO_PIN_0;

GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; // 模拟输入模式

GPIO_InitStruct.Pull = GPIO_NOPULL;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

// 配置ADC参数

hadc1.Instance = ADC1;

hadc1.Init.Resolution = ADC_RESOLUTION_12B; // 12位分辨率

hadc1.Init.ScanConvMode = DISABLE; // 单通道,不扫描

hadc1.Init.ContinuousConvMode = ENABLE; // 连续转换

hadc1.Init.DiscontinuousConvMode = DISABLE;

hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; // 软件触发

hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; // 右对齐

hadc1.Init.NbrOfConversion = 1; // 转换通道数

HAL_ADC_Init(&hadc1);

// 配置通道0(PA0)

ADC_ChannelConfTypeDef sConfig;

sConfig.Channel = ADC_CHANNEL_0;

sConfig.Rank = 1; // 转换顺序

sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; // 采样时间

HAL_ADC_ConfigChannel(&hadc1, &sConfig);

HAL_ADC_Calibrate(&hadc1); // ADC校准

HAL_ADC_Start(&hadc1); // 启动ADC

}

// 主函数

int main(){

ADC1_Init();

uint32_t adc_value;

while(1){

HAL_ADC_PollForConversion(&hadc1, 100); // 等待转换完成

adc_value = HAL_ADC_GetValue(&hadc1); // 获取转换值

// 计算电压:adc_value × 3.3V / 4096

float voltage = (float)adc_value * 3.3 / 4096;

// 打印结果

}

}

相关推荐
SmartRadio9 分钟前
STM32WLE5 LoRa 射频匹配优化(V1.1 版)
stm32·单片机·嵌入式硬件·阻抗匹配
wearegogog1231 小时前
三电平SVPWM逆变器仿真指南
单片机·算法
笨笨饿1 小时前
74_SysTick滴答定时器中断
c语言·开发语言·人工智能·单片机·嵌入式硬件·算法·学习方法
chao1898442 小时前
基于 STM32 的 Modbus RTU 串口通讯程序
stm32·单片机·嵌入式硬件
fie88893 小时前
基于 STC15F104E 的 T12 白光烙铁控制器方案
stm32·单片机
yuan199973 小时前
基于 STM32 的工程级扫地机器人方案
stm32·嵌入式硬件·机器人
绿竹-大地4 小时前
韦东山开发板imx6ull移植WS1-CBS-Kit
嵌入式硬件·wifi
qq_411262424 小时前
wifi自适应
stm32·单片机·嵌入式硬件
洋九八4 小时前
STM32 (NVIC)中断
stm32·单片机·嵌入式硬件
12.=0.5 小时前
【stm32_9.2】FreeRTOS的任务管理:任务策略,调度器启用,任务创建、删除、挂起、恢复
c语言·stm32·单片机·嵌入式硬件