STM32⼊门:STM32F103VET6通过DHT11温湿度传感器获取室内温度实验
(附主。。。
STM32F103ZET6通过DHT11温湿度传感器获取室内温度实验
实验环境:正点原⼦ STM32F103ZET6 ⼩型系统板
实验⼯具:STM32F103ZET6 芯⽚与 DHT11 温湿度传感器
数据交互:STM32 芯⽚通过 GPIO 输⼊输出引脚获取 DHT11 温湿度传感器的数据,然后通过串⼝ USART1 将数据提交⾄ PC 端的串⼝调试助⼿。
实验源码下载:
实验结果:
以下为部分实验源码:
dht11.c
#include"dht11.h"
u8 DHT11_DATA[40];
extern GPIO_InitTypeDef GPIO_Initure;
void DHT11_Init(){//初始化外设 DHT11
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_Initure.GPIO_Mode = GPIO_Mode_Out_OD;//开漏输出
GPIO_Initure.GPIO_Pin = GPIO_Pin_4;//PA4
GPIO_Initure.GPIO_Speed = GPIO_Speed_50MHz;//50MHz
GPIO_Init(GPIOA,&GPIO_Initure);交人交心
DHT_DATA_OUT =1;//数据线保持⾼电平
}
嘴唇颜色深
u8 DHT11_Start(){//开始向 DHT11 发送请求信号
u8 time =0;
DHT_DATA_OUT =1;//数据线保持⾼电平
delay_ms(1000);//DHT11 上电后要等待 1s 以越过不稳定状态在此期间不能发送任何指令
DHT_DATA_OUT =0;//主机输⼊低电平,发起数据请求拉克美
delay_ms(20);//保持 20ms
DHT_DATA_OUT =1;//主机输⼊⾼电平,释放总线
while(DHT_DATA_IN);//等待低电平响应信号
while(!DHT_DATA_IN){//等待低电平响应信号结束,time 值约 40us
delay_us(1);
time ++;
}
if(time <1|| time >100){//判断是否存在响应与响应是否超时
文昌在哪
return0;
}
while(DHT_DATA_IN){//等待⾼电平响应间隔信号结束,time 值约 40 - 41us
delay_us(1);
}
return1;
return1;
}
void DHT11_ReadData(){//读取 DHT11 传递来的上⼀次温湿度数据
u8 time, i =0;
for(; i <40; i ++){
time =0;//将时长置 0,防⽌它对⼆次及以上的时长产⽣影响
while(!DHT_DATA_IN);//略过低电平间隔信号
while(DHT_DATA_IN){//等待⾼电平结束,根据时长获取有效数据
delay_us(1);
time ++;
}
DHT11_DATA[i]= time >25?1:0;//根据⾼电平时长判断数据位为 0 还是为 1
}
}
void DHT11_End(void){//等待 DHT11 数据传递的结束
while(!DHT_DATA_IN);//等待低电平信号变⾼,数据发送完成
delay_us(56);//等待 DHT11 温湿度传感器释放总线
}
我要去色dht DHT11_CheckData(u8 *data){
u8 temp[5]={0x00}, i, j;
dht dht_data;
for(i =0; i <5; i ++){//将⼆进制数组转换为 8 位数据
for(j =0; j <8; j ++){
temp[i]<<=1;
temp[i]= data[j + i *8]==0? temp[i]: temp[i]+1;
}
}
if((temp[0]+ temp[1]+ temp[2]+ temp[3])%256== temp[4]){//数据校验,temp[3]) % 256 略过最⾼位,因为第四个数据的最⾼位是 1 的时候,温度值为负,由于条件原因,未能测试零下温度,如果存在错误,请⼲掉取余操作
//获取湿度数据
dht_data.humidity = temp[0];//湿度⼩数部分为0,即data[1] = 0,故⼩数位可忽略不计
//获取温度数据
元宵节彩灯图片purature =1;锥形体积公式
if((0x80& temp[3])!=0){//温度低8位的最⾼位为 1,数据值为负
purature *=-1;
temp[3]&=0x7f;//重新计算data[3]的值
gre词汇
}
purature *=((double)temp[2]+ temp[3]*0.1);
}
el{
dht_data.humidity = purature =-1;
}
return dht_data;
}
学习分享,⼀起成长!以上为⼩编的实验分享,若存在不当之处,请批评指正!