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

STM32的HAL库开发---ADC采集内部温度传感器

一、STM32内部温度传感器简介

二、温度计算方法

F1系列:

 从数据手册中可以找到V25和Avg_Slope

 F4、F7、H7系列只是标准值不同,自行查阅手册

三、实验简要

1、功能描述

通过ADC1通道16采集芯片内部温度传感器的电压,将电压值换算成温度后,串口发送

2、确定最小刻度

VREF+ = 3.3V ---> 0V ≤ VIN ≤  3.3V --->最小刻度 = 3.3 / 4096

3、确定转换时间

采样时间设置为最小值239.5个ADC时钟周期,可以得到转换时间为21us,满足温度传感器要求的17us.

4、模式组合

连续转换模式、不扫描模式

四、编程实战

1、寄存器版本

adc.c源程序

#include "./BSP/ADC/adc.h"void ADC_Init(void)
{//开启ADC1时钟RCC->APB2ENR |= (1 << 9);//TSVREFE 开启内部温度传感器ADC1->CR2 |= (1 << 23);//设置ADC时钟分频系数为6 ADC采集时钟为12M//这个注意温度传感器采样时间不能少于17usRCC->CFGR |= (1 << 15);//SCAN位  一个通道 关闭扫描模式ADC1->CR1 &= ~(1 << 8);	//EXTTRIG 开启规则通道的外部触发ADC1->CR2 |= (1 << 20);//EXTSEL 设置为SWSTART软件触发 ADC1->CR2 |= (0X07 << 17);//ALIGN 设置数据对齐为右对齐模式ADC1->CR2 &= ~(1 << 11);//ADCON 开启ADCADC1->CR2 |= (1 << 0);//CONT 开启连续转化模式ADC1->CR2 |= (1 << 1);//SMP1 ADC1_CH1 设置采样时间为239.5个时钟周期//时钟为12M 239.5 + 12.5 = 252个周期ADC1->SMPR2 |= (0X07 << 3);//L 设置规则通道转换数为1ADC1->SQR1 &= (0X0F << 20);//SQ1 设置第一个转化为ADC通道16ADC1->SQR3 |= (16 << 0);	//RSTCAL 初始化校准寄存器ADC1->CR2 |= (1 << 3);/*********************注意***************///第一个不写会出问题//这必须要等待两次  一个是等待校准寄存器初始化完成之后  ,再开启校准//第二个是等待校准完成再开始转换//等待校准完成while(ADC1->CR2 & (1 << 3));//CAL 开始校准ADC1->CR2 |= (1 << 2);//等待校准完成while(ADC1->CR2 & (1 << 2));//SWSTART 开启规则通道软件触发ADC1->CR2 |= (1 << 22);
}

 main.c主函数

主函数里边只要使用公式计算内部温度传感器温度

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/ADC/adc.h"uint16_t ADC_Voyage = 0;
double V_SENSE = 0;
int main(void)
{HAL_Init();                         /* 初始化HAL库 */sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */delay_init(72);                     /* 延时初始化 */led_Init();                         /* LED初始化 */usart_init(115200);ADC_Init();while(1){ LED0(1);LED1(0);delay_ms(500);LED0(0);LED1(1);delay_ms(500);//while//读取DR数据寄存器的值ADC_Voyage = (ADC1 ->DR) & (0x0FFF);//将数据值转换为电压值V_SENSE = ((double)ADC_Voyage * 3.3) / 4096;printf("STM32内部温度为:%f℃\r\n",((double)(1.43 - V_SENSE))/0.0043  + 25);//触发ADC转换一次//ADC1->CR2 |= (1 << 22);}
}

2、库函数版本

adc.c源程序

#include "./BSP/ADC/adc.h"GPIO_InitTypeDef GPIO_Init;
ADC_HandleTypeDef hadc;
void ADC_Init(void)
{	hadc.Instance = ADC1;//开启连续转换hadc.Init.ContinuousConvMode = ENABLE;//数据右对齐 12位存16位寄存器hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;//关闭间断模式hadc.Init.DiscontinuousConvMode = DISABLE;//软件触发hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;//转换数量一个hadc.Init.NbrOfConversion = 1;//间断模式转换数量0//关闭扫描模式  就一个通道hadc.Init.NbrOfDiscConversion = 0;hadc.Init.ScanConvMode = ADC_SCAN_ENABLE;HAL_ADC_Init(&hadc);ADC_ChannelConfTypeDef sConfig;//配置通道1sConfig.Channel = ADC_CHANNEL_1;//第一个转换sConfig.Rank = ADC_REGULAR_RANK_1;//采样时间239.5 + 12.5sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;HAL_ADC_ConfigChannel(&hadc,&sConfig );//ADC校准功能HAL_ADCEx_Calibration_Start(&hadc);//开启ADC采集HAL_ADC_Start(&hadc);
}void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
{//开启ADC1时钟__HAL_RCC_ADC1_CLK_ENABLE();//开启GPIOA时钟__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_Init.Mode = GPIO_MODE_ANALOG;GPIO_Init.Pin = GPIO_PIN_1;GPIO_Init.Pull = GPIO_NOPULL;//设置PA1为模拟输入模式HAL_GPIO_Init(GPIOA,&GPIO_Init);RCC_PeriphCLKInitTypeDef  PeriphClkInit;PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
}

这里注意要配置RCC时钟,将ADC的分频系数配置位6分频

相关文章:

STM32的HAL库开发---ADC采集内部温度传感器

一、STM32内部温度传感器简介 二、温度计算方法 F1系列&#xff1a; 从数据手册中可以找到V25和Avg_Slope F4、F7、H7系列只是标准值不同&#xff0c;自行查阅手册 三、实验简要 1、功能描述 通过ADC1通道16采集芯片内部温度传感器的电压&#xff0c;将电压值换算成温度后&…...

Linux 命令大全完整版(12)

Linux 命令大全 5. 文件管理命令 ln(link) 功能说明&#xff1a;连接文件或目录。语  法&#xff1a;ln [-bdfinsv][-S <字尾备份字符串>][-V <备份方式>][--help][--version][源文件或目录][目标文件或目录] 或 ln [-bdfinsv][-S <字尾备份字符串>][-V…...

Python - 代码片段分享 - Excel 数据实时写入方法

文章目录 前言注意事项工具 pandas1. 简介2. 安装方式3. 简单介绍几个api 实战片段 - 实时写入Excel文件结束语 要么出众&#xff0c;要么出局 前言 我们在爬虫采集过程中&#xff0c;总是将数据解析抓取后统一写入Excel表格文件&#xff0c;如果在解析数据出现问题容易出现数据…...

(七)趣学设计模式 之 适配器模式!

目录 一、 啥是适配器模式&#xff1f;二、 为什么要用适配器模式&#xff1f;三、 适配器模式的实现方式1. 类适配器模式&#xff08;继承插座 &#x1f468;‍&#x1f469;‍&#x1f467;‍&#x1f466;&#xff09;2. 对象适配器模式&#xff08;插座转换器 &#x1f50c…...

DeepSeek 细节之 MoE

DeepSeek 细节之 MoE DeepSeek 团队通过引入 MoE&#xff08;Mixture of Experts&#xff0c;混合专家&#xff09; 机制&#xff0c;以“分而治之”的思想&#xff0c;在模型容量与推理成本之间找到了精妙的平衡点&#xff0c;其中的技术实现和细节值得剖思 Transformer 演变…...

【Linux-网络】从逻辑寻址到物理传输:解构IP协议与ARP协议的跨层协作

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长&#xff0c;行则将至 目录 &#x1f4da;前言 &#x1f4d6; IP地址的组成 &#x1f516;IPv4 &#x1f516;IPv6 &#x1f4da…...

毕业离校管理系统的开发与需求分析

在当今信息化的时代背景下&#xff0c;高校的毕业生离校管理工作也逐渐向数字化转型。为了提高工作效率&#xff0c;减少人为错误&#xff0c;增强信息透明度&#xff0c;毕业离校管理系统应运而生。该系统旨在为学校提供一个高效、准确的毕业生离校管理平台&#xff0c;从而提…...

【NLP 24、实践 ⑤ 计算Bert模型中的参数数量】

以前不甘心&#xff0c;总想争个对错&#xff0c;现在不会了 人心各有所愿&#xff0c;没有道理可讲 —— 25.1.18 计算Bert模型结构中的参数数量 BertModel.from_pretrained()&#xff1a;用于从预训练模型目录或 Hugging Face 模型库加载 BERT 模型的权重及配置。 参数名称…...

一、Spring框架系统化学习路径

系统化的Spring框架学习路径 第1阶段&#xff1a;基础知识准备 Java基础 核心概念&#xff1a;面向对象、异常处理、集合框架、多线程等。JVM基础&#xff1a;内存模型、垃圾回收机制。 Maven或Gradle Maven&#xff1a;创建项目、依赖管理、生命周期。Gradle&#xff1a;基本…...

Midscene.js - AI驱动,轻松实现UI自动化

UI自动化测试一直是软件测试中的一项重要任务&#xff0c;而随着AI技术的快速发展&#xff0c;自动化测试的能力也在不断提升。如何让UI自动化更智能、精准、灵活&#xff1f;Midscene.js作为一款AI驱动的UI自动化测试工具&#xff0c;正逐步改变着传统自动化测试的面貌。你是不…...

(九)Mapbox GL JS 中 Marker 图层的使用详解

什么是 Marker&#xff1f; 在 Mapbox GL JS 中&#xff0c;Marker&#xff08;标记&#xff09; 是一个可视化元素&#xff0c;用于在地图上标记特定的地理位置。它可以是一个默认的图标、自定义的图像&#xff0c;或者任何 HTML 元素。Marker 不仅能显示位置&#xff0c;还能…...

2k1000LA 使能 nand.

背景 : 默认的 发货的镜像 确实 是识别不了 nand 的。 ------------------------------------------------------------------------------------------ 但是 我之前 已经写好了文档,因此 拷贝到线上。 1 首先我要使能这几个。 在menuconfig 中使能一下。...

Junit+Mock

base project <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.11</version><relativePath/></parent><dependencies><!--添加mysql依…...

maven编译出错,javac: ��Ч��Ŀ�귢�а�: 17

1、异常信息 javac: &#xfffd;&#xfffd;Ч&#xfffd;&#xfffd;Ŀ&#xfffd;귢&#xfffd;а&#xfffd;: 17 &#xfffd;&#xfffd;: javac <options> <source files> -help &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;г&a…...

Vue使用Three.js加载glb (gltf) 文件模型及实现简单的选中高亮、测距、测面积

安装&#xff1a; # three.jsnpm install --save three 附中文网&#xff1a; 5. gltf不同文件形式(.glb) | Three.js中文网 附官网&#xff1a; 安装 – three.js docs 完整代码&#xff08;简易demo&#xff09;&#xff1a; <template><div class"siteInspe…...

<el-table>右侧有空白列解决办法

问题如图&#xff1a; 解决办法&#xff1a;.box 为本页面最外层的class名&#xff0c;保证各个页面样式不会互相污染。 .box::v-deep .el-table th.gutter {display: none;width: 0}.box ::v-deep.el-table colgroup col[namegutter] {display: none;width: 0;}.box::v-deep …...

Linux网络 网络层

IP 协议 协议头格式 4 位版本号(version): 指定 IP 协议的版本, 对于 IPv4 来说, 就是 4. 4 位头部长度(header length): IP 头部的长度是多少个 32bit, 也就是 4 字节&#xff0c;4bit 表示最大的数字是 15, 因此 IP 头部最大长度是 60 字节. 8 位服务类型(Type Of Service):…...

系统讨论Qt的并发编程——逻辑上下文的分类

目录 前言 首先&#xff0c;讨论Qt里常见的三种上下文 同一线程的串行执行 同一线程的异步执行 多线程的执行 moveToThread办法 前言 笔者最近看了一个具备一定启发性质的Qt教程&#xff0c;在这里&#xff0c;笔者打算整理一下自己的笔记。分享在这里. 首先&#xff0c…...

《Linux Shell 脚本深度探索:原理与高效编程》

1. 基本结构 Shebang 行 #!/bin/bash # Shebang 行指定了脚本使用的解释器。 /bin/bash 表示使用 Bash 解释器执行脚本。 注释 # 这是注释&#xff0c;不会被执行 2. 变量 定义变量 variable_namevalue # 不需要加 $ 来定义变量。 # 变量名不能包含空格或特殊字符。 访…...

深入剖析:基于红黑树实现自定义 map 和 set 容器

&#x1f31f; 快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。&#x1f31f; 在 C 标准模板库&#xff08;STL&#xff09;的大家庭里&#xff0c;map和set可是超级重要的关联容器成员呢&#x1f60e;&#x…...

AI专题学习笔记

token 提示词&#xff1a;零样本、少样本、链式思考、自动思维链、自我一致性、思维树(走迷宫)、 RAG(肯德基最新汉堡的口味)、Fine-tuning(7年时间学医)&#xff1a;用于提高语音模型在特定任务上的性能 向量&#xff1a;embedding 向量相似度计算&#xff1a;欧式距离、余弦相…...

客户反馈闭环体系怎么搭?6 个模块讲透流程设计思路

很多企业并不缺客户反馈&#xff0c;真正缺的是一条能跑通的闭环链路。客服在记&#xff0c;销售在提&#xff0c;客户成功在跟&#xff0c;产品也在收&#xff0c;但信息一旦分散&#xff0c;后面就很容易断掉&#xff1a;有人收&#xff0c;没人判&#xff1b;有人判&#xf…...

终极指南:3步让旧Mac免费运行最新macOS系统

终极指南&#xff1a;3步让旧Mac免费运行最新macOS系统 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否有一台被苹果"抛弃"的旧Mac&#xff…...

【LeetCode刷题日记】:字符串替换技巧揭秘

&#x1f525;个人主页&#xff1a;北极的代码&#xff08;欢迎来访&#xff09; &#x1f3ac;作者简介&#xff1a;java后端学习者 ❄️个人专栏&#xff1a;苍穹外卖日记&#xff0c;SSM框架深入&#xff0c;JavaWeb ✨命运的结局尽可永在&#xff0c;不屈的挑战却不可须臾或…...

SpringBoot多模块开发,启动类扫描不到SDK的Bean?试试这3种注入方式(含实战避坑)

SpringBoot多模块开发中Bean注入难题的3种实战解决方案 最近在重构一个电商后台系统时&#xff0c;我把通用功能抽离成了独立SDK模块。本以为引入依赖就能万事大吉&#xff0c;结果主项目启动时频频报NoSuchBeanDefinitionException。这才意识到&#xff0c;在多模块架构中&…...

从NOIP真题到算法竞赛:手把手教你用二分法求解一元三次方程(附C++代码与浮点精度处理)

从NOIP真题到算法竞赛&#xff1a;手把手教你用二分法求解一元三次方程&#xff08;附C代码与浮点精度处理&#xff09; 在算法竞赛的征途中&#xff0c;数学问题与编程技巧的融合往往成为区分选手水平的关键分水岭。一道看似简单的一元三次方程求解题&#xff0c;背后隐藏着算…...

SVG的DSP程序、FPGA程序、主板原理图及PCB与其他辅助板PCB的相关性

svg的dsp程序 FPGA程序 和主板原理图和pcb&#xff0c;其他辅助板的pcb&#xff0c;辅助板没有原理图 一、代码工程概述与核心定位 本次解析的代码工程来自SVG&#xff08;静止无功发生器&#xff09;的DSP控制模块&#xff0c;基于TI TMS320F28335芯片开发&#xff0c;核心功…...

提交的冲突解决:合并(merge)与变基(rebase)中的提交冲突处理

提交的冲突解决:合并(merge)与变基(rebase)中的提交冲突处理 昨天在调试一个嵌入式驱动时,遇到了一个典型场景:我本地的GPIO初始化代码刚改完,准备提交,结果发现队友已经把同一份文件的配置逻辑重构了。git pull 一下,终端里赫然跳出 CONFLICT (content) 的提示。这种时候…...

【AGI审计可信度生死线】:从GAAP到IFRS,6类会计估计场景中AGI决策偏差率超阈值的3个隐藏信号

第一章&#xff1a;AGI在财务分析与审计中的范式革命 2026奇点智能技术大会(https://ml-summit.org) 传统财务分析与审计长期受限于规则引擎的刚性、样本抽样的偏差以及人工复核的认知负荷。AGI的崛起正打破这一边界——它不再仅执行预设逻辑&#xff0c;而是具备跨模态理解财…...

从LSTM到LLM-to-Action:SITS2026发布游戏智能演进年表(2018–2026),标注3次范式跃迁时刻及对应算力/数据拐点)

第一章&#xff1a;SITS2026分享&#xff1a;AGI与游戏智能 2026奇点智能技术大会(https://ml-summit.org) AGI在游戏环境中的验证价值 通用人工智能&#xff08;AGI&#xff09;并非仅面向抽象推理任务&#xff0c;游戏世界正成为其核心验证场域。开放世界RPG、实时策略与多…...