STM32使用温湿度DHT11基于HAL库开发

DHT11 是一款湿温度一体化的数字传感器。该传感器包括一个电阻式测湿元件和一个 NTC
测温元件,并与一个高性能 8 位单片机相连接。通过单片机等微处理器简单的电路连接就能够
实时的采集本地湿度和温度。DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一
个 I/O 口。传感器内部湿度和温度数据 40Bit 的数据一次性传给单片机,数据采用校验和方式
进行校验,有效的保证数据传输的准确性。DHT11 功耗很低,5V 电源电压下,工作平均最大
电流 0.5mA。

引脚定义:VCC-5V

                  GND-GND

                  OUT-PB9

相关步骤如下:

(1)打开CubeMX

 (2)选择芯片型号,这里本忍选择STM32F103C6T6芯片

(3)配置调试

(4)配置时钟

(5)配置时钟树 

 (6)配置GPIO引脚PB9

(7)配置定时器

(8)配置串口

(9)给工程起个名,这里尽量不要使用中文字符

(10) 这步是个人小习惯,可选可不选

(11) 生成工程

(12)打开工程

 

(12)建一个用户文件夹

(13)将原工程文件夹之下的User文件夹整个复制到新建立的文件下

 

 (14)打开main文件,引入include "stdio.h"头文件以及温湿度头文件

    #include "stdio.h"
    #include "dht11.h"

(15)导入驱动文件

(16)

(17)

 

 (18)编写定时器代码

void delay_us(uint16_t us){
    uint16_t differ = 0xffff-us-5;                
    __HAL_TIM_SET_COUNTER(&htim3,differ);    //??TIM7??????
    HAL_TIM_Base_Start(&htim3);        //?????    
    
    while(differ < 0xffff-5){    //??
        differ = __HAL_TIM_GET_COUNTER(&htim3);        //?????????
    }
    HAL_TIM_Base_Stop(&htim3);
}

void Delay_us(uint16_t myus)//基于TIM3定时器的μs延时函数
{
    uint16_t differ = 0xffff-myus-5;                
    __HAL_TIM_SET_COUNTER(&htim3,differ);    //??TIM7??????
    HAL_TIM_Base_Start(&htim3);        //?????    
    
    while(differ < 0xffff-5){    //??
        differ = __HAL_TIM_GET_COUNTER(&htim3);        //?????????
    }
    HAL_TIM_Base_Stop(&htim3);
}

void delay_us(uint16_t us);
void Delay_us(uint16_t myus);

(19)重写printf

 int fputc(int ch,FILE *f)
{
    HAL_UART_Transmit(&huart1,(uint8_t *) &ch,1,HAL_MAX_DELAY);
    return ch;    
}
int fgetc(FILE *f)
{
    uint8_t ch;
    HAL_UART_Receive(&huart1,(uint8_t *)&ch,1,HAL_MAX_DELAY);
    return ch;
}

(20)黏贴相关执行代码

  uint16_t temperature;
  uint16_t humidity;

  while(DHT11_Init()){
    printf("DHT11 Checked failed!!!\r\n");
    HAL_Delay(500);
  }
  printf("DHT11 Checked Sucess!!!\r\n");
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
        DHT11_Read_Data(&temperature,&humidity);
        printf("DHT11 Temperature = %d.%d degree\r\n",temperature>>8,temperature&0xff);
      printf("DHT11 Humidity = %d.%d%%\r\n",humidity>>8,humidity&0xff);
        HAL_Delay(1000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

(21)最后一步

(22)编译下载,找个串口助手就行了

 

 

 

 

 

 

 

 

 

 

 

物联沃分享整理
物联沃-IOTWORD物联网 » STM32使用温湿度DHT11基于HAL库开发

发表评论