stm32f103zet6引脚图及功能(简述STM32F103ZET6芯片功能及特点)

2023-09-20 06:14:12 点击: 修改 投诉 刷新

关于DHT11

DHT11是一款数字温湿度传感器,DHT11是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有可靠的稳定性,响应快,抗干扰能力强。传感器包括一个高分子电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接,通过单总线与微处理器通讯,只需要一根线。

stm32f103zet6引脚图及功能(简述STM32F103ZET6芯片功能及特点)-第1张图片相关参数

1、DHT11数据结构
DHT11数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输入输出双向传输。其数据包由5Byte(40Bit)组成。数据分小数部分和整数部分,具体格式在下面说明。
一次完整的数据传输为40bit,高位先出。
数据格式:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和
校验和数据为前四个字节相加。
传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间
应该分开处理。如果,某次从传感器中读取如下5Byte数据:

stm32f103zet6引脚图及功能(简述STM32F103ZET6芯片功能及特点)-第2张图片

由以上数据格式可以得到温湿度计算方法
humi (湿度)= byte4 . byte3=45.0 (%RH)
temp (温度)= byte2 . byte1=28.0 ( ℃)
jiaoyan(校验)= byte4+ byte3+ byte2+ byte1=73(=humi+temp)(校验正确)
2、DHT11传输数据时序
主机发送开始信号后,延时等待 20us-40us 后读取 DH11T 的回应信号,读取总线为低电平,说明 DHT11 发送响应信号,DHT11 发送响应信号后,再把总线拉高,准备发送数据,每一 bit 数据都以低电平开始。

stm32f103zet6引脚图及功能(简述STM32F103ZET6芯片功能及特点)-第3张图片

3、DHT11的数字“0”和数字“1”表示方法
DHT11的数字0和数字1表示方式和常见的不同,一般的数据表示0的是低电平,表示1的是高电平,DHT11不同,开始传输数据之后他数字0的表示方式是高电平26-28us,数字1的表示方式是高电平116-118us。

stm32f103zet6引脚图及功能(简述STM32F103ZET6芯片功能及特点)-第4张图片
stm32f103zet6引脚图及功能(简述STM32F103ZET6芯片功能及特点)-第5张图片代码篇

本次实验定义的IO口是PB11,传输的数据是串口一
1、主机发送开始信号到DHT11即单片机拉低18ms之后再拉高20-40us

static void DHT11_Rst(void){GPIO_SETOUT();//配置成输出模式GPIO_ResetBits(DHT11_IO,DHT11_PIN); //拉低数据线Delay_ms(20);    //拉低至少18msGPIO_SetBits(DHT11_IO,DHT11_PIN); //拉高数据线Delay_us(30);     //主机拉高20~40usGPIO_ResetBits(DHT11_IO,DHT11_PIN);}

2、DHT11发送响应信号到主机(32单片机),DHT11的数据线会拉低40-50us的,在拉高40-50us,让单片机的IO口检测信号。

函数名:static u8 DHT11_Check(void)参数说明:无返回值:检测到回应-->返回1,否则0函数作用:检测DHT11的响应信号***********************************************/static u8 DHT11_Check(void){u8 retry=0;GPIO_SETIN();//设置为输入模式while (!GPIO_ReadInputDataBit(DHT11_IO,DHT11_PIN) && retry= 100)//超时未响应/未收到开始信号,退出检测return 0;elseretry = 0;while (GPIO_ReadInputDataBit(DHT11_IO,DHT11_PIN) && retry=100)//超时,DHT11工作出错,退出检测return 0;return 1;//设备正常响应,可以正常工作}

3、DHT11开始传输数据给单片机,这有两个传输数据的函数,一个是传输字节的,在由传输字节的函数来写传输一个8位字符串的函数。

函数名:static u8 DHT11_Read_Bit(void)参数说明:无返回值:返回从DHT11上读取的一个Bit数据函数作用:从DHT11上读取一个Bit数据***********************************************/static u8 DHT11_Read_Bit(void){u8 retry = 0;//DHT11的Bit开始信号为12-14us低电平while(GPIO_ReadInputDataBit(DHT11_IO,DHT11_PIN) && retry

4、DHT11数据采集完毕之后通过主函数在串口显示出来

函数名:int main(void)参数说明:无返回值:无函数作用:主函数***************************************************************************/int main(void){clock_init();uart_init(115200);//初始化串口printf("wecome to DHT11");//初始化DHT11(有BUG,第一次上电总是失败,按一下复位按钮又能进了)if(!DHT11_Init()){printf("rn EEROR! THE DHT11 HAS NO RESPOND...");//while(1);}printf("rn THE DHT11 HAS RESPOND");Delay_ms(10);//这里延时10ms主要是因为,刚刚接收到响应信息,要等DHT11发送完信息while(1){if(DHT11_Read_Data(&temp,&humi))printf("rn temp:%d,humi:%d",temp,humi);else//printf("rn EEROR! THE DHT11 HAS NO RESPOND...");//由于是库函数编程,不能准确把握函数的执行时间,//所以会经常出现这条警告信息Delay_ms(100);}}

接线和实验结果

stm32f103zet6引脚图及功能(简述STM32F103ZET6芯片功能及特点)-第6张图片
stm32f103zet6引脚图及功能(简述STM32F103ZET6芯片功能及特点)-第7张图片总结

DHT11是性价比比较高的一个温湿度模块,用串口来显示温湿度来说是比较直观的,长期发布此类文章,喜欢的点个关注吧。

相关分类

综合 站长 热点