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

ops/2024/11/17 18:23:02/

ADC___0">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.ppmy.cn/ops/134492.html

相关文章

HarmonyOS4+NEXT星河版入门与项目实战--------开发工具与环境准备

文章目录 1、熟悉鸿蒙官网1、打开官网2、下载 DevEco Studio3、HarmonyOS 资源库4、开发指南与API 2、安装 DevEco Studio1、软件安装2、配置开发工具 1、熟悉鸿蒙官网 1、打开官网 百度搜索 鸿蒙开发者官网 点击进入开发者官网,点击开发,可以看到各种…

leetcode 扫描线专题 06-leetcode.252 meeting room 力扣.252 会议室

扫描线专题 leetcode 扫描线专题 06-扫描线算法(Sweep Line Algorithm) leetcode 扫描线专题 06-leetcode.218 the-skyline-problem 力扣.218 天际线问题 leetcode 扫描线专题 06-leetcode.252 meeting room 力扣.252 会议室 leetcode 扫描线专题 06…

【React】状态管理之Zustand

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 状态管理之Zustand引言1. Zustand 的核心特点1.1 简单直观的 API1.2 无需 Provi…

【Linux篇】面试——用户和组、文件类型、权限、进程

目录 一、权限管理 1. 用户和组 (1)相关概念 (2)用户命令 ① useradd(添加新的用户账号) ② userdel(删除帐号) ③ usermod(修改帐号) ④ passwd&…

idea 添加内嵌代码作者-方法添加作者-设置方法作者-设置[code author]--设置代码修改作者和修改时间

这个设置还是有点难的。在网络上资料比较少,找了好久才找到,这里记录一下。 当团队合作编辑代码时,代码中方法的添加修改设置作者和修改时间很重要。 具体方法: 这里大体原理就是,显示的作者是git配置的用户账户信息…

删库跑路,启动!

起因:这是一个悲伤的故事,在抓logcat时 device待机自动回根目录了,而题主对当前路径的印象还停留在文件夹下,不小心在根目录执行了rm -rf * … 所以,这是个悲伤的故事,东西全没了…device也黑屏了&#xff…

uniapp中h5端如何引用本地json数据(json文件)

前言 uniapp读取本地json数据文件&#xff0c;有下面两种方式可以实现&#xff1a; 文件后缀为.json类型文件后缀为.js类型 这里展示后缀为.js类型的处理方式 1、在static中创建后缀为.js的文件存储json数据。 注意使用export导出 2、在要使用的页面导入 <template>…

高光谱深度学习调研

综述 高光谱深度学习只有小综述&#xff0c;没有大综述。小综述里面场景分类、目标检测的综述比较多。 Wang C, Liu B, Liu L, et al. A review of deep learning used in the hyperspectral image analysis for agriculture[J]. Artificial Intelligence Review, 2021, 54(7)…