STM32H750外设ADC之MCU内部温度传感器

embedded/2024/10/22 10:56:44/

目录

概述

1. 内部温度传感器

1.1 功能介绍

1.2 读取温度方法

1.3 计算温度值

2 STM32Cube生成工程

2.1 配置参数

2.2 生成工程文件 

3 功能实现 

3.1 初始化ADC

3.2 功能函数

4 测试 


代码下载地址:

stm32-h750-proj-ADC-Read-temp资源-CSDN文库

概述

本文主要介绍关于使用STM32H750外设ADC读取MCU内部温度传感器的方法,文中首先介绍STM32H750内部温度传感器的读取原理,实现方法。并使STM32Cube工具设计一个工程,以实现读取温度数据的功能。

1. 内部温度传感器

1.1 功能介绍

温度传感器可测量器件的结温 (TJ),温度范围为 -40 °C 到 125 °C。温度传感器内部连接到 ADC3 VINP[18] 输入通道,该通道用于将传感器输出电压转换为数字值。温度传感器模拟引脚的采样时间必须大于产品数据手册中指定的稳定时间。不使用时可将传感器置于掉电模式。

注意:必须将 VSENSEEN 位置 1 才能使能内部通道 ADC3 VINP[18] 的转换(温度传感器, VSENSE)。

ADC x 通用控制寄存器 (ADCx_CCR)( x=12 或 3)
ADC x common control register
偏移地址: 0x08(该偏移地址与主 ADC 基址 + 0x300 相关)
复位值: 0x0000 0000
ADC1 和 ADC2 由相同的接口控制,而 ADC3 单独控制。
 

位 23 VSENSEEN:温度传感器电压使能 (Temperature sensor voltage enable)
此位由软件置 1 和清零,用于控制 VSENSE 通道。
0:禁止温度传感器通道
1:使能温度传感器通道


注意:

仅当 ADC 已禁止时(ADCAL=0、 JADSTART=0、 ADSTART=0、 ADSTP=0、 ADDIS=0且 ADEN=0),才允许通过软件对此位执行写操作。
 

1.2 读取温度方法

读取温度数据的操作步骤如下:

step-1:   选择 ADC3 VINP[18] 输入通道(使用合适的采样时间)。
step-2:   设定合适的采样时间(请参见器件数据手册中的电气特性部分)。
step-3:    在 ADCx_CCR 寄存器中将 VSENSEEN 位置 1,以便将温度传感器从掉电模式中唤醒。
step-4:   开始 ADC 转换。
step-5:   读取 ADC 数据寄存器中生成的 VSENSE 数据

1.3 计算温度值

使用以下公式计算实际温度:

参数说明:

TS_CAL2 :是在 110°C 下获得的温度传感器校准值
TS_CAL1: 是在 30°C 下获得的温度传感器校准值
TS_DATA: 是由 ADC 转换得到的实际温度传感器输出值

2 STM32Cube生成工程

2.1 配置参数

1) 使能温度传感器功能

2)配置通道参数

3)ADC模块工作时钟配置

 

2.2 生成工程文件 

完成参数配置后,点击GENERATE生成项目工程,项目产生后,打开项目文件:

3 功能实现 

3.1 初始化ADC

在adc.c文件中,已经实现ADC通道的初始化,下面详细介绍每条语句的含义

代码45行: 使用ADC3实现AD转换功能

代码46行: 数据位为16bit

代码47行: 禁止扫描功能

代码48行: 单通道转换

代码49行: 禁止低功耗自动延迟特性

代码50行:  禁止不连续模式 

代码51行:  禁止不连续模式,此位无效

代码52行:使用连续转换模式

代码53行:采用软件触发 

代码54行:采用软件触发,此位无效

代码55行:数据存放在DR

代码56行: ADC转换溢出的话,覆盖ADC的数据寄存器 

代码57行: 数据不偏移

代码58行: 禁止过度采样

代码59行: 初始化ADC功能

代码66行:采样通道为ADC_CHANNEL_TEMPSENSOR

代码67行:采样序列里的第1个

代码68行:采样周期 

代码69行:单端输入

代码70行:无偏移

代码71行:无偏移的情况下,此参数忽略

代码72行:禁止有符号饱和 

代码73行: 初始化通道参数

3.2 功能函数

代码60行:启动ADC转换数据

代码61行:等待数据转换完成

代码62行:获取ADC转换的结果

代码63行:判断数据转换的状态

代码67行:计算实际温度值

代码72行:如果本次数据转换失败,关闭ADC,准备下次重新启动ADC

详尽代码如下:

void test_get_adc_tempvalue( void )
{uint16_t TS_CAL1;uint16_t TS_CAL2;HAL_StatusTypeDef status;uint32_t value;float conv_value;HAL_ADC_Start( &hadc3 );status = HAL_ADC_PollForConversion( &hadc3, 100);value = HAL_ADC_GetValue( &hadc3 );if( status == HAL_OK) {TS_CAL1 = *(__IO uint16_t *)(0x1FF1E820);TS_CAL2 = *(__IO uint16_t *)(0x1FF1E840);conv_value = (110.0 - 30.0) * (value - TS_CAL1)/ (TS_CAL2 - TS_CAL1) + 30;  printf(" get conv_value: %04f \r\n", conv_value);}else{HAL_ADC_Stop( &hadc3 );}
}

4 测试 

编写完成代码后编译,下载代码至板卡,并在PC上打开终端工具,监控运行结果:


http://www.ppmy.cn/embedded/10675.html

相关文章

FPGA ——Verilog语法示例

FPGA ——Verilog语法示例 多模块定义条件判断 多模块定义 genvar i ;generatefor (i0 ; i<8; ii1)beginxdc xdc_u(.d1 (d1 ) ,.d2 (d2 ) ,.d3 (d3 ));end endgenerate条件判断 generate beginif(DEBUG "ON")beginila ila_u(.clk(clk),.probe0({A1,A2,A3,A4}))…

MySQL数据库——11、MySQL LIKE 子句

在 MySQL 中 LIKE 子句用于在查询中进行模糊匹配,以查找符合特定模式的数据。 LIKE 子句通常与 % 和 _ 通配符一起使用,其中 % 表示零个或多个字符,_ 表示一个字符。 SELECT column1, column2, ... FROM table_name WHERE column_name LIKE pattern; 在这个语法中,colu…

Project4 BlackJack

Overview 这是一个简单的Python实现的21点&#xff08;Blackjack&#xff09;游戏。以下是代码的主要部分和功能解释&#xff1a; 1. main() 函数&#xff1a;主要的游戏逻辑在这里。它包括处理玩家的赌注、发牌、处理玩家和庄家的动作、判断输赢等。 2. getBet() 函数&…

OpenHarmony网络协议通信c-ares [交叉编译]异步解析器库

简介 c-ares是异步解析器库&#xff0c;适用于需要无阻塞地执行 DNS 查询或需要并行执行多个 DNS 查询的应用程序。 下载安装 直接在OpenHarmony-SIG仓中搜索c-ares并下载。 使用说明 以OpenHarmony 3.1 Beta的rk3568版本为例 将下载的c-ares库代码存在以下路径&#xff1a;…

Java、Spring、Dubbo三者SPI机制原理与区别

Java、Spring、Dubbo三者SPI机制原理与区别 什么是SPI SPI全称为Service Provider Interface&#xff0c;是一种动态替换发现的机制&#xff0c;一种解耦非常优秀的思想&#xff0c;SPI可以很灵活的让接口和实现分离&#xff0c;让api提供者只提供接口&#xff0c;第三方来实…

LED灯降压恒流驱动芯片5~60v输出1.5A大电流AP51656

产品描述 AP51656是一款连续电感电流导通模式的降压恒流源&#xff0c;用于驱动一颗或多颗串联LED输入电压范围从 5 V 到 60V&#xff0c;输出电流 最大可达 1.5A 。根据不同的输入电压和外部器件&#xff0c; 可以驱动高达数十瓦的 LED。 内置功率开关&#xff0c;采用高端电…

《史铁生》-随记

史铁生的文案进一段总是刷到&#xff0c;文字在某些时候真的是一种无形的动力。小时候学过的书&#xff0c;长大了才会更加理解其中的蕴意。如看到的文字所说&#xff0c;教育具有长期性和滞后性&#xff0c;就像一个闭环&#xff0c;多年后你有一个瞬间突然意识到什么&#xf…

logback添加日志行号

logback打印行号 全量配置如下 在包名后面添加\(%F:%L\\)这样打印的日志是带类名加行号&#xff0c;支持 ide 点击跳转(xxx.main.java:18)精简配置如下 打印全量类占用显示位置去掉主类名直接打印行号%clr(%4.4L{4})这样打印的日志只是加行号解释&#xff1a;%4&#xff1a;这…