STM32CubeMx采集多路ADC

2023-11-05

转载于https://blog.csdn.net/qq_24815615/article/details/70227385
原文地址https://www.eemaker.com/stm32cubemxadc.html

单片机为:STM32F103RCT6
软件:STM32CubeMX,MDK

功能:不使用DMA,不使用中断,读取ADC1内部温度传感器及内部参照电压VREFINT的值

描述:温度传感器和通道ADC1_IN16相连接,内部参照电压VREFINT和ADC1_IN17相连接。可以按注入或规则通道对这两个内部通道进行转换。注意: 温度传感器和VREFINT只能出现在主ADC1中。
内部温度传感器温度计算公式:
温度C = (V25 - Vsence)/Avg_Slope + 25
V25 = Vsence在25°C时的数值,典型值为1.43V
Avg_Slope = 温度与VSENSE曲线的平均斜率(单位为mV/ °C 或 μV/ °C),典型值为4.3mv/C
Vsence为读取内部温度传感器的AD值3.3/4096
所以最终公式为:
C = (1.43 - tempadc
3.3/4096)*1000/4.3 + 25;

ADC采集的几个概念:
扫描模式(想采集多通道必须开启):是一次对所选中的通道进行转换,比如开了ch0,ch1,ch4,ch5。ch0转换完以后就会自动转换通道1,4,5直到转换完。但是这种连续性并不是不能被打断。这就引入了间断模式。

间断模式:可以说是对扫描模式的一种补充。它可以把0,1,4,5这四个通道进行分组。可以分成0,1一组,4,5一组。也可以每个通道配置为一组。这样每一组转换之前都需要先触发一次。

单次模式和连续模式:这两中模式的概念是相对应的。这里的单次模式并不是指一个通道。假如你同时开了ch0,ch1,ch4,ch5这四个通道。单次模式转换模式下会把这四个通道采集一边就停止了。而连续模式就是这四个通道转换完以后再循环过来再从ch0开始。

规则组和注入组:规则通道相当于你正常运行的程序,而注入通道就相当于中断。即注入通道的转换可以打断规则通道的转换, 在注入通道被转换完成之后,规则通道才得以继续转换。

下面配置CubeMx来生成程序:
1,选择ADC1的通道
在这里插入图片描述2,配置ADC1的参数
在这里插入图片描述 经过测试,要想用非dma和非中断模式只有这样配置可以正确进行多通道转换:扫描模式+单次转换模式+间断转换模式(每个间断组一个通道)。

分析配置成这样的模式,扫描模式是在配置为多个通道必须打开的,stm32cubeMX上也默认好了,只能enable。单次转换模式是我不需要不停的去采集每个通道值,而是把2个通道采集完以后就让它停止。这里间断配置是关键,间断模式可以让扫描的2个通道进行分成2个组,stm32cubeMX参数里面number of Discontinous Conversions是配置间断组每个组有几个通道的,这里必须配置为1(否则在获取ad值得时候只能读取到每个间断组最后一个通道)。

生成mdk工程代码。初始化ADC代码如下:

ADC_HandleTypeDef hadc1;

/* ADC1 init function */
void MX_ADC1_Init(void)
{
  ADC_ChannelConfTypeDef sConfig;
	
    /**Common config 
    */
  hadc1.Instance = ADC1;
  hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
  hadc1.Init.ContinuousConvMode = DISABLE;
  hadc1.Init.DiscontinuousConvMode = ENABLE;
  hadc1.Init.NbrOfDiscConversion = 1;
  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc1.Init.NbrOfConversion = 2;
  if (HAL_ADC_Init(&hadc1) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }
  
    /**Configure Regular Channel 
    */
  sConfig.Channel = ADC_CHANNEL_VREFINT;
  sConfig.Rank = 1;
  sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }
  
    /**Configure Regular Channel 
    */
  sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
  sConfig.Rank = 2;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }
}

这时候还没有完成,只是实现了ADC的初始化,需要采集这2个通道值得函数还要自己写。下面就采集这2个通道的函数:

uint8_t Get_Adc_Val(uint16_t *V, uint16_t *T)
{
	uint16_t adc[2];
	uint8_t i;

	for(i=0; i<2; i++)
	{
		HAL_ADC_Start(&hadc1);
		if(HAL_ADC_PollForConversion(&hadc1, 1000) == HAL_OK)
		{
			adc[i] = HAL_ADC_GetValue(&hadc1);
		}		
	}
	HAL_ADC_Stop(&hadc1);
	
	*V = adc[0];
	*T = adc[1];
    return 0;
}

调用hal库接口函数也需要注意,HAL_ADC_Start一定要放在for里面,即每一个通道都要触发。2个通道都采集完了,再去调用HAL_ADC_Stop(&hadc1); 结束本次ADC采集。

最后说下,这个是针对stm32F103系列的芯片,其他型号的配置可能略有不同,大体思路一样

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32CubeMx采集多路ADC 的相关文章

  • 总汇nexus 服务启动异常

    总汇nexus 服务启动异常 故障描述1 故障描述2 故障描述3 备份准备修复的数据库 故障描述1 nexus oss 3 一直运行得没什么问题 忽然发现运行特别慢然后到服务器去重启 莫名其妙一直启动失败 查看日志发现如下报错信息 2022
  • C51单片机晶振频率、时钟周期、状态周期、机器周期、指令周期和总线周期的关系

    一 晶振频率 1 英文全称 frequency oscillate 2 定义 晶体振荡器的固有频率 不能改变 3 如果外接12Mhz晶振 则晶振频率12Mhz 二 时钟周期 1 英文全称 Clock Cycle 为晶振频率12Mhz倒数 2
  • 面试题computed和watch的区别

    computed和watch的区别 1 英文翻译成中文 computed就是计算属性的意思 是用来计算出一个值的 这个值 我们在调用的时候 1 不需要加括号 2 根据依赖缓存 watch就是监听的意思 1 immediat表示是否第一次执行
  • Prometheus on k8s 部署与实战操作进阶篇

    文章目录 一 概述 二 常见的几款监控工具 1 kube prometheus 和 kube prometheus stack 区别 2 Prometheus Operator 和kube prometheus 或 kube prometh
  • openpose人体姿态估计

    参考博客 Openpose驾驶员危险驾驶检测 抽烟打电话 人体姿态识别模型 openpose OpenPose人体姿态识别项目是美国卡耐基梅隆大学 CMU 基于卷积神经网络和监督学习并以caffe为框架开发的开源库 可以实现人体动作 面部表
  • Spring MVC实例(增删改查)

    本文转载自 https www cnblogs com beast king p 5786752 html 作者 beast king 转载请注明该声明 数据库配置文件application context jdbc xml

随机推荐

  • 计算机视觉中自注意力构建块的PyTorch实现

    作者 AI Summer 编译 ronghuaiyang 导读 一个非常好用的git仓库 封装了非常全面的计算机视觉中的自注意力构建块 直接调用 无需重复造轮子了 git仓库地址 https github com The AI Summer
  • 深度学习(20)—— ConvNext 使用

    深度学习 20 ConvNext 使用 本篇主要使用convnext做分类任务 其中使用convnext tiny 其主要有5块 stage0 stage1 stage2 stage3 head 文章目录 深度学习 20 ConvNext
  • 小程序获取后台数据方法封装

    前言 实际再很早之前就有想再小程序里面做和vue中的axios封装的方法的操作 现在终于可以把自己的理解和整理封装整理下 目录 实现步骤 1 目录结构 总共两个文件 http js是对 wx request 和 wx uploadFile
  • 在云原生时代,构建高效的大数据存储与分析平台

    文章目录 1 选择适当的数据存储技术 2 采用分布式架构 3 数据分区和索引 4 采用列式存储 5 数据压缩和编码 6 使用缓存技术 7 数据分片和复制 8 自动化运维和监控 9 数据安全和权限控制 10 实时处理和流式分析 11 数据质量
  • 连接打印机出现0x0000007e错误的解决方法

    办公室用自己电脑连接公共服务器打印机时 出现出现0x0000007e错误 查找了微软论坛 解决方案如下 删除服务器电脑注册表中的copyfiles项 具体路径如下 registry gt Local Machine gt system gt
  • element组件库的el-select多选时候,选择三个时候下拉框抖动问题解决办法

    添加如下样式即可解决
  • 华为OD机试真题- 寻找链表的中间结点【2023Q1】【JAVA、Python、C++】

    题目描述 给定一个单链表 L 请编写程序输出 L 中间结点保存的数据 如果有两个中间结点 则输出第二个中间结点保存的数据 例如 给定 L 为 1 7 5 则输出应该为 7 给定 L 为 1 2 3 4 则输出应该为 3 输入描述 每个输入包
  • php mysql layui分页_php+layui数据表格实现数据分页渲染代码

    一 HTML 二 JS 说明 需要引入layui中的table和laytpl模板引擎 laytpl可以自定义事件及自定义数据字段等 查看详情 if d hotcake 超级爆款 d hotcake else if d hotcake 大爆款
  • resultType和parameterType的基本使用和区别

    resultType与parameterType的基本使用和区别 Mybatis的Mapper文件中的select insert update delect元素中都有一个parameterType和resultType属性 paramete
  • MQ 入门实践

    MQ Message Queue 消息队列 FIFO 结构 例如电商平台 在用户支付订单后执行对应的操作 优点 异步 削峰 解耦 缺点 增加系统复杂性 数据一致性 可用性 JMS Java Message Service Java消息服务
  • ajax详细用法

    一 基础知识 1 首先让我们了解ajax 通过在后台与服务器进行少量数据交换 AJAX 可以使网页实现异步更新 这意味着可以在不重新加载整个网页的情况下 对网页的某部分进行更新 2 ajax的核心步骤 创建XMLHttpRequest对象
  • Android读取联系人的姓名及电话号码

    Android中联系人的信息是通过ContentProvider来供外部应用获取的 我们使用时只需根据系统联系人ContentProvider的Uri即可获取所需数据 下面讲解如何获取联系人的姓名及电话号码 别的数据如邮箱 照片等数据的获取
  • flutter开发中常用的dart插件

    本文罗列了一些在用flutter进行移动开发时经常会用到的插件 flutter插件官网地址 https pub dartlang org packages 1 image picker 一个可以从图库选择图片 并可以用相机拍摄新照片的flu
  • 关于Java中序列化Serializable的简单注解

    最近学校的实训课程在学习ssm框架 其中有一点实体类里面实现了Serializable序列化的方法 查了一下 仍然有点模糊 序列化和数据库中的字段有关 方便数据存储和传输 import java io Serializable public
  • 计算机专业毕业设计题目大全

    计算机专业毕业设计题目大全 一 ASP类计算机专业毕业设计题目 文章目录 计算机专业毕业设计题目大全 一 ASP类计算机专业毕业设计题目 ASP NET类计算机专业毕业设计题目 Delphi类计算机专业毕业设计题目 JAVA类计算机专业毕业
  • 2020 AI产业图谱启动,勾勒中国AI技术与行业生态

    2020年国务院政府工作报告 提出 重点支持 两新一重 建设 其中 两新一重 中的第一个 新 就是新基建 而人工智能是新基建的重要组成部分 新基建首次被纳入政府工作报告后 各大科技厂商纷纷押注 重金投向 新基建 例如腾讯已经宣布未来五年将投
  • 网络问题导致的github提交失败解决方案

    参考文章 github push过程中的timeout问题 码农家园 1 打开 C Windows System32 drivers etc 下的hosts文件 2 访问 github global ssl Fastly net Serve
  • 质量成本(一致性成本和非一致性成本)

    项目管理知识体系指南第四版 PMBOK2008 8 1 2 2 质量成本 质量成本包括在产品生命周期中为预防不符合要求 为评价产品或服务是否符合要求 以及因未达到要求 而发生的所有成本 质量成本 一致性成本和非一致性成本 一致性成本包括预防
  • 机器学习环境的搭建(miniconda+pycharm)

    一 Python语言环境的安装 miniconda 1 软件安装 直接去官网下载Miniconda速度太慢 建议去清华开源找一个替代的镜像下载 并且在清华该网站上面 还有附带的一些镜像使用帮助 2 anaconda与miniconda的区别
  • STM32CubeMx采集多路ADC

    转载于https blog csdn net qq 24815615 article details 70227385 原文地址https www eemaker com stm32cubemxadc html 单片机为 STM32F103