串口无法显示实时温湿度值

stm32的dht11测温度值
想让串口显示出实时温湿度值
但是无法读入dht11_get_temp……这句
屏蔽这句后可以运行 但不是实时温湿度值
这该怎么改

img

img

程序卡死在读温湿度这个函数里了,提供下这个函数的具体内容!

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    首先,需要确定dht11_get_temp函数是否能正常读取传感器的温湿度值。可以编写一个简单的程序进行测试,将读取到的值打印到串口以确认是否正常。

    如果dht11_get_temp函数正常工作,但在程序中造成了延迟,可以将该函数改为使用DMA进行数据传输,从而不会影响到整个程序的运行。

    接下来,在主程序中使用定时器中断,以一定时间间隔读取传感器的温湿度值并将其存储在变量中。同时,在串口中断中将存储的温湿度值打印到串口。

    可以参考下面的代码:

    #include "stm32f4xx.h"
    #include "stdio.h"
    #include "DHT11.h"
    
    uint16_t humidity = 0, temperature = 0;
    uint8_t buffer[DHT11_DATA_SIZE];
    
    void init_variables(){
        // 初始化变量
    }
    
    void init_gpio(){
        // 初始化GPIO口
    }
    
    void init_uart(){
        // 初始化串口
    }
    
    void init_dht11(){
        // 初始化DHT11
    }
    
    void init_timer(){
        // 初始化定时器
    }
    
    void init_interrupts(){
        // 初始化NVIC中断
    }
    
    int main(void)
    {
        init_variables();
        init_gpio();
        init_uart();
        init_dht11();
        init_timer();
        init_interrupts();
    
        while(1)
        {
            // 主程序运行内容
        }
    }
    
    void TIM3_IRQHandler(void)
    {
        TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
    
        // 获取温湿度值
        DHT11_ReadData();
    
        if(DHT11_CheckData(buffer) == SUCCESS)
        {
            humidity = buffer[0];
            temperature = buffer[2];
        }
    }
    
    void USART3_IRQHandler(void)
    {
        if(USART_GetITStatus(USART3, USART_IT_TXE) != RESET)
        {
            char str[50];
            sprintf(str, "Humidity: %d, Temperature: %d\n", humidity, temperature);
            USART_SendData(USART3, (uint8_t)str);
        }
    }
    

    需要注意的是,定时器中断和串口中断的时间间隔需要根据实际测试结果进行调整。此外,代码中的DHT11_ReadData()和DHT11_CheckData()函数需要自行编写。

    如果以上方法仍然不能解决问题,可能需要使用RTOS或多线程来处理程序。但是,这需要额外的学习和开发成本。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^