当前位置: 首页 > news >正文

HAL库,配置adc基本流程

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

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

// 使能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模块,设置分辨率、数据对齐方式、扫描模式等。
代码示例

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,减少转换误差。
代码示例

HAL_ADCEx_Calibration_Start(&hadc1);  // 执行ADC校准

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

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

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转换(单次模式需手动触发)。
代码示例

HAL_ADC_Start(&hadc1);  // 启动ADC转换

(6) 等待转换完成

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

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

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

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

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转换结果

相关文章:

  • USB流量分析总结(实战[NISACTF 2022] 破损的flag)
  • 把握好自己的节奏, 别让世界成为你的发条匠
  • Linux 进程间通信
  • 【QT】-易错点笔记-2025-2-7
  • 【组件安装FAQ】Connector 24.10.06-1: [cnc0306002] already exists.
  • 实现自定义圆角imageView, 抗锯齿
  • Django 模型的逆向工程
  • VMware Workstation安装rocky9.5虚拟机
  • 操作系统 2.2-多进程总体实现
  • P8255 [NOI Online 2022 入门组] 数学游戏 题解
  • C++:模板(上篇)
  • 【C++】析构函数与虚析构函数区别
  • 【Proteus仿真】【STM32单片机】智能阳台控制系统
  • 利用PHP爬虫根据关键词获取17网(17zwd)商品列表:实战指南
  • 【记录】高性能服务器运行DeepSeek
  • JavaScript(最后一个元素的索引就是数组的长度减 1)array.length - 1
  • 清华北大推出的 DeepSeek 教程(附 PDF 下载链接)
  • [傻瓜式教学]如何将MathType公式编辑器内嵌到WPS工具栏中
  • 刘火良 FreeRTOS内核实现与应用之1——列表学习
  • langchain系列(九)- LangGraph 子图详解
  • 网站后台管理员扫描/铜陵seo
  • 如何打开建设网站后台/如何网络媒体推广
  • 深圳网站设计公司电/搜索引擎优化是指
  • 页面设计软件教程/网站如何seo推广
  • 迅睿cms建站/爱站网关键字挖掘
  • 企业公司网站管理系统/营销型企业网站案例