HAL库,配置adc基本流程

1. 初始化阶段---cubemx
(1) GPIO初始化

函数HAL_GPIO_Init()
作用 :配置ADC引脚为模拟输入模式。
代码示例

cs 复制代码
// 使能GPIOA时钟
__HAL_RCC_GPIOA_CLK_ENABLE();

// 配置PA1为模拟输入
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;  // 必须为模拟模式
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

(2) ADC基础配置---cubemx

函数HAL_ADC_Init()
作用 :初始化ADC模块,设置分辨率、数据对齐方式、扫描模式等。
代码示例

cs 复制代码
ADC_HandleTypeDef hadc1;  // 定义ADC句柄

hadc1.Instance = ADC1;    // 使用ADC1
hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;    // 禁用多通道扫描
hadc1.Init.ContinuousConvMode = DISABLE;       // 单次转换模式
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;    // 数据右对齐
hadc1.Init.NbrOfConversion = 1;                // 转换1个通道
HAL_ADC_Init(&hadc1);                          // 初始化ADC

(3) ADC校准(可选但推荐)

函数HAL_ADCEx_Calibration_Start()
作用 :校准ADC,减少转换误差。
代码示例

cs 复制代码
HAL_ADCEx_Calibration_Start(&hadc1);  // 执行ADC校准

(4) 配置ADC通道---cubemx

函数HAL_ADC_ConfigChannel()
作用 :设置ADC通道的采样时间、转换顺序等。
代码示例

cs 复制代码
ADC_ChannelConfTypeDef sConfig = {0};
sConfig.Channel = ADC_CHANNEL_1;          // 使用通道1(对应PA1)
sConfig.Rank = ADC_REGULAR_RANK_1;        // 转换序列中的第1个通道
sConfig.SamplingTime = ADC_SAMPLETIME_55CYCLES_5;  // 采样时间55.5周期
HAL_ADC_ConfigChannel(&hadc1, &sConfig);  // 配置通道

2. 启动转换阶段
(5) 启动ADC转换

函数HAL_ADC_Start()
作用 :启动ADC转换(单次模式需手动触发)。
代码示例

cs 复制代码
HAL_ADC_Start(&hadc1);  // 启动ADC转换

(6) 等待转换完成

函数HAL_ADC_PollForConversion()
作用 :阻塞等待ADC转换完成。
代码示例

cs 复制代码
// 等待转换完成,超时时间100ms
if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK) {
    // 转换成功
}

3. 读取结果阶段
(7) 获取ADC值

函数HAL_ADC_GetValue()
作用 :读取ADC转换结果(12位值,范围0~4095)。
代码示例

cs 复制代码
uint32_t adc_value = HAL_ADC_GetValue(&hadc1);  // 读取ADC值
关键函数总结
函数 作用
HAL_ADC_Init() 初始化ADC模块(设置分辨率、对齐方式等)
HAL_ADC_ConfigChannel() 配置ADC通道(选择通道、设置采样时间)
HAL_ADCEx_Calibration_Start() 校准ADC,提高精度(需在初始化后调用)
HAL_ADC_Start() 启动ADC转换(单次模式需每次手动调用)
HAL_ADC_PollForConversion() 等待转换完成(阻塞方式)
HAL_ADC_GetValue() 读取ADC转换结果
相关推荐
2CM_Embed25 分钟前
Altium Designer 原理图与 PCB 快速相互定位:Cross Probe 交叉探针
嵌入式硬件·pcb·altium designer·c2000
恒锐丰-罗生2 小时前
宽压大电流同步降压优选|CN3906 DC-DC 电源芯片,车载 / 工控 / IoT 全能供电方案
嵌入式硬件·硬件工程
happygrilclh5 小时前
STM32,串口单字节中断接受,每次上电后,会收到一个0x00的解决办法。
单片机·嵌入式硬件
智闲电子设计6 小时前
STM32 独立看门狗 IWDG 实战:系统跑飞,它来兜底复位
stm32·单片机·嵌入式硬件
zcmodeltech7 小时前
智能制造教学实训沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的工业机器人-智慧工厂-数字孪生全场景联动方案
数据库·stm32·嵌入式硬件·机器人·制造·多分类
程序员与背包客_CoderZ7 小时前
Linux D-Bus通信协议详解:从入门到C/C++编码实战
linux·服务器·c语言·c++·嵌入式硬件·嵌入式软件·dbus
嵌入式阿蔡9 小时前
HAL库 vs LL库 vs 寄存器:到底用哪个?
c语言·stm32·单片机·嵌入式硬件·嵌入式实时数据库
天空'之城10 小时前
单片机基础核心知识点汇总(三)
单片机·嵌入式硬件
嵌入式阿蔡10 小时前
CAN总线入门:从协议帧到STM32实战
c语言·stm32·单片机·嵌入式硬件·嵌入式实时数据库
恒锐丰科技韩生11 小时前
率能 SS8847E|2.7~15V 双通道 H 桥电机驱动 ETSSOP16 散热封装 家电 / 打印 / 舞台灯光专用
嵌入式硬件·硬件工程