STM32 cubemx 使用DHT11采集温湿度(IIC)

DHT11单总线通讯
DHT11为单总线双向通信,一次通讯时间4ms左右
引脚定义:
在这里插入图片描述
1脚:连接3-5V;2脚:数据线;3脚悬空;4脚接地
STM32cubemx 中只需要开启IIC 参数默认即可
在这里插入图片描述
在keil中加入相关头文件 和 c源文件(文件名打错了 应该是dht11 不过不影响)
在工程文件中添加文件(keil中 ctrl + N 新建文本→另存为)
添加C源文件
添加.H文件
要根据通讯过程写驱动代码
在这里插入图片描述
首先主机要给数据引脚输出一个至少18ms的低电平 然后拉高等待20-40微妙
等待DHT11回应 这时GPIO就要改变为输入状态,DHT11响应拉低80微妙 再拉高80微妙
这个过程结束后就开始发送数据。
数据为二进制0 1 区别方法为高电平的时间。如果高电平为26-28微妙时 为数据0,高电平时间为70微妙时 为数据1 基本上完成了一次数据采集

然后就是相关文件的代码
.H文件中

#ifndef __HT11_H_
#define __HT11_H_
#include "main.h"

extern TIM_HandleTypeDef htim2;  	//引入变量

//函数原型
void Delay_us(uint8_t);   //微妙延时函数,启用了一个定时器。因为DHT11通讯过程涉及微妙延时
void GPIO_Input(void);	  //GPIO 状态转变的函数 CUBEMX默认的GPIO初始化我只开启了相关总线的使能
//把GPIO状态(输入 输出)封装成了两个函数
void GPIO_Output(void);
void DHT11_Rst(void);		//主机开始采集的信号
uint8_t DHT11_Check(void);  //检查DHT是否回应
uint8_t DHT11_Init(void);   //初始化函数
uint8_t DHT11_ReadBit(void);   //读取一位
uint8_t DHT11_ReadByte(void);  //读取一个字节
uint8_t DHT11_ReadData(uint8_t *);   //读取数据(40个位) 




#endif

C源文件

#include "ht11.h"


void Delay_us(uint8_t us)
{
   
	  HAL_TIM_Base_Start(&htim2);
		__HAL_TIM_SetCounter(&htim2,us);
		while(__HAL_TIM_GetCounter(&htim2) > 0);
		HAL_TIM_Base_Stop(&htim2)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值