温湿度采集实验

发布者:WanderlustGaze最新更新时间:2024-06-25 来源: elecfans关键字:STM32  温度传感器 手机看文章 扫描二维码
随时随地手机看文章

  delay_us( 15 ) ;                                          //15us

  GPIOG->CRH &= 0xFFFF0FFF ;

  GPIOG->CRH |= 0x00008000 ;

  while( DS18B20_DQ_IN ) ;                                      //等待应答

  while( DS18B20_DQ_IN==0 );                                      //等待应答结束

}

/***************************************************

Name    :DS18B20_Init

Function  :初始化DS18B20

Paramater  :None

Return    :None

***************************************************/

void DS18B20_Init()

{

  RCC->APB2ENR |= 1<<8 ;                                        //使能PORTG口时钟 

  GPIOG->CRH &= 0xFFFF0FFF ;                                      //PORTG.11 推挽输出

  GPIOG->CRH |= 0x00003000 ;

  GPIOG->ODR |= 1<<11 ;                                        //输出1

  DS18B20_Check() ;

}

/***************************************************

Name    :DS18B20_Get_Temp

Function  :得到温度值

Paramater  :None

Return    :温度值

***************************************************/

short DS18B20_Get_Temp()

{

  u8 TL,TH;

  short temp ;

  DS18B20_Check() ;

  DS18B20_Write_Byte( 0xCC ) ;                                    //跳过ROM读取

  DS18B20_Write_Byte( 0x44 ) ;                                    //开启转换

  DS18B20_Check() ;   

  DS18B20_Write_Byte( 0xCC ) ;                                    //跳过ROM读取

  DS18B20_Write_Byte( 0xBE ) ;                                    //开始转换

  TL = DS18B20_Read_Byte() ;                                      //LSB

  TH = DS18B20_Read_Byte() ;                                      //MSB

  if( TH>7 )

  {

    TH = ~TH ;

    TL = ~TL ;

  }

  temp = TH ;                                              //获得高八位

  temp <<= 8 ;    

  temp += TL ;                                            //获得低八位

  temp = ( float )temp*0.625 ;                                    //转换     

  if( TH>7 )

    return temp ;                                          //返回温度值

  else

    return -temp ;

}

(3)创建1.c文件,并输入以下代码。


#include 'sys.h'

#include 'delay.h'

#include 'usart1.h'

#include 'lcd.h'

#include 'ds18b20.h'



int main()

{

  short Temp ;

  u8 Str[] = 'Temperature:+000.00 'C' ;

  STM32_Clock_Init( 9 ) ;                                        //STM32时钟初始化

  SysTick_Init( 72 ) ;                                        //SysTick初始化

  USART1_Init( 72, 115200 ) ;                                      //初始化串口1波特率115200

  LCD_Init() ;                                            //LCD初始化

  DS18B20_Init() ;                                          //DS18B20初始化

  while( 1 )

  {

    Temp = DS18B20_Get_Temp();                                    //读取温度

    if( Temp<0 )

    {

      Temp = -Temp ;

      Str[ 12 ] = '-' ;                                      //显示负号

    }

    else

      Str[ 12 ] = ' ' ;                                      //无符号    

    Str[ 13 ] = 0x30+Temp/10000 ;

    Str[ 14 ] = 0x30+Temp%10000/1000 ;

    Str[ 15 ] = 0x30+Temp%1000/100 ;

    Str[ 17 ] = 0x30+Temp%100/10 ;

    Str[ 18 ] = 0x30+Temp%10 ;

    LCD_ShowString( 100, 100, Str ) ;                                //显示温度值

    delay_ms( 500 ) ;

  }

}

11.6 DHT11例程

功能实现:读取DHT11的温度与湿度数据显示在TFTLCD上。


(1)创建dht11.h文件,并输入以下代码。


#ifndef _DHT11_H_

#define _DHT11_H_



#include 'sys.h'

/*********************************************************************************************************

                    端    口    分    配

*********************************************************************************************************/

#define  DHT11_DQ_OUT  PGout( 11 )                                    //数据端口

#define  DHT11_DQ_IN    PGin( 11 )

/*********************************************************************************************************

                    函    数    列    表

*********************************************************************************************************/

u8 DHT11_Init( void ) ;                                          //初始化DHT11

u8 DHT11_Get_Data( u8 *temp, u8 *humi ) ;                                //获取温湿度



#endif

(2)创建dht11.c文件,并输入以下代码。


#include 'dht11.h'

#include 'delay.h'

/***************************************************

Name    :DHT11_Check

Function  :检查DHT11

Paramater  :None

Return    :

      0:存在

      1:不存在

***************************************************/

u8 DHT11_Check()      

{

  u8 retry ;

  GPIOG->CRH &= 0xFFFF0FFF ;                                      //PG11推挽输出

  GPIOG->CRH |= 0x00003000 ;

  DHT11_DQ_OUT = 0 ;                                          //拉低DQ

  delay_ms( 20 ) ;                                          //拉低至少18ms

  DHT11_DQ_OUT = 1 ;                                          //DQ=1

  delay_us( 30 );                                            //主机拉高20~40us

  GPIOG->CRH &= 0xFFFF0FFF;                                      //PG11上拉输入

  GPIOG->CRH |= 0x00008000;

  //DHT11会拉低40~80us

  retry = 0 ;

  while( ( DHT11_DQ_IN==1 )&&( retry<100 ) )

  {

    retry ++ ;

    delay_us( 1 ) ;

  };

  if( retry>=100 )

    return 1 ;

  else

    retry = 0 ;

  //DHT11拉低后会再次拉高40~80us

  while( ( DHT11_DQ_IN==0 )&&( retry<100 ) )

  {

    retry ++ ;

    delay_us( 1 ) ;

  };

  if( retry>=100 )

    return 1 ;

  return 0 ;

}

/***************************************************

Name    :DHT11_Read_Byte

Function  :读取1个字节

Paramater  :None

Return    :读取的字节

***************************************************/

u8 DHT11_Read_Byte()

{

  u8 i, Byte=0;

  for (i=0;i<8;i++)

  {

    Byte <<= 1 ;

    while( DHT11_DQ_IN ) ;                                      //等待变为低电平

    while( DHT11_DQ_IN==0 ) ;                                    //等待变高电平

    delay_us( 40 ) ;                                        //等待40us

[1] [2] [3] [4]
关键字:STM32  温度传感器 引用地址:温湿度采集实验

上一篇:舵机中的直流电机控制原理和方法
下一篇:一种新型室内盆栽智能浇灌系统

推荐阅读最新更新时间:2026-02-20 18:18

STM32驱动DS18B20温度传感器例程(OLED显示)
DS18B20温度显示效果 第一部分:DS18B20温度模块驱动代码 (DS18B20.h) #ifndef __DS18B20_H__ #define __DS18B20_H__ #include stm32f10x.h #define SkipROM 0xCC //跳过ROM #define SearchROM 0xF0 //搜索ROM #define ReadROM 0x33 //读ROM #define MatchROM 0x55 //匹配ROM #define AlarmROM 0xEC //告警ROM #define StartConvert 0x44 //开始温度转换,在温度转换期
[单片机]
STM32中ADC的使用/printf函数重定向串口显示内部温度传感器测量值
STM32F334C8T6这款MCU中有两个12位ADC(模数转换器),ADC1的通道16连接到内置的一个温度传感器,本文使用该温度传感器测量MCU和周围的环境温度,并且通过串口发送到PC的串口助手进行显示。 1. ADC的使用 1. select the ADC clock using the function RCC_ADCCLKConfig() 2. Enable the ADC interface clock using RCC_AHBPeriphClockCmd(); 3. ADC pins configuration  Enable the clock for the ADC GPIOs using the fo
[单片机]
<font color='red'>STM32</font>中ADC的使用/printf函数重定向串口显示内部<font color='red'>温度传感器</font>测量值
STM32之内部温度传感器
和ADC的设置基本相同,算是ADC的扩展应用。 只是在计算方法上有变化,在adc的初始化程序里面做一些变动就可以了。 包含函数: (1)Main /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 实验平台 : ST 官方三合一套件 + 硬件 : STM32F103C8T6 + 开发平台 : IAR For ARM 5.40 + 仿真器 : J-Link + 日期 : 2010-10-28 + 频率 :HSE = 8MHz ,主频 = 72MHz +++++++++++++++++++++++++
[单片机]
<font color='red'>STM32</font>之内部<font color='red'>温度传感器</font>
STM32系列第19篇--内部温度传感器
简介: STM32有一个内部的温度传感器,可以用来测量CPU及周围的温度(TA)。 特点: 该温度传感器在内部和ADCx_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值 温度传感器模拟输入推荐采样时间是17.1μs STM32的内部温度传感器支持的温度范围为:-40~125度。精度比较差,为±1.5℃左右 内部温度传感器更适合于检测温度的变化,而不是测量绝对温度。如果需要测量绝度温度,应该使用一个外部温度传感器,如DS18B20 使用注意事项: 第一个地方,我们要使用STM32的内部温度传感器,必须先激活ADC的内部通道,这里通过ADC_CR2的TSVREFE位(bit23)设置。设置该位为1则启用内部温度
[单片机]
STM32 之 内部温度传感器
和ADC的设置基本相同,算是ADC的扩展应用。 只是在计算方法上有变化,在adc的初始化程序里面做一些变动就可以了。 包含函数: (1)Main C语言: Codee#14690 /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 实验平台 : ST 官方三合一套件 + 硬件 : STM32F103C8T6 + 开发平台 : IAR For ARM 5.40 + 仿真器 : J-Link + 日期 : 2010-10-28 + 频率 :HSE = 8MHz ,主频 = 72MHz ++
[单片机]
<font color='red'>STM32</font> 之 内部<font color='red'>温度传感器</font>
STM32 内部温度传感器
(一) STM32 内部温度传感器概要 STM32 芯片内部一项独特的功能就是内部集成了一个温度传感器, 因为是内置, 所以测试的是芯片内部的温度, 如果芯片外接负载一定的情况下, 那么芯片的发热也基本稳定, 相对于外界的温度而言, 这个偏差值也是基本稳定的. 也就是说用 STM32 内部传感器来测量外界环境的温度. 在一些恶劣的应用环境下面, 可以通过检测芯片内部而感知设备的工作环境温度, 如果温度过高或者过低了 则马上睡眠或者停止运转. 可以保证您的设备工作的可靠性. 1. STM32内部温度传感器与ADC的通道16相连,与ADC配合使用实现温度测量; 2. 测量范围 40~125℃,精度 1.5℃。 3. 温度传感
[单片机]
<font color='red'>STM32</font> 内部<font color='red'>温度传感器</font>
STM32的ADC及内部温度传感器的使用
STM32自带1-3个ADC模块,采样精度达到了12位,比起当年使用的AVR单片机的10位来说,上了个小档次了~本测试程序采用了ADC DMA的中断方式,这样CPU就可以把ADC的任务交给DMA这个勤劳肯干的部下了,当DMA完成了一次任务之后会产生中断,告诉CPU可以来查收结果了!DMA也是在嵌入式系统中非常常用的,例如在LCD中,数据拷贝中等。。。在STM32F103RBT6中,ADC1和ADC2共用一组管脚   总体编程思路和顺序如下:   1.初始化RCC相关,使得系统有时钟,功能模块如ADC、DMA有时钟。   2.GPIO相关初始化,比如常用的指示灯,ADC的管家要设置为输入等。   3.NVIC向量中断的配置,
[模拟电子]
高压电池包传感器设计:BMS中电压温度传感器的隔离电路与EMC防护
在新能源汽车高压电池管理系统中,电池管理系统(BMS)作为核心控制单元,需通过电压与温度传感器实时监测电芯状态。然而,高压环境下的电磁干扰(EMC)与电气隔离问题,已成为制约传感器可靠性的关键瓶颈。本文从隔离电路设计与EMC防护技术出发,解析高压电池包传感器设计的核心挑战与创新方案。 从分压到霍尔的非接触革命 传统分压电路虽成本低廉,但在高压电池包中面临两大缺陷:一是高压电阻的温漂导致精度下降,二是直接电气连接存在安全隐患。以某FSEC赛事BMS开发为例,其采用的分压电路在400V电池包中误差达2V,主要源于电阻精度与温漂影响。 1. 隔离型ADC的突破 ADuM3190等专用芯片通过磁耦合隔离技术,将高压信号直接转换为数字信号,
[嵌入式]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved