找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1785|回复: 0
打印 上一主题 下一主题
收起左侧

dht11 k60 stm32的时序问题

[复制链接]
跳转到指定楼层
楼主
ID:358700 发表于 2018-7-17 21:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DHT11对时序要求很严格,延时必须准确差异少下面贴上我修改后的代码
void DHT11WriteStart(void)//开始标志
{
    DHT11_GPIO_OUT(); //输出
    gpio_set (DTH11_PORT, 1);
    gpio_set (DTH11_PORT, 0);
    DELAY_MS(20);
    gpio_set (DTH11_PORT, 1);
    DELAY_US(30) ;
    DHT11_GPIO_IN(); //主机发送信号等待

}


u8 DHT11ReadByte(void)
{
  u8 temp=0,i,cout;
for(i=0;i<8;i++)
  {

    while( gpio_get(DTH11_PORT)==0);//DHT11输出低电平
     DELAY_US(60) ;

    if(gpio_get(DTH11_PORT)==1) //60us是否高电平,是标志1
      {
       while(gpio_get(DTH11_PORT)==1)
        temp|=(u8)(0x01<<(7-i));

       }

   else //否表示0
    {
      temp&=(u8)~(0x01<<(7-i));

   }


}
return temp;
}

char a[5];
int temp;


//时序图编写的接受函数
void DHT11Read(void)
{   
    int count=0;
    DHT11WriteStart();
    if(DHT11_DATA_IN==0)
      {
       while(gpio_get(DTH11_PORT)==0);

        while(gpio_get(DTH11_PORT) ==1);

        DHT11.RH= DHT11ReadByte();
        DHT11.RL= DHT11ReadByte();
        DHT11.TH= DHT11ReadByte();
        DHT11.TL= DHT11ReadByte();
        DHT11.sum= DHT11ReadByte();

        DHT11_GPIO_OUT();
        DHT11_DATA_OUT=1;
      }

}
到此结束,剩下的代码也就很容易的。
本坛也有很多类似的stm32 的DHT11的类似,所以我发了个k60
有什么问题评论区就行了,我看到了就会回复了。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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