野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19324|回复: 11

DHT11+串口的小问题 求助啊 纠结一晚上

[复制链接]
发表于 2014-10-10 20:05:14 | 显示全部楼层 |阅读模式
下面这一段程序是野火mini例程中DHT11模块中的的代码,我仅仅增加了一条串口输出语句,就出现了死循环,求助为什么啊:
uint8_t Read_DHT11(DHT11_Data_TypeDef *DHT11_Data)
{  
        u8 i=0;
        DHT11_Mode_Out_PP();
        DHT11_DATA_OUT(LOW);
        Delay_ms(18);
        DHT11_DATA_OUT(HIGH);
        Delay_us(30);  
        DHT11_Mode_IPU();
        if(DHT11_DATA_IN()==Bit_RESET)     
        {
                while(DHT11_DATA_IN()==Bit_RESET);
                printf("aaa");    //我增加了这一句串口输出,导致会出现死循环
                while(DHT11_DATA_IN()==Bit_SET);
                DHT11_Data->humi_int= Read_Byte();
                DHT11_Data->humi_deci= Read_Byte();
                DHT11_Data->temp_int= Read_Byte();
                DHT11_Data->temp_deci= Read_Byte();
                DHT11_Data->check_sum= Read_Byte();
                DHT11_Mode_Out_PP();
                DHT11_DATA_OUT(HIGH);
                if(DHT11_Data->check_sum == DHT11_Data->humi_int + DHT11_Data->humi_deci + DHT11_Data->temp_int+ DHT11_Data->temp_deci)
                        return SUCCESS;
                else
                        return ERROR;
        }
        else
        {               
                return ERROR;
        }   

}
这是野火读取DHT11温湿度传感器的模块的关键代码,本来是好用的,但是我在第13行加了一条“printf("aaa");”语句,这个程序就出现了异常,会在下面的某处陷入死循环(经测试,在哪处出现死循环和你的printf语句在哪有关),这是为什么呢,难道读取DHT11的时序的时候不能出现和串口交互的代码吗?求大神解答啊~~





回复

使用道具 举报

发表于 2014-10-10 20:12:21 | 显示全部楼层
在其它地方printf语句正常吗?
回复 支持 反对

使用道具 举报

发表于 2014-10-10 20:12:44 | 显示全部楼层
dht11好像使用到了systick,可能有影响
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-10 20:20:32 | 显示全部楼层
贡慧丽 发表于 2014-10-10 20:12
在其它地方printf语句正常吗?

如果是在读取DHT11时序的过程中调用串口输出,貌似都会出现问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-10 20:23:49 | 显示全部楼层
相津童 发表于 2014-10-10 20:12
dht11好像使用到了systick,可能有影响

DHT11用到systick应该只是用作时延吧,和串口输出有什么关系呢?
回复 支持 反对

使用道具 举报

发表于 2014-10-10 20:28:05 | 显示全部楼层
我的理解是,printf()这个函数我测试过,单片机调用这个函数需要时间,忘了是us级还是ms级,可能会对你DHT11的高低电平时序产生影响~个人理解哈~
回复 支持 反对

使用道具 举报

发表于 2014-10-10 20:42:10 | 显示全部楼层
当然有影响,dht11对时间要求很高的,当你printf语句结束后,已经不符合dht11的时序了,dht11会认为是干扰
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-10 20:59:28 | 显示全部楼层
慕娅娜 发表于 2014-10-10 20:42
当然有影响,dht11对时间要求很高的,当你printf语句结束后,已经不符合dht11的时序了,dht11会认为是干扰

有道理。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-10 21:00:02 | 显示全部楼层
獨自、成雙 发表于 2014-10-10 20:28
我的理解是,printf()这个函数我测试过,单片机调用这个函数需要时间,忘了是us级还是ms级,可能会对你DHT ...

有道理哈,再麻烦问下那个函数的时间性能是怎么测试的呢?  新手求问
回复 支持 反对

使用道具 举报

发表于 2014-10-11 09:21:52 | 显示全部楼层
1075482900 发表于 2014-10-10 21:00
有道理哈,再麻烦问下那个函数的时间性能是怎么测试的呢?  新手求问

呃,我当时是在调试TSL1401的时候发现printf()会影响线性CCD的曝光率,据此推测大概有几个毫秒,具体有多长时间你可以写个测试程序测试一下,这个应该很简单吧,调用一个定时器就好~
回复 支持 反对

使用道具 举报

发表于 2014-12-21 21:06:31 | 显示全部楼层
我也遇到了这个问题,但还不知道是什么原因造成的,程序里我也调用了printf
回复 支持 反对

使用道具 举报

发表于 2015-1-12 23:32:26 | 显示全部楼层
我也遇到了同样的状况,液晶显示温湿度,但是当连续触摸屏幕后导致程序卡死。怀疑是中断打乱了DHT11的读取,然后死等在某个位置。目前还没有解决呢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-25 00:04 , Processed in 0.030760 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表