STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库)

news2025/6/22 16:50:05

STM32 CubeMX ADC采集(HAL库)


STM32 CubeMX

  • STM32 CubeMX ADC采集(HAL库)
  • ADC介绍
  • ADC主要特征
    • Vref+的电压(2.4~3.6)就是ADC参考电压2.4V(相当于秤砣)
  • 最小识别电压值:2.4/4096≈0.6mv(不考虑误差)
  • 一、STM32 CubeMX设置
  • 二、代码部分
  • 三,单通道轮询采样速度
  • 四、内部温度传感器
  • 多通道轮询方式
    • 设置 CubeMX
    • 修改代码部分
  • 实验现象
    • PA0接地;PA1接VCC;PA2接地;PA3浮空;PA4浮空
  • 总结


ADC介绍

12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部
信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右
对齐方式存储在16位数据寄存器中。
模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。
ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。

ADC主要特征

● 12位分辨率(最小识别电压)
● 转换结束、注入转换结束和发生模拟看门狗事件时产生中断
● 单次和连续转换模式
● 从通道0到通道n的自动扫描模式
● 自校准
● 带内嵌数据一致性的数据对齐
● 采样间隔可以按通道分别编程
● 规则转换和注入转换均有外部触发选项
● 间断模式
● 双重模式(带2个或以上ADC的器件)
● ADC转换时间:
─ STM32F103xx增强型产品:时钟为56MHz时为1μs(时钟为72MHz为1.17μs)
─ STM32F101xx基本型产品:时钟为28MHz时为1μs(时钟为36MHz为1.55μs)
─ STM32F102xxUSB型产品:时钟为48MHz时为1.2μs
─ STM32F105xx和STM32F107xx产品:时钟为56MHz时为1μs(时钟为72MHz为1.17μs)
● ADC供电要求:2.4V到3.6V
● ADC输入范围:VREF- ≤ VIN ≤ VREF+
● 规则通道转换期间有DMA请求产生。


在这里插入图片描述

Vref+的电压(2.4~3.6)就是ADC参考电压2.4V(相当于秤砣)

最小识别电压值:2.4/4096≈0.6mv(不考虑误差)

在这里插入图片描述

一、STM32 CubeMX设置

开启连续扫描使能,1.5采样周期
在这里插入图片描述
我们设置 PCLK2=72M,经过 ADC 预分频器能分频到最大的时钟只能是 12M,采样周期设置为 1.5 个周期,算出最短的转换时间为 1.17us,
在这里插入图片描述

二、代码部分

HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout);
  HAL_ADCEx_Calibration_Start(&hadc1);    //AD校准
  HAL_ADC_Start_IT(&hadc1); //开启ADC中断转换
  ADC_Value =HAL_ADC_GetValue(&hadc1);

在这里插入图片描述
在这里插入图片描述

三,单通道轮询采样速度

测试方法:
{(adc转换时间+io反转时间)-io反转时间} =adc转换速度

在这里插入图片描述

在这里插入图片描述

IO口直接反转
在这里插入图片描述
在这里插入图片描述
测得实际转换时间:3us-0.3us=2.7.us

理论值:上面我们设置ADC时钟12Mhz,采样一次最短时间位1.17us
注释:

可编程的通道采样时间:TCONV = 采样时间+ 12.5个周期
**例如**:
当ADCCLK=14MHz,采样时间为1.5周期
 TCONV = 1.5 + 12.5 = 14周期 = **1μs**
 我们设置 PCLK2=72M,经过 ADC 预分频器能分频到最大的时钟只能是 12M,采样周期设置为 1.5 个周期,算出最短的转换时间为 1.17us,

四、内部温度传感器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

	HAL_ADC_Start(&hadc1);	//启动ADC转换
	HAL_ADC_PollForConversion(&hadc1,10);	//等待转换完成,10ms表示超时时间
 AD_Value = HAL_ADC_GetValue(&hadc1);	//读取ADC转换数据(12位数据)
 
//		HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_8);
		Vol_Value = AD_Value*(3.3/4096);	//AD值乘以分辨率即为电压值
	printf("ADC1_IN16 VOL value: %.2fV\r\n",Vol_Value);
	Temperature = (1.43 - Vol_Value)/0.0043 + 25;	//根据公式算出温度值
	printf("MCU Internal Temperature: %.2f\r\n",Temperature);

在这里插入图片描述

多通道轮询方式

设置 CubeMX

在这里插入图片描述
在这里插入图片描述

修改代码部分

在这里插入图片描述

int main(void)
{
  /* USER CODE BEGIN 1 */
int aa=0;
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  HAL_ADCEx_Calibration_Start(&hadc1);    //AD校准
 
//	printf("Test int:   i = %d\r\n", aa);		// printf输出int型数据
 int  ADC_value[5];
 char i=0;
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		for(i=0;i<5;i++)
		{
		   HAL_ADC_Start(&hadc1);     //启动ADC转换
		   HAL_ADC_PollForConversion(&hadc1, 50);   //等待转换完成,50为最大等待时间,单位为ms
			 ADC_value[i]=HAL_ADC_GetValue(&hadc1);
		}
    
		printf("ADC value 0 PA0: %d \r\n",ADC_value[0]);
		printf("ADC value 1 PA1: %d \r\n",ADC_value[1]);
		printf("ADC value 2 PA2: %d \r\n",ADC_value[2]);
		printf("ADC value 3 PA3: %d \r\n",ADC_value[3]);
		printf("ADC value 4 PA4: %d \r\n",ADC_value[4]);
		HAL_Delay(1000);
// AD_Value = HAL_ADC_GetValue(&hadc1);	//读取ADC转换数据(12位数据)
// 
		HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_8);
//		Vol_Value = AD_Value*(3.3/4096);	//AD值乘以分辨率即为电压值
//	aa
//	Temperature = (1.43 - Vol_Value)/0.0043 + 25;	//根据公式算出温度值
//	printf("MCU Internal Temperature: %.2f\r\n",Temperature);
 
  }
  /* USER CODE END 3 */
}

实验现象

PA0接地;PA1接VCC;PA2接地;PA3浮空;PA4浮空

在这里插入图片描述

总结

以上就是今天要讲的内容,本文仅仅简单介绍了ADC的使用,而ADC提供了大量能使我们快速便捷地处理数据的函数和方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1086437.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从毕业到创业,普通人如何“逆袭”?

都说当代年轻人在上班和上进之间&#xff0c;选择了上香。尽管如此&#xff0c;仍有人19岁便完成“45天净赚4万”的目标&#xff0c;也有人仅凭两人之力便成功做到“14天推广5000人”。而这些数字的“创造者”&#xff0c;正是龚祖宋。 从求学到求职&#xff0c;年轻人总是面临…

常用的语音芯片工作原理_分类为语音播报 语音识别 语音合成tts

1.0 语音芯片分类-语音播报-语音识别-语音合成 关于声音的需求&#xff0c;从始至终&#xff0c;都是很刚需的需求 。从语音芯片的演化就能看出很多的端倪&#xff0c;很多很多的产品他必须要有语音&#xff0c;才能实现更好的交互。而语音芯片的需求分类&#xff0c;其实也是很…

香港高才通申请详细步骤

去年与同学聊天&#xff0c;同学建议我申请香港优才&#xff0c;说是对孩子以后考学有好处&#xff0c;我家孩子现在还可以赶得上&#xff0c;当时查了一下&#xff0c;但是没有查到具体的就放下忙工作去了&#xff0c;今年刚好公司在宣讲海外留学服务的增值服务时&#xff0c;…

ESD门禁闸机的应用和功能说明

ESD门禁闸机是一种用于控制人员出入的安全设备&#xff0c;具有以下应用和功能说明&#xff1a; 应用&#xff1a; 工厂、企业、学校等单位的门禁控制&#xff1b; 公共场所的出入管理&#xff0c;如机场、地铁站、商场等&#xff1b; 医院、实验室等场所对人员出入的管理和…

Python【控制台输出案例】

要求&#xff1a;在控制台上上输入如下案例 *********** *********** *********** 代码1如下&#xff1a; layer int(input("请输入你要打印的行数&#xff1a;")) index 1 while index < layer:print("*"*10)index 1 ps:为了确保index 1语句在循…

vue+element实现电商商城礼品代发网,商品、订单管理

一、项目效果图 1.首页 2.登录 版本2&#xff1a; 3.注册 4.找回密码 5.立即下单 6.商品详情 7.个人中心-工作台 8.个人中心-订单列表 9.订单中心-包裹列表 10.个人中心-工单管理 11.我的钱包 12.实名认证 13.升级vip 14.个人中心-推广赚钱 二、关键源码 1.路由配置 impor…

数据治理的数字画像

随着全网步入大数据时代&#xff0c;企业的目光日益聚焦在利用大数据服务精细化营销、精细化运营上&#xff0c;各类客户画像、员工画像理论如雨后春笋般兴起&#xff0c;而数据应用的底层——数据治理&#xff0c;却鲜有整体的理论体系。如何避免治理工作自身“无的放矢”&…

泛微E8 查询分部总部部门信息

当查询泛微 OA 部门&#xff0c;请使用 HrmDepartment 表&#xff1b;当查询分部信息&#xff0c;请使用 HrmSubCompany 表。当查询总部信息&#xff0c;请使用 HrmCompany 表。 其中&#xff0c;总部信息通过总部 id - 分部 companyid 进行关联&#xff1b;分部信息通过分部 …

在这个砸钱推广都效果甚微的时代,你该如何突出重围

有市场就有竞争&#xff0c;有竞争就有优胜劣汰&#xff0c;不做引领就会被遗忘&#xff0c;近几年&#xff0c;“数字化”、“智能化”一直是业内热议的话题&#xff0c;数据驱动的营销模式是未来市场显著的特征,运营商大数据在营销领域能帮助企业提升销售效率,降低企业获客成…

URL because the SSL module is not available

Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host‘pypi.org’, port443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError(“Can’t connect to HTT PS URL because the…

软件TFN 2K的分布式拒绝攻击(DDos)实战详解

写在前头 本人写这篇博客的目的&#xff0c;并不是我想成为黑客或者鼓励大家做损坏任何人安全和利益的事情。因科研需要&#xff0c;我学习软件TFN 2K的分布式拒绝攻击&#xff0c;只是分享自己的学习过程和经历&#xff0c;有助于大家更好的关注到网络安全及网络维护上。 需要…

微信小程序/vue3/uview-plus form兜底校验

效果图 代码 <template><u-form :model"form" ref"formRole" :rules"rules"><u-form-item prop"nickname"><u-input v-model"form.nickname" placeholder"姓名" border"none" /&…

美国隐私安全人工智能大模型公司【Fantix】160万美元融资

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于美国纽约的隐私安全人工智能大模型公司【Fantix】今日宣布已完成160万美元B轮融资。 本轮融资的投资者包括Gaingels&#xff0c;Notion Capital&#xff0c;Founders Factory&#xff0c;F…

scsi MODE SENSE(6)命令 和 MODE SENSE(10)命令总结

一&#xff1a;MODE SENSE(6)命令概述 MODE SENSE(6)命令(参见表73)为设备服务器向应用程序客户机报告参数提供了一种方法。它是MODE SELECT(6)命令的补充命令。执行MODE SENSE(6)命令的设备服务器也应执行MODE SELECT(6)命令。 命令格式 DBD (disable block descriptors) bi…

c++视觉处理-----Laplacian算 子

Laplacian算 子 cv::Laplacian 是 OpenCV 中的一个函数&#xff0c;用于应用Laplacian算子&#xff08;拉普拉斯算子&#xff09;在图像上进行边缘检测。以下是 cv::Laplacian 函数的基本用法&#xff1a; cv::Laplacian(src, dst, ddepth, ksize, scale, delta, borderType)…

sql分组去重计数distinctcountgroup by

count 可以与 distinct 连用&#xff0c;这样可以实现去重计数&#xff1b;加上group by 可实现按某个字段分组&#xff0c;而对其它字段进行去重计数 学习链接 count()和distinct关键字的使用 distinct关键字 distinct关键字是用于去除重复的数据记录。distinct使用情况&a…

09_Webpack打包工具

1 初识Webpack 1.1 什么是Webpack Webpack打包工具对项目中的复杂文件进行打包处理&#xff0c;可以实现项目的自动化构建&#xff0c;并且给前端开发人员带来了极大的便利。 目前&#xff0c;企业中的绝大多数前端项目是基于Webpack打包工具来进行开发的。 1.2 Webpack的安…

ChatGPT,AIGC 数据库应用 Mysql 常见优化30例

使用ChatGPT,AIGC总结出Mysql的常见优化30例。 1. 建立合适的索引:在Mysql中,索引是重要的优化手段,可以提高查询效率。确保表的索引充分利用,可以减少查询所需的时间。如:create index idx_name on table_name(column_name); 2. 避免使用select * :尽可能指定要返回的…

拼多多商品品牌数据采集接口,拼多多商品详情数据接口,拼多多API接口

拼多多商品品牌数据采集的方法如下&#xff1a; 手动数据采集。直接在拼多多平台上搜索并手动复制商品数据&#xff0c;适合采集小批量的商品数据。自动数据采集。通过爬虫来自动获取&#xff0c;具体步骤如下&#xff1a; 选择爬虫框架并安装。Python爬虫框架有很多&#xf…

计算机毕业设计选什么题目好?springboot 校园失物招领平台

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…