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

STM32 ADC --- 任意单通道采样

STM32 ADC — 单通道采样

文章目录

  • STM32 ADC --- 单通道采样
    • cubeMX配置
    • 代码修改:
    • 应用

  • 使用cubeMX生成HAL工程

需求:有多个通道需要进行ADC采样,实现每次采样只采样一个通道,且可以随时采样不同通道的功能

cubeMX配置

在这里插入图片描述
这里我们想通过10通道和11通道分别进行ADC采样。需要注意的是:当ADC规则转换中配置的转换数大于1时,cubeMX会自动将扫描转换模式使能。但这里我们实际需要扫描转换模式为关闭,这里可以等下在代码中修改。还有个需要注意的地方是结束转换的选择:单个通道完成转换时即触发EOC标志位

代码修改:

为了方便后续继续使用cubeMX生成代码不影响改动,我们采用重新初始化ADC的方式来实现需求:

void adc1_init(void) {/* 配置ADC引脚 */GPIO_InitTypeDef GPIO_InitStruct = {0};GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);/* 重新初始化ADC1 */HAL_ADC_DeInit(&hadc1);hadc1.Instance = ADC1;hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;hadc1.Init.Resolution = ADC_RESOLUTION_12B;hadc1.Init.ScanConvMode = DISABLE; //ENABLE;hadc1.Init.ContinuousConvMode = DISABLE;hadc1.Init.DiscontinuousConvMode = DISABLE;hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;hadc1.Init.NbrOfConversion = 1;hadc1.Init.DMAContinuousRequests = DISABLE;hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;if (HAL_ADC_Init(&hadc1) != HAL_OK){};}uint16_t adc_sample(ADC_HandleTypeDef *hadc, uint32_t adc_channel) {ADC_ChannelConfTypeDef sConfig = {0};sConfig.Channel = adc_channel;sConfig.Rank = 1;sConfig.SamplingTime = ADC_SAMPLETIME_56CYCLES;HAL_ADC_ConfigChannel(hadc, &sConfig);HAL_ADC_Start(hadc);HAL_ADC_PollForConversion(hadc, 100); //等待转换完成uint16_t value = HAL_ADC_GetValue(hadc);return value;
}

通过adc1_init()函数将ADC1重新初始化

  • 将扫描转换模式修改为DISABLE
  • 将转换通道数设置为1
  • 后续还有其它引脚通道需要转换时在配置ADC引脚处添加相关的初始化即可

后续便可以通过adc_sample()函数根据通道号进行ADC采样了,这里的采样方式为轮询等待模式。

应用

在这里插入图片描述

http://www.lryc.cn/news/485906.html

相关文章:

  • vscode中执行git合并操作需要输入合并commit信息,打开的nano小型文本编辑器说明-
  • 蓝桥杯每日真题 - 第7天
  • 【Git】Git Clone 指定自定义文件夹名称:详尽指南
  • 终端快捷键学习笔记
  • Go语言24小时极速学习教程(四)MySQL数据库的增删改查
  • 04 - Clickhouse-21.7.3.14-2单机版安装
  • 多项式回归
  • vscode报错:Connecting with SSH time-out.
  • python可视化将多张图整合到一起(画布)
  • C函数如何返回参数lua使用
  • pytest在conftest.py中实现用例执行失败进行截图并附到allure测试报告
  • 编程之路,从0开始:数据在内存中的存储
  • 二叉树+树的OJ题讲解
  • 信捷PLC转以太网连接电脑方法
  • 释放 PWA 的力量:2024 年的现代Web应用|React + TypeScript 示例
  • CVSS4与CVSS3的不同之二
  • 【Pip】如何清理 `pip` 包管理器 —— 完整指南
  • 操作数据库
  • lua-lru缓存算法解析
  • Python - 初识Python;Python解释器下载安装;Python IDE(一)
  • 鸿蒙学习基本概念
  • 正则表达式(补充)
  • 第23课-C++-红黑树的插入与旋转
  • 【C#】C#编程入门指南:构建你的.NET开发基础
  • [系统安全] PE文件知识在免杀中的应用
  • 相机标定原理
  • Linux基础开发工具使用
  • 蓝牙PBAP协议及Android实现
  • Py之pymupdf:基于langchain框架结合pymupdf库实现输出每个PDF页面的文本内容、元数据等
  • LeetCode题解:17.电话号码的数字组合【Python题解超详细,回溯法、多叉树】,知识拓展:深度优先搜索与广度优先搜索