OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4122|回复: 3

关于DHT11移植至UCOS系统读不到数据解决方法

[复制链接]

13

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2016-7-24
在线时间
20 小时
发表于 2017-6-18 10:59:36 | 显示全部楼层 |阅读模式
如题,解决方法如下:
1.将原来的void DHT11_Rst(void)函数改为如下,防止delay_ms(20)发生任务调度,打断DHT11读写时序 ;
void DHT11_Rst(void)
{
        int i;
        DHT11_IO_OUT();         //SET OUTPUT
    DHT11_DQ_OUT=0;         //拉低DQ
//    delay_ms(20);            //拉低至少18ms    防止用实时系统发生任务调度影响DHT11读写时序
        for(i=0;i<2000;i++)
                delay_us(1);
    DHT11_DQ_OUT=1;         //DQ=1
        delay_us(30);             //主机拉高20~40us
}
2.在调用DHT11_Read_Data()函数的地方用临界段保护,防止其他中断打断DHT11读写时序;
// 温湿度任务
_DHT11 Temp_Humi;               
static void dht11_task(void *p_arg)
{       
        OS_ERR err;       
        CPU_SR_ALLOC();
       
        while(1)
        {
                OS_CRITICAL_ENTER();        //进入临界区
                DHT11_Read_Data(&Temp_Humi);
                OS_CRITICAL_EXIT();        //退出临界区                        
                OSTimeDlyHMSM(0,0,0,100,OS_OPT_TIME_PERIODIC,&err);//延时100ms
        }
}

3.亲测可用,不过数值误差比较大。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2016-7-24
在线时间
20 小时
 楼主| 发表于 2017-6-18 19:13:11 | 显示全部楼层
温度基本正确,湿度与实际相差较大
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2020-2-22
在线时间
11 小时
发表于 2020-3-28 11:19:34 | 显示全部楼层
感谢,非常有用
回复 支持 反对

使用道具 举报

1

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2022-3-20
在线时间
16 小时
发表于 2022-4-12 16:26:44 | 显示全部楼层
感謝, 推一下
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 14:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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