当前位置: 首页 > 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转换结果
http://www.lryc.cn/news/548046.html

相关文章:

  • DeepSeek爆火催生培训热潮,是机遇还是陷阱?
  • Apache Httpd 多后缀解析
  • 备赛蓝桥杯之第十五届职业院校组省赛第五题:悠然画境
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_modules
  • css错峰布局/瀑布流样式(类似于快手样式)
  • 【并发编程】聊聊定时任务ScheduledThreadPool的实现原理和源码解析
  • 【虚拟化】Docker Desktop 架构简介
  • DeepSeek 医疗大模型微调实战讨论版(第一部分)
  • c++实现最大公因数和最小公倍数
  • 知识库Dify和cherry无法解析影印pdf word解决方案
  • 【记录一下学习】Embedding 与向量数据库
  • 【第21节】C++设计模式(行为模式)-Chain of Responsibility(责任链)模式
  • createrepo centos通过nginx搭建本地源
  • 在 Docker 中搭建GBase 8s主备集群环境
  • 【MySQL-数据类型】数据类型分类+数值类型+文本、二进制类型+String类型
  • 小谈java内存马
  • 简单的二元语言模型bigram实现
  • 【清华大学】实用DeepSeek赋能家庭教育 56页PDF文档完整版
  • 黑洞如何阻止光子逃逸
  • 1.4 单元测试与热部署
  • window系统中的start命令详解
  • AI编程工具节选
  • 正则表达式,idea,插件anyrule
  • 原生iOS集成react-native (react-native 0.65+)
  • java错题总结
  • 【商城实战(10)】解锁商品信息录入与展示的技术密码
  • 2025年主流原型工具测评:墨刀、Axure、Figma、Sketch
  • MDM 如何彻底改变医疗设备的远程管理
  • OpenCV计算摄影学(18)平滑图像中的纹理区域同时保留边缘信息函数textureFlattening()
  • 用DeepSeek学Android开发:Android初学者遇到的常见问题有哪些?如何解决?