901|2

55

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【STM32H7S78-DK】内部温度传感器读取 [复制链接]

 
开发环境:
IDE:MKD 5.38a
STM32CubeMX: V6.12.0
开发板:STM32H7S78-DK开发板
MCU:STM32H7S7L8H6H

1 内部温度传感器工作原理

STM32H7S有一个内部温度传感器,可以用来测量 CPU 及周围的温度。该温度传感器在内部VSENSE输入通道相连接,此通道把传感器输出的电压转换成数字值。STM32H7S的内部温度传感器支持的温度范围为:-40~125度。
Figure 1-1 Temperature sensor架构
温度传感器的输出电压随温度线性变化。由于工艺不同,该线性函数的偏移量取决于各个芯片(芯片之间的温度变化可达 45°C)。
内部温度传感器更适用于对温度变量而非绝对温度进行测量的应用情况。如果需要读取精确温度,则应使用外部温度传感器。
STM32 内部温度传感器的使用很简单,只要设置一下内部 ADC,并激活其内部通道就差不多了。接下来我们介绍一下和温度传感器设置相关的 2 个地方。
第一个地方,我们要使用 STM32 的内部温度传感器,必须先激活 ADC 的内部通道,这里通过 ADC_CCR 的 TSEN位(bit23)设置。设置该位为 1 则启用内部温度传感器。
第二个地方, STM32 的内部温度传感器固定的连接在 ADC 的通道VSENSE上,所以,我们在设置好 ADC 之后只要读取VSENSE的值,就是温度传感器返回来的电压值了。根据这个值,我们就可以计算出当前温度。STM32内置一个温度传感器,通过VSENSE通道可以读出温度传感器的电压。其中给出了一个计算公式:
  • TS_CAL1 是温度传感器在 30℃时的校准值,固定保存在芯片内部的: 0x08FF F814 - 0x08FF F815这两个地址( 16 位)。
  • TS_CAL2 是温度传感器在 130℃时的校准值,固定保存在芯片内部的:0x08FF F818 - 0x08FF F819这两个地址( 16 位)。
  • TS_DATA: ADC1通道VSENSE读取到的当前温度传感器转换值。
Table 1-1 Temperature sensor校准值
现在,我们就可以总结一下 STM32 内部温度传感器使用的步骤了,如下:
1)设置 ADC,开启内部温度传感器。
关于如何设置 ADC,上一节已经介绍了,我们采用与上一节相似的设置。 不同的是上一节温度传感器是读取外部通道的值,而内部温度传感器相当与把通道端口连接在内部温度传感器上。函数如下。
HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef *hadc, const ADC_ChannelConfTypeDef *pConfig)
2)读取通道VSENSE AD 值,计算结果。
在设置完之后,我们就可以读取温度传感器的电压值了, 得到该值就可以用上面的公式计算温度值。

2 内部温度传感器读取实现

2.1 STM32Cube生成工程

STM32H7S通道VSENSE连接内部温度传感器,因此,只需配置相应的参数即可。我们在串口的例子的基础上进行配置。
打开工程,打开Analog选项,配置ADC参数。
使能连续转换模式(Continuous Conversion Mode)。设置转换周期。其他为默认设置。
然后生成工程即可。

2.2 内部温度传感器具体代码

内部温度数据采集和普通ADC采集数据一样,其编程流程:
1.硬件等初始化;
2.串口、ADC等参数配置;
3.校准ADC,处理ADC数据;
主函数很简单:
/**
  * [url=home.php?mod=space&uid=159083]@brief[/url] The application entry point.
  * @retval int
  */
int main(void)
{

  /* USER CODE BEGIN 1 */
  float ADC_ConvertedValueLocal;
  uint32_t ADC_ConvertedValue;

  uint16_t ts_cal1 = 0;
  uint16_t ts_cal2 = 0;
  float temp = 0;
  /* USER CODE END 1 */

  /* MPU Configuration--------------------------------------------------------*/
  MPU_Config();

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_UART4_Init();
  MX_ADC1_Init();
  /* USER CODE BEGIN 2 */
  HAL_UART_Receive_IT(&huart4, (uint8_t *)&RxBuffer, 1);
  HAL_ADC_Start(&hadc1);   //开启

  ts_cal1 = *(volatile uint16_t*)(0x08FFF814);
  ts_cal2 = *(volatile uint16_t*)(0x08FFF818);
  temp = (float)((130.0f - 30.0f) / (ts_cal2-ts_cal1));
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    HAL_ADC_PollForConversion(&hadc1,10);  //等待转换完成

    if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
    { 
      ADC_ConvertedValue = HAL_ADC_GetValue(&hadc1);

      ADC_ConvertedValueLocal =(float) ADC_ConvertedValue/(float)4096*3.3; // 读取转换的AD值
      printf("The current AD value = 0x%04X \r\n", ADC_ConvertedValue); 
      printf("The current AD value = %f V \r\n",ADC_ConvertedValueLocal); //实际电压值
      printf("temperture =%f\r\n\r\n",((ADC_ConvertedValue - ts_cal1) * temp + 30));
    }

    HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
    HAL_Delay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

 

上述是通过查询的方式读取温度,也可通过中断和DMA的方式获取。

3 实验现象

将程序编译好后下载到板子中,通过串口助手可以看到在接收区有温度值输出。
 

此帖出自stm32/stm8论坛

最新回复

55度也太高了吧。   详情 回复 发表于 2024-10-13 20:05
点赞 关注
 

回复
举报

169

帖子

1

TA的资源

纯净的硅(初级)

沙发
 

55度也太高了吧。

此帖出自stm32/stm8论坛

点评

高性能的处理器也还好,和低功耗的没法比  详情 回复 发表于 2024-10-14 22:24
 
 

回复

55

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

高性能的处理器也还好,和低功耗的没法比

此帖出自stm32/stm8论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
应用技巧/简单实用的单片机CRC快速算法

摘 要: 提供两个实用的、能够在单片机上通过软件来实现的CRC快速算法,其中一个适用于51系列等单片机,另一个适用于pic单 ...

【一句话】为刚刚工作的朋友建言

看到zqzq和lk的帖(https://bbs.eeworld.com.cn/thread-166631-1-1.html),觉得有必要请咱工作的朋友给些建议: 刚刚工作, ...

LCD单层菜单翻滚的实现

在很多项目中我们都需要菜单,特别是多层菜单应用比较广泛,但是写一个能够很方便移植的多层菜单非常麻烦,我们这里就先研究一下 ...

重磅出击,PID温度采集工具

本帖最后由 zhaojun_xf 于 2014-11-5 14:19 编辑 最近开发了一款智能电焊台,采用PID算法进行温度控制,并随手设计了 ...

低功耗MCU哪家强?不找Atmel你找谁?正宗低功耗血统

低功耗MCU哪家强?不找Atmel你找谁?正宗低功耗血统!杠杠滴:handshake 在过去的十多年里,Atmel一直专注于低功耗技术的研 ...

纯micropython绘图包microplot

microplot是一个完全用micropython开发的简易绘图库,可以在LCD上绘制图形(目前仅支持line功能)。 527096 https://g ...

您的测评情报已发送,请注意查收!

hi,大家好~很高兴又到了给大家送情报的时间了~这周我们上线了两个新活动,都很有吸引力哦,再预告下,下周还有新板子要上线哦~~ ...

【得捷电子Follow me第2期】任务提交

本帖最后由 远山游王子 于 2023-10-27 13:56 编辑 前言 很高兴这次有机会参加DigiKey的活动。虽然过程有点曲折,但还是 ...

完成M1卡读写功能的芯片或模块有哪些,请帮忙介绍一些

完成M1卡读写功能的芯片或模块有哪些,请帮忙介绍一些

【嵌入式AI挑战营】01远程视频显示

串口登录 账号:root 密码:luckfox 878182 使用ifconfig命令查看IP地址,IP地址需要链接网线,且板端没有屏幕所以 ...

关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表