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;

// 打印结果

}

}

相关推荐
qq_283720053 小时前
STM32F103 GPIO 端口配置寄存器 CRL / CRH 详解
stm32·单片机·嵌入式硬件
振南的单片机世界3 小时前
NVIC:Cortex-M内核的“中断CPU”
stm32·单片机·嵌入式硬件
KaifuZeng4 小时前
运算放大器学习笔记-虚短和虚断
单片机·嵌入式硬件·运算放大器
张海森-1688204 小时前
cv610的spi0上适配tmi8150b电机ic
单片机
硅农程序猿4 小时前
芯片设计中的门级仿真(GLS):从零延迟验证到 SDF 时序反标
嵌入式硬件·硬件架构·risc-v·芯片
智购科技智能售货柜5 小时前
自动售货机主控方案怎么选?——单片机、树莓派、ESP32的实战对比~YH
单片机·嵌入式硬件
米饭不加菜6 小时前
电平转换电路
经验分享·嵌入式硬件·硬件工程
老k一步步来19 小时前
STM32 HAL库CAN通信核心函数详解,参数以及作用
stm32·单片机·嵌入式硬件
gwf21620 小时前
SSD读写速度深度解析:顺序读写vs随机读写、IOPS、延迟,你的硬盘性能到底怎么看?
git·嵌入式硬件·缓存·github·智能硬件