OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 592|回复: 0

《M144Z-M3最小系统板使用指南——STM32F103版》第三十六章 内部温度传感器实验

[复制链接]

1117

主题

1128

帖子

2

精华

超级版主

Rank: 8Rank: 8

积分
4667
金钱
4667
注册时间
2019-5-8
在线时间
1224 小时
发表于 2024-4-30 09:25:49 | 显示全部楼层 |阅读模式
本帖最后由 正点原子运营 于 2024-4-30 09:25 编辑

第三十六章 内部温度传感器实验
1)实验平台:正点原子 M144Z-M3 STM32F103最小系统板

2) 章节摘自【正点原子】M144Z-M3最小系统板使用指南——STM32F103版


4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boar ... _mini_sysboard.html

5)正点原子官方B站:https://space.bilibili.com/394620890

6)正点原子STM32技术交流QQ群:725095144

155537c2odj87vz1z9vj6l.jpg

155537nfqovl2gg9faaol9.png

本章介绍使用ADC采集STM32F103内部温度传感器输出的电压值,并根据该电压值计算出STM32F103芯片的大致温度。通过本章的学习,读者将学习到ADC、内部温度传感器的使用。
本章分为如下几个小节:
36.1 硬件设计
36.2 程序设计
36.3 下载验证

36.1 硬件设计
36.1.1 例程功能
1. LCD上不断刷新显示温度
2. LED0闪烁,提示程序正在运行

36.1.2 硬件资源
1. LED
       LED0 - PB5
2. 正点原子2.8/3.5/4.3/7/10寸TFTLCD模块
3. ADC1
Channel16

36.1.3 原理图
本章实验使用的内部温度传感器为STM32F103的片上资源,因此没有对应的连接原理图。

36.2 程序设计
36.2.1 HAL库的ADC驱动
本章实验与第三十五章“单通道ADC采集实验”十分相似,第三十五章实验中使用ADC2的Channel1采集PA1引脚上的电压,而本章实验是使用ADC1的Channel16采集STM32F103片内温度传感器的输出电压,因此大部分的内容都是相似的,以及操作ADC的方式都一样,因此请见第35.2.1小节中HAL库的ADC驱动的相关内容。

36.2.2 ADC驱动
本章实验的ADC驱动主要负责向应用层提供ADC的初始化以及获取内部温度传感器温度的函数。本章实验中,ADC的驱动代码包括adc.c和adc.h两个文件。
因为本章实验的ADC驱动与第三十五章“单通道ADC采集实验”的ADC驱动代码十分相似,因此请参考第35.2.1小节ADC驱动的相关内容,本小节仅讲解获取内部温度传感器温度的函数,如下所示:
  1. /**
  2. *@brief   获取内部温度传感器结果
  3. *@param   无
  4. *@retval  内部温度传感器结果(扩大100倍)
  5. */
  6. int16_t adc_get_temperature(void)
  7. {
  8.     uint16_t result;
  9.     double voltage;
  10.     double temperature;
  11.     int16_t temperature_x100;
  12.    
  13.    result =adc_get_result_average(ADC_CHANNEL_TEMPSENSOR, 10);
  14.    voltage = ((double)result * 3.3) / 4095;
  15.    temperature = (1.43 - voltage) / 0.0043 + 25;
  16.    temperature_x100 = (int16_t)(temperature * 100);
  17.    
  18.     return temperature_x100;
  19. }
复制代码
从上面的代码中可以看到,在获取温度传感器的输出电压后,需要将电压值转换为实际的温度值,转换公式涉及内部温度传感器的物理特性,由芯片的设计厂家给出。

36.2.3 实验应用代码
本章实验的应用代码,如下所示:
  1. int main(void)
  2. {
  3.     int16_t temperature;
  4.    
  5.    HAL_Init();                         /* 初始化HAL库 */
  6.    sys_stm32_clock_init(RCC_PLL_MUL9); /* 配置时钟,72MHz */
  7.    delay_init(72);                     /* 初始化延时 */
  8.    usart_init(115200);                 /* 初始化串口 */
  9.    led_init();                         /* 初始化LED */
  10.    lcd_init();                         /* 初始化LCD */
  11.    adc_temperature_init();             /* 初始化ADC采集内部温度传感器 */
  12.    
  13.    lcd_show_string(30, 50, 200, 16, 16, "STM32", RED);
  14.    lcd_show_string(30, 70, 200, 16, 16, "TemperatureTEST", RED);
  15.    lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED);
  16.    
  17.    lcd_show_string(30, 110, 200, 16, 16, "TEMPERATE:00.00C", BLUE);
  18.    
  19.     while (1)
  20.     {
  21.          /* 获取内部温度传感器结果 */
  22.          temperature = adc_get_temperature();
  23.          
  24.          /* 显示温度 */
  25.          if (temperature < 0)
  26.          {
  27.              temperature = -temperature;
  28.              lcd_show_string(30 + 10 * 8, 110, 16, 16, 16, "-", BLUE);
  29.          }
  30.          else
  31.          {
  32.              lcd_show_string(30 + 10 * 8, 110, 16, 16, 16, " ", BLUE);
  33.          }
  34.          lcd_show_xnum(30 + 11 * 8, 110, temperature / 100, 2, 16, 0, BLUE);
  35.          lcd_show_xnum(30 + 14 * 8, 110, temperature % 100, 2, 16, 0x80, BLUE);
  36.          
  37.          LED0_TOGGLE();
  38.          
  39.          delay_ms(100);
  40.     }
  41. }
复制代码
本章实验的应用代码很简单,在完成包括ADC之内的初始化后,便重复通过函数adc_get_temperature()获取内部温度传感器采集的温度值,并在LCD上实时显示。

36.3 下载验证
在完成编译和烧录操作后,便可看到LCD上不断地刷新显示STM32F103内部温度传感器采集到的温度值。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 23:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表