STM32+DHT11 读取数据为0或温湿度过高的常见原因及解决办法

文章讨论了DHT11温湿度传感器在读数为0或过高时的可能原因。问题可能源于电源未正确连接或初始化代码。确保开发板有独立电源,并检查线路连接。不调用初始化函数可能导致温湿度显示异常。初始化GPIO设置对传感器的正常工作至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.读取数据为0

如果代码正确的话,我遇到的温湿度为0的原因主要还是电源的问题,比如没有给开发板单独供电或者连线松动。因为有时候插着ST-Link连接到了电脑,开发板和DHT11的电源指示灯都会亮,但还是需要给开发板连上电源,这样更稳定,插上电源之后复位一下读到的温湿度就正常了。有时候线连的不紧也会这样,连紧一点就好了。

2.温湿度过高,达到八九十

这个原因比较奇怪,因为我确定DHT11的代码是没什么问题的,换了好几种代码结果都是温度89℃,显然不对。最后我在主函数里没有调用DHT11的初始化函数,结果运行起来正常了,我觉得应该是初始化的问题。初始化代码如下。


void DHT11_GPIO_Init_OUT(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP; 
	GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOB, &GPIO_InitStructure);

}


void DHT11_GPIO_Init_IN(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING; 
	GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOB, &GPIO_InitStructure);

}
void DHT11_Start(void)
{
	DHT11_GPIO_Init_OUT();
	
	dht11_high; 
	delay_us(30);
	
	dht11_low; 
	delay_ms(20);
	
	dht11_high; 
	delay_us(30);
	
	DHT11_GPIO_Init_IN(); 
}

欢迎大家交流。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值