玩转STM32CubeMX | 内部温度传感器

最新更新时间:2021-10-14来源: eefocus关键字:STM32CubeMX  内部温度传感器 手机看文章 扫描二维码
随时随地手机看文章

1.内部温度传感器简介

STM32F1有一个内部的温度传感器,可以用来测量CPU及周围的温度。该温度传感器在内部和ADCx_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值,温度传感器模拟输入推荐采样时间是17.1us,内部温度传感器支持的温度范围为:-40~125℃,精度为±1.5℃左右

通过读取ADC通道16的值,通过如下计算公式即可算出当前温度:


T = { (V25 - Vsense) / Avg_Slope } + 25

上式中:


V25 = Vsense在25℃时的数值(典型值为:1.43)

Avg_Slope = 温度与Vsense曲线的平均斜率(典型值为:4.3 mV/℃)

以上典型值请参考数据手册的电气特性章节中的介绍

2.硬件设计

本实验通过ADC1通道16采集内部温度,将采样的AD值和转换后的温度值通过USART1串口打印出来,同时D1指示灯闪烁,提示系统正常运行


*指示灯D1

 

*USART1串口

 

*ADC1_INT1


3.软件设计

3.1 STM32CubeMX设置


➡️ RCC设置外接HSE,时钟设置为72M,ADC预分频因子设置为6,ADC_CLK为12MHz


➡️ PC0设置为GPIO推挽输出模式、上拉、高速、默认输出电平为高电平


➡️ USART1选择为异步通讯方式,波特率设置为115200Bits/s,传输数据长度为8Bit,无奇偶校验,1位停止位


➡️ 激活ADC1温度传感器通道,设置右对齐,关闭扫描、连续及间断模式,使能regular conversion,设置软件触发、设置采样时间239.5个周期(19.96us)


➡️输入工程名,选择路径(不要有中文),选择MDK-ARM V5;勾选Generated periphera initialization as a pair of ‘.c/.h’ files per IP ;点击GENERATE CODE,生成工程代码


3.2 MDK-ARM软件编程

➡️ 在adc.c文件中可以看到ADC初始化函数


void MX_ADC1_Init(void){

  ADC_ChannelConfTypeDef sConfig = {0};

  /** Common config */

  hadc1.Instance = ADC1;

  hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;

  hadc1.Init.ContinuousConvMode = DISABLE;

  hadc1.Init.DiscontinuousConvMode = DISABLE;

  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;

  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;

  hadc1.Init.NbrOfConversion = 1;

  if (HAL_ADC_Init(&hadc1) != HAL_OK){

    Error_Handler();

  }

  /** Configure Regular Channel*/

  sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;

  sConfig.Rank = ADC_REGULAR_RANK_1;

  sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;

  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK){

    Error_Handler();

  }

}


void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle){

  if(adcHandle->Instance==ADC1)  {

    /* ADC1 clock enable */

    __HAL_RCC_ADC1_CLK_ENABLE();

  }

}


➡️ 在主函数while循环中添加如下测试程序


while (1){

  HAL_ADC_Start(&hadc1); //启动ADC转换

  //等待转换完成,10ms表示超时时间

  HAL_ADC_PollForConversion(&hadc1,10);

  //读取ADC转换数据(12位数据)

  AD_Value = HAL_ADC_GetValue(&hadc1);

  printf("ADC1_IN16 ADC value: %drn",AD_Value);

  //AD值乘以分辨率即为电压值

  Vol_Value = AD_Value*(3.3/4096);

  printf("ADC1_IN16 VOL value: %.2fVrn",Vol_Value);

  //根据公式算出温度值

  Temperature = (1.43 - Vol_Value)/0.0043 + 25;

  printf("MCU Internal Temperature: %.2f¡ærn",Temperature);

  printf("rn");

  

  HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);

  HAL_Delay(1000);

}


4.下载验证

编译无误后下载到开发板,可以看到系统运行时D1指示灯不断闪烁,串口不断的打印读取的温度数据

关键字:STM32CubeMX  内部温度传感器 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic545731.html

上一篇:STM32的内部温度传感器
下一篇:意法半导体的STM32U5通用MCU取得PSA 3级和SESIP3安全认证

推荐阅读

STM32CubeMX 下载和安装 详细教程
STM32CubeMX 下载步骤1:点击官网链接下载官网下载地址:https://www.st.com/en/development-tools/stm32cubemx.html步骤2:点击 Get Software步骤3:选择 Windows 系统,点击 Get latest步骤4:点击 ACCEPT步骤5:填写个人信息步骤6:在刚刚填写的邮箱中,点击下载链接步骤7:下载完成步骤8:解压后,就是安装软件STM32CubeMX 安装步骤1:双击安装软件步骤2:点击Next步骤3:勾选同意,然后点击Next步骤4:勾选第一个,然后点击Next步骤5:选择安装路径,然后点击Next步骤6:默认设置,然后点击Next步骤7:安装中。。。步
发表于 2022-09-22
<font color='red'>STM32CubeMX</font> 下载和安装 详细教程
Keil MDK STM32系列(五) 使用STM32CubeMX创建项目基础结构
概述从前面介绍的STM32开发可以感受到, 虽然SPL对于纯寄存器方式开发已经是很大的进步, SPL将大部分寄存器配置做了很好的封装, 配置项简单易读, 但是外设与输出脚的映射关系, 配置项的数量, 配置之间的关联都使得配置难度并未降低, 在项目启动阶段依然要通过不断查阅MCU的用户手册去修改方案, 各种情况下的代码例程直接借鉴容易出错, 需要反复尝试, 往往在调通外设这一步就已经耗费了开发人员的大量时间.所以ST将开发库的重心迁移到了HAL上, 配合HAL的就是STM32CubeMX这个图形化配置工具. 通过图形化界面, 通过预设的逻辑辅助生成代码模板. 这样可以将底层寄存器和外设的复杂定义和逻辑包装在工具界面之下, 避免开发人员
发表于 2022-08-15
STM32CubeMX知识点
System CoreRCC高速外部时钟(HSE)选择:旁路时钟源(BYPASS Clock Source) : 也就是外部时钟源石英/陶瓷 晶振(Crystal/Ceramic Resonator)SYSSYS模块主要为调试选项Serial Wire : 通过SWD协议下载调试JTAG : 通过JTAG协议下载调试Trace Asynchonous Sw : SWD协议追踪功能JTAG with Trace Synchro : JTAG协议追踪功能
发表于 2022-08-08
<font color='red'>STM32CubeMX</font>知识点
STM32基础1--STM32CubeMx项目配置
1.0:选择STM芯片 启动STM32CubeMx之后,点击File->New Project ,本人使用的是正点原子探索者STM32F407的开发版,因此在搜索栏输入芯片STM32F407ZGT6,然后双击,然后完成新建项目。 注:如果不知道开发板的芯片,可以查看供应商给的原理图或者直接看芯片的标识,建议最好看直接看芯片的标识。2.0:设置RCC3.0:设置SYS 注:在BUG里面有很多选项,根据自己开发板的接口选择,由于SWD(Serial Wire Debug)接线简单,现在市场的上开发板基本都是由于这个接口。4.0:硬件配置 正点原子探索者开发板中,有两个LED与4个按键5.0:配置引脚1)设置
发表于 2022-07-25
STM32基础1--STM32CubeMx项目配置
STM32CubeMX-多通道ADC-DMA-circular 传输
一,CubeMX生成工程1,配置ADC引脚2,时钟配置3,ADC配置4,打开中断5,DMA配置(这里选择 halfword 应该也可以,程序里面对应存储adc数据的变量也为halfword u16即可)6,中断配置红色标注为注意点,不清楚原理,ADC中断和DMZ的关系有待探明。7,生成代码二,添加代码数字标注处为添加部分/** ****************************************************************************** * File Name : main.c * Date : 12/07/2018 09:41:40 * Description
发表于 2022-07-18
STM32CubeMX-多通道ADC-DMA-circular 传输
基于STM32战舰开发板的内部温度传感器实验
内部温度传感器简介测量的温度位置内部温度传感器集成在芯片中,测量的是芯片的温度。如何测量对应位置的温度?温度传感器与ADC1_CH16相连,另外ADC1_CH17是与内部参照电压VREF+相连,因此我们可以通过ADC1的第16路通道测量芯片温度实时对应的电压转换得来的数字量,也可以通过ADC1的第17路通道测量内部参照电压对应的数字量。我们知道STM32的ADC转换DATA是12Bits的,因此输入电压(小于3.3V大于0V)ADC转换为数字量的值为“大于0小于4096”。我们由“T-V关系图”,“V的数字量”和“ADC量程”,可以得知“此时的温度”。内部传感器配置注意事项① 读取内部温度传感器数据的周期应大于17.1us;② 内部
发表于 2022-05-31
基于STM32战舰开发板的<font color='red'>内部</font><font color='red'>温度传感器</font>实验

推荐帖子

pcie_3.0_总线规范.pdf
pcie_3.0_总线规范.pdf pcie_3.0_总线规范.pdf
zxopenljx EE_FPGA学习乐园
无“疫”为报,“仪”旧换新,RIGOL特推出仪器换购活动
无“疫”为报,“仪”旧换新草长莺飞,春暖花开春天如期而至为回馈与RIGOL并肩同行的客户及伙伴RIGOL特推出“无‘疫’为报,‘仪’旧换新”的仪器换购活动您拥有的RIGOL旧仪器可升级至RIGOL新产品最多可获所购新品45%的折价优惠最高可省40000+元怎么换?假如您有一台MSO4054,想换购1台市场价为¥78,800的RIGOL新品MSO8064
eric_wang 综合技术交流
求9B96开发板的uCOS-ii代码
求9B96开发板的uCOS-ii代码,好使的求9B96开发板的uCOS-ii代码
wzp2007 微控制器 MCU
键盘扫描电路设计源程序
FPGA键盘扫描电路设计源程序 键盘扫描电路设计源程序
醉不诉离殇 EE_FPGA学习乐园
移动电源质量良莠不齐,到底该如何区分?
如果了解移动电源的朋友应该知道移动电源内部锂离子电池根据所用电解质材料的不同,可以分为液态锂离子电池(LIB)和聚合物锂离子电池(LIP)两大类。 二者所用的正负极材料是相同的,正极材料包括钴酸锂、镍钴锰和磷酸铁锂材料三种,负极为石墨,电池的工作原理也基本一致。它们的主要区别在于电解质的不同,其中液态锂离子电池使用的是液体电解质,聚合物锂离子电池则以固体聚合物电解质来代替。 而移动电源的优劣有一个最为重要的因素,那就是移动电源的电芯,市面上的移动电源电芯良莠不齐,所以导致市场
木犯001号 电源技术
简述第三代半导体
第三代半导体、宽能隙是什么? 讲到第三代半导体,首先简单介绍一下第一、二代半导体。在半导体材料领域中,第一代半导体是「硅」(Si),第二代半导体是「砷化镓」(GaAs),第三代半导体(又称「宽能隙半导体」,WBG)则是「碳化硅」(SiC)和「氮化镓」(GaN)。 宽能隙半导体中的「能隙」(Energygap),如果用最白话的方式说明,代表着「一个能量的差距」,意即让一个半导体「从绝缘到导电所需的最低能量」。 第一、二代半导体的硅与砷化镓属于低能隙材料,数值分别为1.12eV和1.43
吾妻思萌 分立器件
小广播
设计资源 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved