1.读取数据为0
如果代码正确的话,我遇到的温湿度为0的原因主要还是电源的问题,比如没有给开发板单独供电或者连线松动。因为有时候插着ST-Link连接到了电脑,开发板和DHT11的电源指示灯都会亮,但还是需要给开发板连上电源,这样更稳定,插上电源之后复位一下读到的温湿度就正常了。有时候线连的不紧也会这样,连紧一点就好了。
2.温湿度过高,达到八九十
这个原因比较奇怪,因为我确定DHT11的代码是没什么问题的,换了好几种代码结果都是温度89℃,显然不对。最后我在主函数里没有调用DHT11的初始化函数,结果运行起来正常了,我觉得应该是初始化的问题。初始化代码如下。文章来源:https://www.toymoban.com/news/detail-739525.html
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();
}
欢迎大家交流。文章来源地址https://www.toymoban.com/news/detail-739525.html
到了这里,关于STM32+DHT11 读取数据为0或温湿度过高的常见原因及解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!