IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> MM32F3277的DHT11实例 -> 正文阅读

[嵌入式]MM32F3277的DHT11实例

学习嵌入式单片机接触到最简单的一个模块之一就是DHT11了


5V或者3.3V供电,一个 GND脚以及一个数据脚在这里插入图片描述

通过stm32移植dht11程序到MM32

DHT11.c

#include "dht11.h"
 
void dht11_gpio_input(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    
    RCC_AHBPeriphClockCmd(DHT11_RCC, ENABLE);
    
    GPIO_InitStruct.GPIO_Pin = DHT11_GPIO_PIN;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
    
    GPIO_Init(DHT11_GPIO_TYPE, &GPIO_InitStruct);
}
 
void dht11_gpio_output(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    
    RCC_AHBPeriphClockCmd(DHT11_RCC, ENABLE);
    
    GPIO_InitStruct.GPIO_Pin = DHT11_GPIO_PIN;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
 
    GPIO_Init(DHT11_GPIO_TYPE, &GPIO_InitStruct);
}
 
void dht11_reset(void)
{
    dht11_gpio_output();//配置IO口输出模式
    DHT11_OUT_L;//拉低IO口
    DELAY_Ms(19);//延时18ms-30ms之间
    DHT11_OUT_H;//拉高IO口
    DELAY_Us(3);//延时30us,等待接收
    dht11_gpio_input();//配置为输入模式
}
 
u16 dht11_scan(void)
{
    return DHT11_IN;
}
 
u16 dht11_read_bit(void)
{
    while (DHT11_IN == RESET);//等待低电平结束
    DELAY_Us(4);//延时40us,如果是信号0,高电平信号在26-28us之间,如果是信号1,高电平信号在70us
    if (DHT11_IN == SET)//如果还是高电平就是信号1
    {
        while (DHT11_IN == SET);//等待此信号结束
        return 1;
    }
    else
    {
        return 0;
    }
}
 
u16 dht11_read_byte(void)
{
    u16 i;
    u16 data = 0;
    for (i = 0; i < 8; i++)
    {
        data <<= 1;
        data |= dht11_read_bit();
    }
    return data;
}
 
u16 dht11_read_data(u8 buffer[5])
{
    u16 i = 0;
    u8 checksum;
    dht11_reset();//发送起始信号
    if (dht11_scan() == RESET)
    {
        //等待响应信号结束
        while (dht11_scan() == RESET);
        while (dht11_scan() == SET);
        for (i = 0; i < 5; i++)
        {
            buffer[i] = dht11_read_byte();
        }
        
        while (dht11_scan() == RESET);//接收结束,拉高片选
        dht11_gpio_output();
        DHT11_OUT_H;

         checksum = buffer[0] + buffer[1] + buffer[2] + buffer[3];//校验数据
        if (checksum != buffer[4])
        {
            // checksum error
            return 1;
        }
    }
    
    return 0;
}

DHT11.h

#ifndef 	__DHT11_H__
#define		__DHT11_H__

#include "sys.h"
#include "led.h"
#include "stdio.h"
#include "delay.h"

#define DHT11_GPIO_TYPE  GPIOB
#define DHT11_GPIO_PIN   GPIO_Pin_1
#define DHT11_RCC        RCC_AHBENR_GPIOB


#define DHT11_OUT_H GPIO_SetBits(DHT11_GPIO_TYPE, DHT11_GPIO_PIN)
#define DHT11_OUT_L GPIO_ResetBits(DHT11_GPIO_TYPE, DHT11_GPIO_PIN)
#define DHT11_IN    GPIO_ReadInputDataBit(DHT11_GPIO_TYPE, DHT11_GPIO_PIN)

void dht11_gpio_input(void);
void dht11_gpio_output(void);
u16 dht11_scan(void);
u16 dht11_read_bit(void);
u16 dht11_read_byte(void);
u16 dht11_read_data(u8 buffer[4]);

#endif

你只需要更改你需要的引脚即可
另外由于MM32F3277的库函数的DELAY_Us()函数被注释了,你可以自己手动更改SysTick_Config(SystemCoreClock / 100000)这个函数的滴答间隔时间(10us)。
由于我根据野火的滴答定时器改的,所以我并没有试过间隔1us能否成功,如果你感兴趣的话你可以试一试。
更改了SysTick_Config()滴答间隔配置函数,相应的你也就需要更改DELAY_Ms()的写法并且添加DELAY_Us()微秒延时函数了。

到这里,你的DHT11程序就完成了。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 15:17:19  更:2021-08-20 15:18:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:58:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码