19.内部温度传感器

news2024/11/16 2:57:26

1.STM32内部温度传感器介绍:

  • 内部温度传感器支持的温度范围为:-40~125度,精度为±1.5℃左右;
  • T(℃)={(V25-Vsense)/Avg_Slope}+25;
  • STM32的内部温度传感器是直接连接在ADC内部输入通道,在ADC1通道16连接的内部温度传感器;
  • V25的标准值是1.43V,Avg_Slope=4.3mv/℃;

                

 2.内部温度传感器配置步骤:

ADC相关库函数在stm32f10x_adc.c和stm32f10x_adc.h文件中;
  1. 初始化ADC_IN16相关参数,开启内部温度传感器:ADC_TempSensorVrefintCmd(ENABLE);
  2. 读取ADC_IN16 AD值,将其转换为对应温度;

3.内部温度传感器实验:

功能实现:通过芯片内部温度传感器读取温度,将读取的温度数据通过串口打印出来,LED0指示灯闪烁提示系统正常运行。

(1)主函数:

#include "delay.h"
#include "led.h"
#include "usart1.h"
#include "inner_temp.h"



int main(){
    
    u8 i=0;    
    int temp=0;
   
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);      //设置分组
    delay_init();                                        //延时初始化
    LED_Init();  
    usart1_Init(9600);                                   //串口通信初始化
    ADC_TEMP_Init();                                     //内部温度传感器初始化
   
    while(1)
       {
          i++;
          if(i%20==0)
          {
             LED0=!LED0;
          }

           delay_ms(10);
          
          if(i%100==0)        //1s
          {
             temp=Get_Temperture();                      //读取温度
             if(temp>=0)                                 //温度为正
             { 
                printf("内部温度传感器检测值:+");
             }
             else if(temp<0)                             //温度为负
             {
                printf("内部温度传感器检测值:-");
             }
            
            printf("%.2f ℃\r\n",(float)temp/100);        //温度的值
            printf("\r\n");
                
          }
       
      }       
}

(2)头文件:

#ifndef __INNER_TEMP_H
#define __INNER_TEMP_H


typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;

void ADC_TEMP_Init(void);                          //初始化内部温度传感器 
u16 Get_ADC_Temp_Value(u8 ch,u8 times);            //读取ADC的电压值
int Get_Temperture(void);                          //读取温度



#endif

(3)内部温湿度传感器功能函数:

#include  "stm32f10x.h"
#include  "delay.h"
#include  "inner_temp.h"



/*
   功能:内部温度传感器初始化
   变量:无
   返回值:无
*/
void ADC_TEMP_Init(void)
{
   ADC_InitTypeDef ADC_InitStruct;
   
   
   //1.使能ADC时钟;
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
   
   //2.设置ADC的分频因子
   RCC_ADCCLKConfig(RCC_PCLK2_Div6);
   
   //3.开启内部温度传感器
   ADC_TempSensorVrefintCmd(ENABLE);
   
   //4.初始化ADC参数
   ADC_InitStruct.ADC_ContinuousConvMode=DISABLE;                             //不连续转换
   ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right;                          //对齐方式->右对齐
   ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;             //不使用外部触发,使用软件触发
   ADC_InitStruct.ADC_Mode=ADC_Mode_Independent;                              //独立模式
   ADC_InitStruct.ADC_NbrOfChannel=1;                                         //通道数量->1
   ADC_InitStruct.ADC_ScanConvMode=DISABLE;                                   //不扫描
   ADC_Init(ADC1,&ADC_InitStruct);
   
   //5.使能ADC校准
   ADC_Cmd(ADC1,ENABLE);                                                      //使能ADC1
   
   ADC_ResetCalibration(ADC1);                                                //开启复位校准
   while(ADC_GetResetCalibrationStatus(ADC1));                                //判断复位校准是否完成,完成则结束循环
   
   ADC_StartCalibration(ADC1);                                                //开启校准
   while(ADC_GetCalibrationStatus(ADC1));                                     //判断开启校准是否完成,完成则结束循环
   
   //6.开启软件触发
   ADC_SoftwareStartConvCmd(ADC1,ENABLE);                         
   
}



/*
   功能:读取ADC的电压值
   变量:ch:通道    times:采集次数
*/
u16 Get_ADC_Temp_Value(u8 ch,u8 times)
{
   u8 i=0;
   u16 temp_val=0;
   
   //设置ADC规则通道
   ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);       //ADC选择、通道、通道数量、采样周期
   
   //读取ADC的值
   for(i=0;i<times;i++)
   {
      ADC_SoftwareStartConvCmd(ADC1,ENABLE);                   //开启软件触发,因为使用的是单次转换因此每次转换都需要开启
      while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));            //判断规则组是否转换完成
      temp_val+=ADC_GetConversionValue(ADC1);
      delay_ms(10);
   }
   
   return temp_val/times;              //对返回的数据进行滤波
     
}



/*
   功能:读取温度
   变量:无
   返回值:读取的温度
*/
int Get_Temperture()
{
   u16 adc_value=0;                 //存储获取到的ADC值
   float temp_val=0.0f;             //存储电压值
   float temperture=0.0f;           //
   int temp=0;
   
   
   adc_value=Get_ADC_Temp_Value(ADC_Channel_16,20);          //获取ADC的值
   
   temp_val=(float)adc_value*(3.3/4096);                     //将ADC值转换为电压值
   
   temperture=(1.43-temp_val)/0.0043+25;                     //将电压值转换为温度值
   
   temp=temperture*100;                                      //将温度放大100倍
               
   return temp;
   
}


(4)实验结果:

 

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

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

相关文章

Django基础入门⑬:Cookie和Session详讲和Django HTML表单实战讲解

Django基础入门⑫&#xff1a;Django 对象查询详解&#xff0c;分组聚合 Cookie和SessionCookie简述Session使用Session的定义理解Session的作用 Session配置Session的基本操作Session在settings.py中的配置Cookie和Session的区别 Django HTML表单实战HTML表单实现用户的登录实…

基于混沌集成决策树的电能质量复合扰动识别(matlab代码)

目录 1 主要内容 2 部分代码 3 程序结果 4 程序链接 1 主要内容 该程序参考《基于混沌集成决策树的电能质量复合扰动识别》&#xff0c;主要做的是S变换电能质量扰动识别&#xff0c;通过S变换对电能质量扰动&#xff08;谐波&#xff0c;闪变&#xff0c;暂升等单一扰动和…

15 | 边界:微服务的各种边界在架构演进中的作用?

目录 演进式架构 微服务还是小单体&#xff1f; 微服务边界的作用 逻辑边界 物理边界 代码边界 正确理解微服务的边界 总结 那重点落到边界的时候&#xff0c;总结一下就是&#xff0c;微服务的设计要涉及到逻辑边界、物理边界和代码边界等等。 那么这些边界在微服务架…

vue清除地址栏参数(可以单个,可以多个)

需求 vue跳转新页面后&#xff0c;清除url里面的参数&#xff0c;就是上一个页面带过来的参数&#xff0c;只用一次 mounted () {this.$nextTick(() > {let url this.getnewurl()window.history.replaceState(null, null, url);})},methods: { //根据参数名去清除&#xf…

深度学习训练营之调用Gensim来训练Word2Vec模型

深度学习训练营之调用Gensim来训练Word2Vec模型 原文链接环境介绍前置工作下载Gensim库对于原始语料进行分词添加停用词 模型训练模型介绍模型正式训练 计算词频 原文链接 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#…

C#:了解LINQ,简化数据查询和操作的强大工具

文章目录 linq关键字fromwhereselectorderbyjoingroupletinto linq方法筛选方法WhereOfType 排序方法&#xff1a;OrderByOrderByDescendingThenByThenByDescending 投影方法&#xff1a;SelectSelectMany 分组方法&#xff1a;GroupBy 连接方法&#xff1a;JoinGroupJoin 聚合…

高效方案:30万条数据插入 MySQL 仅需13秒

本文主要讲述通过MyBatis、JDBC等做大数据量数据插入的案例和结果。 30万条数据插入插入数据库验证 实体类、mapper和配置文件定义 User实体 mapper接口 mapper.xml文件 jdbc.properties sqlMapConfig.xml 不分批次直接梭哈 循环逐条插入 MyBatis实现插入30万条数据 J…

SpringBoot 集成 MybatisPlus 一——介绍

MybatisPlus 是 Mybatis 的升级版本&#xff0c;是对 Mybatis 的简化&#xff0c;因为他们的口号就是“为简化开发而生”。 1、创建数据表 CREATE TABLE ​​User​​ ( ​​id​​ INT NOT NULL, ​​username​​ VARCHAR(50) NULL DEFAULT NULL, ​​gendar​​ CHAR(2) NU…

了解微服务架构

微服务架构 软件架构历史 Software As A Service&#xff0c;这不仅仅是⼀个理念&#xff0c;它更多释放的是企业在新⼀轮的市场竞争中&#xff0c;如何使⽤轻量级的组织架构和新的软件架构来更好的服务企业⾯向未来的战略调整和市场定位&#xff0c;从⽽赢得未来的市场空间。…

【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(7 月 6 日论文合集)

文章目录 一、分割|语义相关(15篇)1.1 Prompting Diffusion Representations for Cross-Domain Semantic Segmentation1.2 ZJU ReLER Submission for EPIC-KITCHEN Challenge 2023: Semi-Supervised Video Object Segmentation1.3 Multi-Modal Prototypes for Open-Set Semanti…

基于YOLO的3D人脸关键点检测方案

目录 前言一、任务列表二、3D人脸关键点数据H3WB2.下载方法3.任务4.评估5.使用许可 3DFAWAFLW2000-3D 三、3D关键点的Z维度信息1.基于3DMM模型的方法2.H3WB 四、当前SOTA的方法1.方法1 五、我们的解决方法1.数据转为YOLO格式2.修改YOLO8Pose的入口出口3.开始训练&#xff0c;并…

aardio 的addHeaders请求

aardio群 625494397 废话不多说 直接开干&#xff01; import web.json; import console; import inet.whttp; web.json.parse( json );//转化json格式 h.addHeaders {Accept-Encoding gzip, deflate, br;Accept-Language zh-CN,zh;q0.9;User-Agent Mozilla/5.0 (Windows …

浅谈智能照明控制管理系统的功能介绍

安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;智能照明控制系统较好地实现了智能控制、人性化照明和节能降耗的功能,使其在楼宇控制领域变得越来越重要,越来越受到人们的重视。本文介绍了智能照明控制系统的概念、特点、优势、发展方向等内容,并着重对智能照明控制…

多个项目的进度管理:掌握这3点,轻松应对

在现代的企业竞争中&#xff0c;许多企业组织都会同时进行多个项目。而有效的进度管理对于确保项目按时交付和优化资源利用至关重要。那么有哪些方法可以帮助项目管理者掌握多个项目的进度管理呢&#xff1f; 一&#xff1a;明确目标和优先级 在管理多个项目时&#xff0c;明确…

windows系统使用nvm实现多版本node切换

介绍nvm 是 node version manager&#xff08;node 版本管理工具&#xff09;的缩写&#xff0c;是一个命令行工具&#xff0c;用于管理和切换到不同版本的 node.js。 不同的项目可能需要不同版本的 node.js 和 npm&#xff08;node 包管理器&#xff09;&#xff0c;例如&…

增强型视觉系统 (EVS)

增强型视觉系统 EVS 1、增强型视觉系统概览2、车载相机 HAL2.1 EVS 应用2.2 EVS 管理器2.3 EVS HIDL 接口2.4 内核驱动程序 《增强型视觉系统 (EVS) 1.1 集成指南》 车载相机 HAL 1、增强型视觉系统概览 为了增强视频串流管理和错误处理&#xff0c;Android 11 更新了车载相机…

OD查找偏移表达式

1、在CE中先找到血地址2DF94C28 2、在od数据段dd 血地址 dd 2DF94C28查找到数据 3、在血地址位置右键-断点-硬件访问-DWORD&#xff0c;再操作游戏会再改变这个地址代码段下断点&#xff0c;查找到 4、验证查找的是否正确&#xff0c;在8199FA处下断点&#xff0c;dd edi288处…

github port 22 connection refused 不通过科学上网连接不上问题

原因是用密钥连接github走的是ssh&#xff0c;ssh默认端口是22没有加密&#xff0c;github不让走22 解决办法是在 ~/.ssh/config里添加 Host github.com Hostname ssh.github.com Port 443 让ssh连github的时候走443端口&#xff0c;TLS加密的 ssh -T gitgithub.com 说明已…

Docker深入

一、简介 Docker是一个用于构建、运行、传送应用程序的平台。 2、为什么使用Docker 在部署服务器过程中&#xff0c;配置各种环境变量、第三方依赖等等&#xff0c;耗费时间太长&#xff0c;使用Docker可以将他们打包成一个集装箱&#xff0c;只要在开发环境中运行成功&…

Hive 复习重点

文章目录 特点SQL查询转换成MR作业的过程内部表 & 外部表 & 分区表 & 分桶表内部表外部表分区表 分桶表DQL语法性能优化SQL语句优化数据格式化 ORC, Parquet列式存储小文件过多优化并行执行优化JVM 优化推测执行行列过滤limit 限制本地模式(开启MR&#xff0c;单机…