跌跌撞撞我也进入了STM32的大门

来源:互联网 发布:手机修改淘宝主营 编辑:程序博客网 时间:2024/05/16 10:10

 今天开始我开始写我的CSDN博客了,之前学C++的时候也零零散散写过几篇,但都是玩儿,太随意了,这次我要坚持下去,或许一年后或几年后我还会回来看看,希望到那时我会发现“嗨我真的进步了不少哈!”

博客我的想法是前期一星期至少一篇,内容是对本星期学习和工作的总结。

DHT11的使用和与STM32的通信:

       1、DHT11传感器手册的研究成果

1)DHT11传感器是测量温湿度的

2)数字信号输出

3)传输距离可达20米

4)数据格式 8bit湿度整数+8bit湿度小数+8bit温度整数+8bit温度小数++8bit校验和(小数部分用于以后扩展目前来说没有用处)

5)通信方式是单线双向通信

数据线的默认状态是高电平--------->发送一个低电平起始信号(延时大于18MS再拉高结束起始信号)---------->GPIO引脚转换为输入模式(等待20-40us)---->读取DHT11响应信号-------->开始读取5个字节的数据


6)数据0和1的表示方法

高电平26-28us表示0  


高电平70us表示1


u8 DHT11_connect(u8 *data){u8 _data[5]={0};u8 i,j;uint64_t start_time;dht11_GPIO_config(0);                        //输出模式//Dht1_Gpio_Config(0);PB6H;PB6L;delay_ms(18);   PB6H;delay_us(30);dht11_GPIO_config(1);                        //输入模式//Dht1_Gpio_Config(1);start_time = getsystickTime();while(PB6IBIT)    //等待拉低{if(getsystickTime()-start_time>=50)       //超时检测大于500ms就会终止与DHT11的通信{return 0;}}start_time = getsystickTime();while(!PB6IBIT)   //等待拉高   DHT响应信号结束{if(getsystickTime()-start_time>=50)       //超时检测大于500ms就会终止与DHT11的通信{return 0;}}for(i=0;i<5;i++){for(j=0;j<8;j++){_data[i]<<=1;start_time = getsystickTime();while(PB6IBIT)   //等待拉低{if(getsystickTime()-start_time>=50)       //超时检测大于500ms就会终止与DHT11的通信{return 0;}}start_time = getsystickTime();while(!PB6IBIT)   //等待拉高   数据信号到来{if(getsystickTime()-start_time>=50)       //超时检测大于500ms就会终止与DHT11的通信{return 0;}}delay_us(30);if(PB6IBIT){_data[i]+=1;}}}if(((_data[0]+_data[1]+_data[2]+_data[3])&0xff)==_data[4]){data[0] = _data[0];data[1] = _data[1];data[2] = _data[2];data[3] = _data[3];data[4] = _data[4];return 1;}return 0;}


原创粉丝点击