
cubemx生成的stm32f407zgt6控制dht11输出温湿度,但是串口输出的温湿度度数值一直不变,怎么回事?

关注让【宝码香车】来帮你解答,本回答参考DeepSeek编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
如果答案让您满意,请采纳、关注,非常感谢!
在使用STM32F407ZGT6控制DHT11输出温湿度时,如果串口输出的温湿度数值一直不变,可能的原因有很多。以下是一些常见的排查步骤和可能的原因:
以下是一个简单的DHT11读取数据的代码片段,供参考:
void DHT11_Start(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
// Configure GPIO pin as output
GPIO_InitStruct.Pin = DHT11_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(DHT11_GPIO_PORT, &GPIO_InitStruct);
// Pull low for 18ms
HAL_GPIO_WritePin(DHT11_GPIO_PORT, DHT11_PIN, GPIO_PIN_RESET);
HAL_Delay(18);
// Pull high for 20-40us
HAL_GPIO_WritePin(DHT11_GPIO_PORT, DHT11_PIN, GPIO_PIN_SET);
HAL_Delay_us(30);
// Configure GPIO pin as input
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(DHT11_GPIO_PORT, &GPIO_InitStruct);
}
uint8_t DHT11_Read(void) {
uint8_t data = 0;
for (int i = 0; i < 8; i++) {
while (HAL_GPIO_ReadPin(DHT11_GPIO_PORT, DHT11_PIN) == GPIO_PIN_RESET);
HAL_Delay_us(40);
if (HAL_GPIO_ReadPin(DHT11_GPIO_PORT, DHT11_PIN) == GPIO_PIN_SET) {
data |= (1 << (7 - i));
}
while (HAL_GPIO_ReadPin(DHT11_GPIO_PORT, DHT11_PIN) == GPIO_PIN_SET);
}
return data;
}
void DHT11_Read_Data(uint8_t *humidity, uint8_t *temperature) {
uint8_t data[5] = {0};
DHT11_Start();
for (int i = 0; i < 5; i++) {
data[i] = DHT11_Read();
}
*humidity = data[0];
*temperature = data[2];
}
通过以上步骤,你应该能够找到问题所在并解决DHT11输出温湿度数值不变的问题。如果问题仍然存在,建议进一步检查硬件和代码逻辑,或者尝试更换传感器。