STM32 DHT11串口打印源程序

发布者:jiaohe1最新更新时间:2020-07-24 来源: 51hei关键字:STM32  DHT11  串口打印 手机看文章 扫描二维码
随时随地手机看文章

1.硬件准备:
USB转TTL工具一个
核心板STM32F103C8T6
DHT11传感器
2.软件准备:
串口调试助手
2.硬件连线
USB转TTL的RX----32板子上的PA9
USB转TTL的TX----32板子上的PA10
DHT11的DAT连接PB14
51hei图片20200309134656.png

3.程序源码

#include "dht11.h"

//////////////////////////////////////////////////////////////////////////////////  

#include "delay.h"         

//////////////////////////////////////////////////////////////////////////////////

//复位DHT11

void DHT11_Rst(void)   

{                 

DHT11_IO_OUT();  //SET OUTPUT

    DHT11_DQ_OUT=0;  //拉低DQ

    delay_ms(20);     //拉低至少18ms

    DHT11_DQ_OUT=1;  //DQ=1

delay_us(30);      //主机拉高20~40us

}

//等待DHT11的回应

//返回1:未检测到DHT11的存在

//返回0:存在

u8 DHT11_Check(void)     

{   

u8 retry=0;

DHT11_IO_IN();//SET INPUT  

    while (DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us

{

  retry++;

  delay_us(1);

};  

if(retry>=100)return 1;

else retry=0;

    while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80us

{

  retry++;

  delay_us(1);

};

if(retry>=100)return 1;     

return 0;

}

//从DHT11读取一个位

//返回值:1/0

u8 DHT11_Read_Bit(void)     

{

  u8 retry=0;

while(DHT11_DQ_IN&&retry<100)//等待变为低电平

{

  retry++;

  delay_us(1);

}

retry=0;

while(!DHT11_DQ_IN&&retry<100)//等待变高电平

{

  retry++;

  delay_us(1);

}

delay_us(40);//等待40us

if(DHT11_DQ_IN)return 1;

else return 0;     

}

//从DHT11读取一个字节

//返回值:读到的数据

u8 DHT11_Read_Byte(void)   

{        

    u8 i,dat;

    dat=0;

for (i=0;i<8;i++)

{

     dat<<=1;

     dat|=DHT11_Read_Bit();

    }         

    return dat;

}

//从DHT11读取一次数据

//temp:温度值(范围:0~50°)

//humi:湿度值(范围:20%~90%)

//返回值:0,正常;1,读取失败

u8 DHT11_Read_Data(u8 *temp,u8 *humi)   

{        

  u8 buf[5];

u8 i;

DHT11_Rst();

if(DHT11_Check()==0)

{

  for(i=0;i<5;i++)//读取40位数据

  {

   buf[i]=DHT11_Read_Byte();

  }

  if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])

  {

   *humi=buf[0];

   *temp=buf[2];

  }

}else return 1;

return 0;     

}

//初始化DHT11的IO口 DQ 同时检测DHT11的存在

//返回1:不存在

//返回0:存在      

u8 DHT11_Init(void)

{  

  GPIO_InitTypeDef  GPIO_InitStructure;

  

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //使能PB端口时钟


  GPIO_InitStructure.GPIO_Pin = DHT11_PIN;     //PG11端口配置

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //推挽输出

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(DHT11_IO, &GPIO_InitStructure);     //初始化IO口

  GPIO_SetBits(DHT11_IO,DHT11_PIN);       //PG11 输出高

      

DHT11_Rst();  //复位DHT11

return DHT11_Check();//等待DHT11的回应

}

关键字:STM32  DHT11  串口打印 引用地址:STM32 DHT11串口打印源程序

上一篇:STM32单片机PS2遥控小车
下一篇:实现STMF103串口仿真

推荐阅读最新更新时间:2024-11-17 06:33

STM32之启动文件详解
在嵌入式应用程序开发过程里,由于使用C语言编程,基本很少涉及到机器底层寄存器的执行过程,一般都会直接在main函数里开始写代码,似乎main成为了理所当然的起点,尽管从C程序的角度来看程序都是直接从main函数开始执行。然而,MCU上电后,是如何寻找到并执行main函数这一问题却很自然的被忽略了!事实上微控制器是无法从硬件上去定位main函数的入口地址,因为使用C语言作为开发语言后,变量/函数的地址便由编译器在编译时自行分配,因此main函数的入口地址在编译后便不一定是一个绝对地址。MCU上电后又是如何寻找到这个入口地址呢?以前接触无论是PIC、AVR、MSP430或是51过程中都没涉及到启动文件的配置,仅仅只有熔丝位或配置字是需
[单片机]
stm32能跑什么系统
  STM32系列32位微控制器,基于ARM Cortex-M3处理器。它能支持32位广泛的应用,支持包括高性能、实时功能、数字信号处理,和低功耗、低电压操作,同时拥有一个完全集成和易用的开发。   基于STM平台且满足实时控制要求的操作系统,有以下4种可供选择。分别为μC/OS-II、μClinux、eCos、FreeRTOS和都江堰操作系统(djyos)。下面分别介绍这五种嵌入式操作系统的特点及不足。   1、μC/OS-II   μC/OS-II 是一种基于优先级的抢占式多任务实时操作系统,包含了实时内核、任务管理、时间管理、任务间通信同步(信号量,邮箱,消息 队列)和内存管理等功能。它可以使各个任务独立工作,互不干
[单片机]
[STM32] 关于USART接收中断的BUG和注意事项
今天在使用USART模块,遇到了一些问题并解决了,于是发贴共享。 问题描述: 在使用USART做串口通讯时,我只把接收中断打开,并设置抢占优先级为最低一个级别,而接收中断上一个优先级处理事情比较多,可能占用了2ms时间。当我使用9600波特率往下位机发送数据,速度非常快,就是一直按回车发!问题就出来,不到1分钟时间,通讯没有反应了。USART配置代码如下: void uart_config(void) { USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = UART_GetBaud(BaudRate); USART_In
[单片机]
STM32 M0时钟配置
本文主要讲STM32 M0的时钟配置。 先来看看M0内核的时钟树(stm32f072) 图中可以看出,M0芯片的时钟源有4个,一个高速内部RC时钟源,频率为8M;一个高速外部时钟源,频率为8到32MHz;一个低速外部时钟源,频率一般为32.768kHz;一个低速内部时钟源,频率为40kHz; 一、HSI 芯片上电的时候默认启用内部RC震荡,即8MHz的内部时钟源,如果对时钟要求不是特尔高的时候,使用内部时钟也够了,省下一个外部晶振的钱。 下面首先说说使用内部时钟的配置,官方提供的demo默认的就是使用内部时钟的,我们先从时钟树分析,HSI(8MHz)启动,经过PLLSRC(锁相环时钟源选择寄存器),然后来到PREDIV(预分频
[单片机]
STM32串口通信基本原理(超基础、详细版)
STM32F1xx官方资料: 《STM32中文参考手册V10》-第25章通用同步异步收发器(USART) 通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种。它们的区别是: 并、串行通信的区别 并行通信 串行通信 传输原理 数据各个位同时传输 数据按位顺序传输 优点 速度快 占用引脚资源少 缺点 占用引脚资源多 速度相对较慢 串行通信的分类 1、按照数据传送方向,分为: 单工:数据传输只支持数据在一个方向上传输; 半双工:允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;它不需要独立的接收端和发送端,两
[单片机]
【<font color='red'>STM32</font>】<font color='red'>串口</font>通信基本原理(超基础、详细版)
STM32的启动模式
刚开始接触STM32,最先遇到的问题就是下载程序。我按照教程,使用串口下载,感觉很简单。但是,最近需要使用LCD12864,就把以前的MSP430上的程序移植了一下,结果我发现了一个奇怪的现象,每次下载完程序后,断电,再上电后,液晶屏就不再显示了。这让我感到无比的头疼,因为我总以为是我的程序有问题,反反复复修改了好多遍,经过几个小时的调试,我最终找到了问题的缘由:那就是启动模式。 STM32不同于51或者430的地方是,它有两个管脚:BOOT0,BOOT1用来控制单片机上电复位后启动的位置。如下图所示: ● 第一种启动方式是最常用的用户FLASH启动,正常工作就在这种模式下,STM32的FLASH可以擦出10万次,所以不用
[单片机]
<font color='red'>STM32</font>的启动模式
STM32单片机的高精度超声波测距系统设计
一、系统组成 STM32单片机的高精度超声波测距系统的设计主要由STM32单片机、超声波发射电路、接受电路、补偿电路和软件等构成。该系统将STM32单片机作为整个系统的核心,通过协调各部分电路工作,进而实现高精度的超声波测距口。 二、系统硬件设计 1、超声波发射电路 超声波发射电路两个最主要的组成部分就是超声波探头和超声波激励电路。超声波探头不仅是超声波发射电路的一个重要组成部分,更是整个超声波测距系统的重要组成部分。它是超声波测距系统中用以发射或接受超声波信号的主要器件。超声波激励电路的基本工作原理是首先利用相应的机理信号对一特定形式的电压进行处理之后,将其加载到超声波探头上,然后再通过超声波探头压电晶片将其自身所具有的电能
[单片机]
STM32 ADC 采样 频率的确定
本文阐述了直流偏置电源对敏感模拟应用中所使用运算放大器 (op amp) 产生的影响,此外还涉及了电源排序及直流电源对输入失调电压的影响。另外,本文还介绍了一种通过线性稳压器(一般不具有追踪能力)轻松实施追踪分离电源的方法,以帮助最小化直流偏置电源带来的一些不利影响。   在许多运算放大器电路中,直流偏置电源会影响运算放大器的性能,特别是在与高位计数模数转换器 (ADC) 一起使用或者用于敏感传感器电路的信号调节时。直流偏置电源电压决定放大器的输入共模电压以及许多其他规范。   在上电期间,必须协调直流偏置电源的顺序来防止运算放大器锁闭。这样会毁坏、损坏或者阻止运算放大器正常运行。本文解释了追踪电源对运算放大器的重要性,并介绍了一
[模拟电子]
一 <font color='red'>STM32</font> ADC 采样 频率的确定
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved