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系列: 从数据手册中可以找到V25和Avg_Slope F4、F7、H7系列只是标准值不同,自行查阅手册 三、实验简要 1、功能描述 通过ADC1通道16采集芯片内部温度传感器的电压,将电压值换算成温度后&…...
Linux 命令大全完整版(12)
Linux 命令大全 5. 文件管理命令 ln(link) 功能说明:连接文件或目录。语 法:ln [-bdfinsv][-S <字尾备份字符串>][-V <备份方式>][--help][--version][源文件或目录][目标文件或目录] 或 ln [-bdfinsv][-S <字尾备份字符串>][-V…...
Python - 代码片段分享 - Excel 数据实时写入方法
文章目录 前言注意事项工具 pandas1. 简介2. 安装方式3. 简单介绍几个api 实战片段 - 实时写入Excel文件结束语 要么出众,要么出局 前言 我们在爬虫采集过程中,总是将数据解析抓取后统一写入Excel表格文件,如果在解析数据出现问题容易出现数据…...
(七)趣学设计模式 之 适配器模式!
目录 一、 啥是适配器模式?二、 为什么要用适配器模式?三、 适配器模式的实现方式1. 类适配器模式(继承插座 👨👩👧👦)2. 对象适配器模式(插座转换器 🔌…...
DeepSeek 细节之 MoE
DeepSeek 细节之 MoE DeepSeek 团队通过引入 MoE(Mixture of Experts,混合专家) 机制,以“分而治之”的思想,在模型容量与推理成本之间找到了精妙的平衡点,其中的技术实现和细节值得剖思 Transformer 演变…...
【Linux-网络】从逻辑寻址到物理传输:解构IP协议与ARP协议的跨层协作
🎬 个人主页:谁在夜里看海. 📖 个人专栏:《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长,行则将至 目录 📚前言 📖 IP地址的组成 🔖IPv4 🔖IPv6 📚…...
毕业离校管理系统的开发与需求分析
在当今信息化的时代背景下,高校的毕业生离校管理工作也逐渐向数字化转型。为了提高工作效率,减少人为错误,增强信息透明度,毕业离校管理系统应运而生。该系统旨在为学校提供一个高效、准确的毕业生离校管理平台,从而提…...
【NLP 24、实践 ⑤ 计算Bert模型中的参数数量】
以前不甘心,总想争个对错,现在不会了 人心各有所愿,没有道理可讲 —— 25.1.18 计算Bert模型结构中的参数数量 BertModel.from_pretrained():用于从预训练模型目录或 Hugging Face 模型库加载 BERT 模型的权重及配置。 参数名称…...
一、Spring框架系统化学习路径
系统化的Spring框架学习路径 第1阶段:基础知识准备 Java基础 核心概念:面向对象、异常处理、集合框架、多线程等。JVM基础:内存模型、垃圾回收机制。 Maven或Gradle Maven:创建项目、依赖管理、生命周期。Gradle:基本…...
Midscene.js - AI驱动,轻松实现UI自动化
UI自动化测试一直是软件测试中的一项重要任务,而随着AI技术的快速发展,自动化测试的能力也在不断提升。如何让UI自动化更智能、精准、灵活?Midscene.js作为一款AI驱动的UI自动化测试工具,正逐步改变着传统自动化测试的面貌。你是不…...
(九)Mapbox GL JS 中 Marker 图层的使用详解
什么是 Marker? 在 Mapbox GL JS 中,Marker(标记) 是一个可视化元素,用于在地图上标记特定的地理位置。它可以是一个默认的图标、自定义的图像,或者任何 HTML 元素。Marker 不仅能显示位置,还能…...
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: ��Ч��Ŀ�귢�а�: 17 ��: javac <options> <source files> -help �����г&a…...
Vue使用Three.js加载glb (gltf) 文件模型及实现简单的选中高亮、测距、测面积
安装: # three.jsnpm install --save three 附中文网: 5. gltf不同文件形式(.glb) | Three.js中文网 附官网: 安装 – three.js docs 完整代码(简易demo): <template><div class"siteInspe…...
<el-table>右侧有空白列解决办法
问题如图: 解决办法:.box 为本页面最外层的class名,保证各个页面样式不会互相污染。 .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 字节,4bit 表示最大的数字是 15, 因此 IP 头部最大长度是 60 字节. 8 位服务类型(Type Of Service):…...
系统讨论Qt的并发编程——逻辑上下文的分类
目录 前言 首先,讨论Qt里常见的三种上下文 同一线程的串行执行 同一线程的异步执行 多线程的执行 moveToThread办法 前言 笔者最近看了一个具备一定启发性质的Qt教程,在这里,笔者打算整理一下自己的笔记。分享在这里. 首先,…...
《Linux Shell 脚本深度探索:原理与高效编程》
1. 基本结构 Shebang 行 #!/bin/bash # Shebang 行指定了脚本使用的解释器。 /bin/bash 表示使用 Bash 解释器执行脚本。 注释 # 这是注释,不会被执行 2. 变量 定义变量 variable_namevalue # 不需要加 $ 来定义变量。 # 变量名不能包含空格或特殊字符。 访…...
深入剖析:基于红黑树实现自定义 map 和 set 容器
🌟 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。🌟 在 C 标准模板库(STL)的大家庭里,map和set可是超级重要的关联容器成员呢😎&#x…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
