你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 1763|回复: 1

【HAL库每天一例】第072例: OneWire_DHT11温湿度传感器

[复制链接]

122

主题

129

回帖

0

蝴蝶豆

论坛元老

最后登录
2019-5-28
发表于 2016-7-22 08:57:01 | 显示全部楼层 |阅读模式
HAL库每天一例】系列例程从今天开始持续更新。。。。。
我们将坚持每天至少发布一个基于YS-F1Pro开发板的HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。

例程下载:
资料包括程序、相关说明资料以及软件使用截图
百度云链接:https://pan.baidu.com/s/1i574oPv
密码:r3s3

(硬石YS-F1Pro开发板HAL库例程持续更新\2. 软件设计之高级裸机例程(HAL库版本)\YSF1_HAL-105. OneWire_DHT11温湿度传感器

/**
  ******************************************************************************
  *                           硬石YS-F1Pro开发板例程功能说明
  *
  *  例程名称: YSF1_HAL-105. OneWire_DHT11温湿度传感器
  *   
  ******************************************************************************
  * 说明:
  * 本例程配套硬石stm32开发板YS-F1Pro使用。
  *
  * 淘宝:
  * 论坛:硬石电子社区
  * 版权归硬石嵌入式开发团队所有,请勿商用。
  ******************************************************************************
  */

【1】例程简介
  DHT11温湿度传感器
【2】跳线帽情况
******* 为保证例程正常运行,必须插入以下跳线帽 **********
丝印编号     IO端口      目标功能引脚        出厂默认设置
  JP1        PA10        TXD(CH340G)          已接入
  JP2        PA9         RXD(CH340G)          已接入
  JP6        PD3         AM2303/DS18B20       已接入
  
【3】操作及现象
  将DHT11温湿度传感器插入到开发板上的U13接口上,使用开发板配套的MINI USB线连接到开
发板标示“调试串口”字样的MIMI USB接口(需要安装驱动),在电脑端打开串口调试助手工
具,设置参数为115200 8-N-1。下载完程序之后,在串口调试助手窗口可接收到信息。

/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
CubeMX_1.jpg
CubeMX_2.jpg
CubeMX_3.jpg
CubeMX_4.jpg


bsp_DHT11.h文件内容
  1. #ifndef __ONEWIRE_DHT11_H__
  2. #define        __ONEWIRE_DHT11_H__

  3. /* 包含头文件 ----------------------------------------------------------------*/
  4. #include "stm32f1xx_hal.h"

  5. /* 类型定义 ------------------------------------------------------------------*/
  6. /************************ DHT11 数据类型定义******************************/
  7. typedef struct
  8. {
  9.         uint8_t  humi_high8bit;                //原始数据:湿度高8位
  10.         uint8_t  humi_low8bit;                 //原始数据:湿度低8位
  11.         uint8_t  temp_high8bit;                 //原始数据:温度高8位
  12.         uint8_t  temp_low8bit;                 //原始数据:温度高8位
  13.         uint8_t  check_sum;                     //校验和
  14.   float    humidity;        //实际湿度
  15.   float    temperature;     //实际温度  
  16. } DHT11_Data_TypeDef;

  17. /* 宏定义 -------------------------------------------------------------------*/
  18. /***********************   DHT11 连接引脚定义  **************************/
  19. #define DHT11_Dout_GPIO_CLK_ENABLE()              __HAL_RCC_GPIOD_CLK_ENABLE()
  20. #define DHT11_Dout_PORT                           GPIOD
  21. #define DHT11_Dout_PIN                            GPIO_PIN_3

  22. /***********************   DHT11 函数宏定义  ****************************/
  23. #define DHT11_Dout_LOW()                          HAL_GPIO_WritePin(DHT11_Dout_PORT,DHT11_Dout_PIN,GPIO_PIN_RESET)
  24. #define DHT11_Dout_HIGH()                         HAL_GPIO_WritePin(DHT11_Dout_PORT,DHT11_Dout_PIN,GPIO_PIN_SET)
  25. #define DHT11_Data_IN()                                  HAL_GPIO_ReadPin(DHT11_Dout_PORT,DHT11_Dout_PIN)

  26. /* 扩展变量 ------------------------------------------------------------------*/
  27. /* 函数声明 ------------------------------------------------------------------*/
  28. void DHT11_Init( void );
  29. uint8_t DHT11_Read_TempAndHumidity(DHT11_Data_TypeDef * DHT11_Data);

  30. #endif /* __ONEWIRE_DHT11_H__ */
  31. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
复制代码
bsp_DHT11.c文件内容
  1. /**
  2.   ******************************************************************************
  3.   * 文件名程: bsp_DHT11.c
  4.   * 作    者: 硬石嵌入式开发团队
  5.   * 版    本: V1.0
  6.   * 编写日期: 2015-10-04
  7.   * 功    能: DHT11温湿度传感器底层驱动程序
  8.   ******************************************************************************
  9.   * 说明:
  10.   * 本例程配套硬石stm32开发板YS-F1Pro使用。
  11.   *
  12.   * 淘宝:
  13.   * 论坛:http://www.ing10bbs.com
  14.   * 版权归硬石嵌入式开发团队所有,请勿商用。
  15.   ******************************************************************************
  16.   */
  17. /* 包含头文件 ----------------------------------------------------------------*/
  18. #include "DHT11/bsp_DHT11.h"

  19. /* 私有类型定义 --------------------------------------------------------------*/
  20. /* 私有宏定义 ----------------------------------------------------------------*/
  21. #define Delay_ms(x)   HAL_Delay(x)
  22. /* 私有变量 ------------------------------------------------------------------*/
  23. /* 扩展变量 ------------------------------------------------------------------*/
  24. /* 私有函数原形 --------------------------------------------------------------*/
  25. static void DHT11_Mode_IPU(void);
  26. static void DHT11_Mode_Out_PP(void);
  27. static uint8_t DHT11_ReadByte(void);

  28. /* 函数体 --------------------------------------------------------------------*/
  29. /**
  30.   * 函数功能:
  31.   * 输入参数: 无
  32.   * 返 回 值: 无
  33.   * 说    明:无
  34.   */
  35. static void DHT11_Delay(uint16_t time)
  36. {
  37.         uint8_t i;

  38.   while(time)
  39.   {   
  40.           for (i = 0; i < 10; i++)
  41.     {
  42.       
  43.     }
  44.     time--;
  45.   }
  46. }

  47. /**
  48.   * 函数功能: DHT11 初始化函数
  49.   * 输入参数: 无
  50.   * 返 回 值: 无
  51.   * 说    明:无
  52.   */
  53. void DHT11_Init ( void )
  54. {
  55.   DHT11_Dout_GPIO_CLK_ENABLE();
  56.   
  57.         DHT11_Mode_Out_PP();
  58.         
  59.         DHT11_Dout_HIGH();  // 拉高GPIO
  60. }

  61. /**
  62.   * 函数功能: 使DHT11-DATA引脚变为上拉输入模式
  63.   * 输入参数: 无
  64.   * 返 回 值: 无
  65.   * 说    明:无
  66.   */
  67. static void DHT11_Mode_IPU(void)
  68. {
  69.   GPIO_InitTypeDef GPIO_InitStruct;
  70.   
  71.   /* 串口外设功能GPIO配置 */
  72.   GPIO_InitStruct.Pin   = DHT11_Dout_PIN;
  73.   GPIO_InitStruct.Mode  = GPIO_MODE_INPUT;
  74.   GPIO_InitStruct.Pull  = GPIO_PULLUP;
  75.   HAL_GPIO_Init(DHT11_Dout_PORT, &GPIO_InitStruct);
  76.         
  77. }

  78. /**
  79.   * 函数功能: 使DHT11-DATA引脚变为推挽输出模式
  80.   * 输入参数: 无
  81.   * 返 回 值: 无
  82.   * 说    明:无
  83.   */
  84. static void DHT11_Mode_Out_PP(void)
  85. {
  86.   GPIO_InitTypeDef GPIO_InitStruct;
  87.   
  88.   /* 串口外设功能GPIO配置 */
  89.   GPIO_InitStruct.Pin = DHT11_Dout_PIN;
  90.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  91.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  92.   HAL_GPIO_Init(DHT11_Dout_PORT, &GPIO_InitStruct);         
  93. }

  94. /**
  95.   * 函数功能: 从DHT11读取一个字节,MSB先行
  96.   * 输入参数: 无
  97.   * 返 回 值: 无
  98.   * 说    明:无
  99.   */
  100. static uint8_t DHT11_ReadByte ( void )
  101. {
  102.         uint8_t i, temp=0;
  103.         

  104.         for(i=0;i<8;i++)   
  105.         {         
  106.                 /*每bit以50us低电平标置开始,轮询直到从机发出 的50us 低电平 结束*/  
  107.                 while(DHT11_Data_IN()==GPIO_PIN_RESET);

  108.                 /*DHT11 以26~28us的高电平表示“0”,以70us高电平表示“1”,
  109.                  *通过检测 x us后的电平即可区别这两个状 ,x 即下面的延时
  110.                  */
  111.                 DHT11_Delay(40); //延时x us 这个延时需要大于数据0持续的时间即可                     

  112.                 if(DHT11_Data_IN()==GPIO_PIN_SET)/* x us后仍为高电平表示数据“1” */
  113.                 {
  114.                         /* 等待数据1的高电平结束 */
  115.                         while(DHT11_Data_IN()==GPIO_PIN_SET);

  116.                         temp|=(uint8_t)(0x01<<(7-i));  //把第7-i位置1,MSB先行
  117.                 }
  118.                 else         // x us后为低电平表示数据“0”
  119.                 {                           
  120.                         temp&=(uint8_t)~(0x01<<(7-i)); //把第7-i位置0,MSB先行
  121.                 }
  122.         }
  123.         return temp;
  124. }


  125. /*
  126. *
  127. *
  128. */
  129. /**
  130.   * 函数功能: 一次完整的数据传输为40bit,高位先出
  131.   * 输入参数: DHT11_Data:DHT11数据类型
  132.   * 返 回 值: ERROR:  读取出错
  133.   *           SUCCESS:读取成功
  134.   * 说    明:8bit 湿度整数 + 8bit 湿度小数 + 8bit 温度整数 + 8bit 温度小数 + 8bit 校验和
  135.   */
  136. uint8_t DHT11_Read_TempAndHumidity(DHT11_Data_TypeDef *DHT11_Data)
  137. {  
  138.   uint8_t temp;
  139.   uint16_t humi_temp;
  140.   
  141.         /*输出模式*/
  142.         DHT11_Mode_Out_PP();
  143.         /*主机拉低*/
  144.         DHT11_Dout_LOW();
  145.         /*延时18ms*/
  146.         Delay_ms(18);

  147.         /*总线拉高 主机延时30us*/
  148.         DHT11_Dout_HIGH();

  149.         DHT11_Delay(30);   //延时30us

  150.         /*主机设为输入 判断从机响应信号*/
  151.         DHT11_Mode_IPU();

  152.         /*判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行*/   
  153.         if(DHT11_Data_IN()==GPIO_PIN_RESET)     
  154.         {
  155.     /*轮询直到从机发出 的80us 低电平 响应信号结束*/  
  156.     while(DHT11_Data_IN()==GPIO_PIN_RESET);

  157.     /*轮询直到从机发出的 80us 高电平 标置信号结束*/
  158.     while(DHT11_Data_IN()==GPIO_PIN_SET);

  159.     /*开始接收数据*/   
  160.     DHT11_Data->humi_high8bit= DHT11_ReadByte();
  161.     DHT11_Data->humi_low8bit = DHT11_ReadByte();
  162.     DHT11_Data->temp_high8bit= DHT11_ReadByte();
  163.     DHT11_Data->temp_low8bit = DHT11_ReadByte();
  164.     DHT11_Data->check_sum    = DHT11_ReadByte();

  165.     /*读取结束,引脚改为输出模式*/
  166.     DHT11_Mode_Out_PP();
  167.     /*主机拉高*/
  168.     DHT11_Dout_HIGH();
  169.    
  170.     /* 对数据进行处理 */
  171.     humi_temp=DHT11_Data->humi_high8bit*100+DHT11_Data->humi_low8bit;
  172.     DHT11_Data->humidity =(float)humi_temp/100;
  173.    
  174.     humi_temp=DHT11_Data->temp_high8bit*100+DHT11_Data->temp_low8bit;
  175.     DHT11_Data->temperature=(float)humi_temp/100;   
  176.    
  177.     /*检查读取的数据是否正确*/
  178.     temp = DHT11_Data->humi_high8bit + DHT11_Data->humi_low8bit +
  179.            DHT11_Data->temp_high8bit+ DHT11_Data->temp_low8bit;
  180.     if(DHT11_Data->check_sum==temp)
  181.     {
  182.       return SUCCESS;
  183.     }
  184.     else
  185.       return ERROR;
  186.         }        
  187.         else
  188.                 return ERROR;
  189. }

  190. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
复制代码
串口调试助手截图.jpg

<
回复

使用道具 举报

100

主题

3617

回帖

1

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2016-7-24 10:22:58 | 显示全部楼层
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版