You are on page 1of 21

(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

学 ARM 从 STM32 开始
STM32 开发板库函数教程--模块篇

官方网站:http://www.zxkjmcu.com
官方店铺:http://zxkjmcu.taobao.com
官方论坛:http://bbs.zxkjmcu.com
刘洋课堂:http://school.zxkjmcu.com

版本号:V2.1 第 1 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

目 录
5.03.1 概述...................................................................................................... 3

5.03.1.1 性能描述................................................................................... 4

5.03.1.2 传感器时序............................................................................... 4

5.03.2 实验目的..............................................................................................6

5.03.3 硬件设计..............................................................................................7

5.03.4 软件设计..............................................................................................7

5.03.4.1 软件设计说明........................................................................... 8

5.03.4.2 STM32 库函数文件.................................................................... 8

5.03.4.3 自定义头文件........................................................................... 8

5.03.4.4 pbdata.h 文件里的内容是...................................................... 9

5.03.4.5 pbdata.c 文件里的内容是...................................................... 9

5.03.5 STM32 系统时钟配置 SystemInit()............................................. 12

5.03.6 GPIO 引脚时钟使能........................................................................ 12

5.03.7 GPIO 管脚电平控制函数................................................................ 12

5.03.8 stm32f10x_it.c 文件里的内容是................................................ 13

5.03.9 dht11.h 文件里的内容是.............................................................. 13

5.03.10 dht11.c 文件里的内容是............................................................ 14

5.03.11 main.c 文件里的内容是.............................................................. 17

5.03.12 程序下载..........................................................................................19

5.03.13 实验效果图..................................................................................... 20

版本号:V2.1 第 2 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

5.03 温湿度传感器模块实验
5.03.1 概述

DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复

合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具

有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一

个 NTC 测温元件,并与一个高性能 8 位单片机相连接。因此该产品具有品

质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个 DHT11 传感

器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在

OTP 内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单

线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号

传输距离可达 20 米以上,使其成为各类应用甚至最为苛刻的应用场合的最

佳选则。

图 5.03.1 标准封装

DHT11 数字温湿度传感器模块为 4 针 PH2.0 封装。连接方便。如右图

版本号:V2.1 第 3 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

所示。

5.03.1.1 性能描述

1. 供电电压:3-5.5V

2. 供电电流:最大 2.5mA

3. 温度范围:0-50℃ 误差±2℃

4. 湿度范围:20-90%RH 误差±5%RH

5. 响应时间: 1/e(63%) 6-30s

6. 测量分辨率分别为 8bit(温度)、8bit(湿度)

7. 采样周期间隔不得低于 1 秒钟

8. 模块尺寸:30x20mm

图 5.03.2 典型应用电路

注释:建议连接线长度短于 20 米时使用 5K 上拉电阻,大于 20 米时根据实

际情况使用合适的上拉电阻。

5.03.1.2 传感器时序

DATA 用于微处理器与 DHT11 之间的通讯和同步,采用单总线数据格式,


版本号:V2.1 第 4 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

一次通讯时间 4ms 左右,数据分小数部分和整数部分,具体格式在下面说明,

当前小数部分用于以后扩展,现读出为零.操作流程如下:

一次完整的数据传输为 40bit,高位先出。

数据格式:

8bit 湿度整数数据+8bit 湿度小数数据

+8bi 温度整数数据+8bit 温度小数数据

+8bit 校验和

数据传送正确时校验和数据等于“8bit 湿度整数数据+8bit 湿度小数

数据+8bi 温度整数数据+8bit 温度小数数据”所得结果的末 8 位。

用户 MCU 发送一次开始信号后,DHT11 从低功耗模式转换到高速模式,等

待主机开始信号结束后,DHT11 发送响应信号,送出 40bit 的数据,并触发一

次信号采集,用户可选择读取部分数据.从模式下,DHT11 接收到开始信号触

发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11 不会主动进行

温湿度采集.采集数据后转换到低速模式。

通讯过程如图

图 5.03.3 工作时序图

总线空闲状态为高电平,主机把总线拉低等待 DHT11 响应,主机把总线

版本号:V2.1 第 5 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

拉低必须大于 18 毫秒,保证 DHT11 能检测到起始信号。DHT11 接收到主机的

开始信号后,等待主机开始信号结束,然后发送 80us 低电平响应信号.主机

发送开始信号结束后,延时等待 20-40us 后, 读取 DHT11 的响应信号,主机

发送开始信号后,可以切换到输入模式,或者输出高电平均可, 总线由上拉

电阻拉高。

图 5.03.4 DHT11 模块响应时序部分

总线为低电平,说明 DHT11 发送响应信号,DHT11 发送响应信号后,再把

总线拉高 80us,准备发送数据,每一 bit 数据都以 50us 低电平时隙开始,高

电平的长短定了数据位是 0 还是 1.格式见下面图示.如果读取响应信号为高

电平,则 DHT11 没有响应,请检查线路是否连接正常.当最后一 bit 数据传送

完毕后,DHT11 拉低总线 50us,随后总线由上拉电阻拉高进入空闲状态。

5.03.2 实验目的

1. 掌握温度采集模块 DHT11 的工作原理;

2. 掌握单片机实现温度采集模块 DHT11 数据采集的基本方法,其中包

括硬件和软件实现两部分;

版本号:V2.1 第 6 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

3. 熟悉单片机数据采集系统中,温度采集模块 DHT11 作为传感器对象

的系统设计方法。

5.03.3 硬件设计

选用大黄蜂实验板,温度采集模块 DHT11 是成品模块,直接插接到实验

板上即可。硬件设计见“图 5.03.5 温度采集模块 DHT11 连线图”。

图 5.03.5 温度采集模块 DHT11 连线图


附表 1 接线方法
Pin 名称 说明
1 VDD 供电 3~5.5VDC
2 DATA 串行数据,单总线
3 NC 空脚,请悬空
4 GND 接地,电源负极

5.03.4 软件设计

版本号:V2.1 第 7 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

5.03.4.1 软件设计说明

温度采集模块 DHT11 是成品模块,直接插接到实验板上即可。按照上一

章介绍的工作原理,我们就可以按照工作时序编写出数据采集程序。我们还

是采用库函数的方式进行程序设计。

在这节程序设计中,用到了外部中断函数;prinif 重定向打印输出函

数; USART 串口通讯函数;定时器函数。

5.03.4.2 STM32 库函数文件

stm32f10x_gpio.c
stm32f10x_rcc.c
Misc.c // 中断控制字(优先级设置)库函数
stm32f10x_exti.c // 外部中断库处理函数
stm32f10x_tim.c // 定时器库处理函数
stm32f10x_usart.c // 串口通讯函数

本节实验及以后的实验我们都是用到库文件,其中 stm32f10x_gpio.h

头文件包含了 GPIO 端口的定义。stm32f10x_rcc.h 头文件包含了系统时钟

配置函数以及相关的外设时钟使能函数,所以我们要把这两个头文件对应的

stm32f10x_gpio.c 和 stm32f10x_rcc.c 加到工程中;Misc.c 库函数主要包

含了中断优先级的设置,stm32f10x_exti.c 库函数主要包含了外部中断设

置参数,tm32f10x_tim.c 库函数主要包含定时器设置,tm32f10x_usart.c

库函数主要包含串行通讯设置,这些函数也要添加到函数库中。以上库文件

包含了本次实验所有要用到的函数使用功能。

5.03.4.3 自定义头文件

版本号:V2.1 第 8 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

pbdata.h
pbdata.c

我们在每个工程设计中都要创建了两个公共的文件,这两个文件主要存

放我们自定义的公共函数和全局变量,以方便以后每个功能模块(函数)之

间传递参数。

5.03.4.4 pbdata.h 文件里的内容是

#ifndef _pbdata_H
#define _pbdata_H

#include "stm32f10x.h"
#include "misc.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_usart.h"
#include "stdio.h"
#include "DHT11.h"

//定义变量

extern u8 dt;

//定义函数
void RCC_HSE_Configuration(void);
void delay(u32 nCount);//
void delay_us(u32 nus);//微妙延时程序函数
void delay_ms(u16 nms);//毫妙延时程序函数

#endif

语句 #ifndef、#endif 是为了防止 pbdata.h 文件被多个文件调用时出

现错误提示。如果不加这两条语句,当两个文件同时调用 pbdata 文件时,

会提示重复调用错误。

5.03.4.5 pbdata.c 文件里的内容是

版本号:V2.1 第 9 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

下面是 pbdata.c 文件详细内容,在文件开始还是引用“pbdata.h”文件。


#include "pbdata.h"

u8 dt=0;

void RCC_HSE_Configuration(void) //HSE 作为 PLL 时钟,PLL 作为 SYSCLK


{
RCC_DeInit(); /*将外设 RCC 寄存器重设为缺省值 */
RCC_HSEConfig(RCC_HSE_ON); /*设置外部高速晶振(HSE) HSE 晶振打开
(ON)*/

if(RCC_WaitForHSEStartUp() == SUCCESS) { /*等待 HSE 起振, SUCCESS:HSE


晶振稳定且就绪*/

RCC_HCLKConfig(RCC_SYSCLK_Div1);/*设置 AHB 时钟(HCLK)RCC_SYSCLK_Div1—


—AHB 时钟 = 系统时*/
RCC_PCLK2Config(RCC_HCLK_Div1); /*设置高速 AHB 时钟(PCLK2)RCC_HCLK_Div1
——APB2 时钟 = HCLK*/
RCC_PCLK1Config(RCC_HCLK_Div2); /*设置低速 AHB 时钟(PCLK1)RCC_HCLK_Div2
——APB1 时钟 = HCLK / 2*/

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);/*设置 PLL 时钟源及


倍频系数*/
RCC_PLLCmd(ENABLE); /*使能 PLL */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) ; /*检查指定的 RCC
标志位(PLL 准备好标志)设置与否*/

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /*设置系统时钟(SYSCLK)*/
while(RCC_GetSYSCLKSource() != 0x08); /*0x08:PLL 作为系统时钟 */

}
}

void delay(u32 nCount)


{
for(;nCount!=0;nCount--);
}

/***********************************************************************
* 名 称:delay_us(u32 nus)
* 功 能:微秒延时函数
* 入口参数:u32 nus
* 出口参数:无

版本号:V2.1 第 10 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

* 说 明:
* 调用方法:无
***********************************************************************/
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD = 9*nus;
SysTick->VAL=0X00;//清空计数器
SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源
do
{
temp=SysTick->CTRL;//读取当前倒计数值
}while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达

SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}

/***********************************************************************
* 名 称:delay_ms(u16 nms)
* 功 能:毫秒延时函数
* 入口参数:u16 nms
* 出口参数:无
* 说 明:
* 调用方法:无
***********************************************************************/
void delay_ms(u16 nms)
{
//注意 delay_ms 函数输入范围是 1-1863
//所以最大延时为 1.8 秒

u32 temp;
SysTick->LOAD = 9000*nms;
SysTick->VAL=0X00;//清空计数器
SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源
do
{
temp=SysTick->CTRL;//读取当前倒计数值
}while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}

版本号:V2.1 第 11 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

5.03.5 STM32 系统时钟配置 SystemInit()

在每个工程中必须在开始时配置并启动 STM32 系统时钟,这是基础,这

次也不例外。

5.03.6 GPIO 引脚时钟使能

SystemInit();//72m
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//设置 PA 输出端口
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//设置 PE 输出
RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//设置串口 1 时钟使

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//功能复用 IO 时钟使能

本节实验用到了 PA 和 PE 端口,所以要把 PA 和 PE 端口的时钟打开;串

口 1 时钟源是通过 APB2 预分频器得到的,串口 1 时钟初始化;因为要与外

部芯片通讯,所以要打开功能复用时钟。

5.03.7 GPIO 管脚电平控制函数

在主程序中采用 while(1)循环语句,采用查询方式不停的读取温湿度

数据,然后直接通过串口送打印输出到屏幕。
while(1)
{
DHT11_Read_Data(&wd,&sd); //读取温湿度值
printf("当前环境温度: %d ℃\r\n",wd);
printf("当前环境湿度: %d %%\r\n",sd);
delay_ms(1000);
delay_ms(1000);
}

5.03.8 stm32f10x_it.c 文件里的内容是

版本号:V2.1 第 12 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

在中断处理 stm32f10x_it.c 文件里中仅串口 1 子函数非空,进入中断处理

函数后,只有串口 1 有参数输出。
/* Includes
------------------------------------------------------------------*/
#include "stm32f10x_it.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_rcc.h"
#include "misc.h"
#include "pbdata.h"

void NMI_Handler(void)
{
}

void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
USART_SendData(USART1,USART_ReceiveData(USART1));
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
}
}

5.03.9 dht11.h 文件里的内容是

函数 dht11.h 在这里是为符合温湿度模块功能自定义的专用功能函数,

dht11.h 的内容如下:
#ifndef __DHT11_H
#define __DHT11_H
#include "pbdata.h"

#define IO_DHT11 GPIO_Pin_4 //引入中间变量,方便移植


#define GPIO_DHT11 GPIOE //引入中间变量,方便移植

#define DHT11_DQ_High GPIO_SetBits(GPIO_DHT11,IO_DHT11)


#define DHT11_DQ_Low GPIO_ResetBits(GPIO_DHT11,IO_DHT11)

void DHT11_IO_OUT(void);//温湿度模块输出函数

版本号:V2.1 第 13 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

void DHT11_IO_IN(void); //温湿度模块输入函数


void DHT11_Init(void); //初始化 DHT11
u8 DHT11_Read_Data(u8 *temp,u8 *humi);//读取温湿度
u8 DHT11_Read_Byte(void); //读出一个字节
u8 DHT11_Read_Bit(void); //读出一个位
u8 DHT11_Check(void); //检测是否存在 DHT11
void DHT11_Rst(void); //复位 DHT11
#endif

5.03.10 dht11.c 文件里的内容是

自定义函数 dht11.c 的内容如下:


#include "pbdata.h"

void DHT11_IO_IN(void)//温湿度模块输入函数
{
GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin=IO_DHT11;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIO_DHT11,&GPIO_InitStructure);
}

void DHT11_IO_OUT(void)//温湿度模块输出函数
{
GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin=IO_DHT11;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIO_DHT11,&GPIO_InitStructure);
}

//复位 DHT11
void DHT11_Rst(void)
{
DHT11_IO_OUT(); //SET OUTPUT
DHT11_DQ_Low; //DQ=0
delay_ms(20); //拉低至少 18ms
DHT11_DQ_High; //DQ=1

版本号:V2.1 第 14 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

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


}

//等待 DHT11 的回应


//返回 1:未检测到 DHT11 的存在
//返回 0:存在
u8 DHT11_Check(void)
{
u8 retry=0;//定义临时变量
DHT11_IO_IN();//SET INPUT
while
((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==1)&&retry<100)//DHT11 会拉低
40~80us
{
retry++;
delay_us(1);
};
if(retry>=100)return 1;
else retry=0;
while
((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==0)&&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((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==1)&&retry<100)//等
待变为低电平
{
retry++;
delay_us(1);
}
retry=0;
while((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==0)&&retry<100)//等
待变高电平
{

版本号:V2.1 第 15 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

retry++;
delay_us(1);
}
delay_us(40);//等待 40us
if(GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==1)
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;

版本号:V2.1 第 16 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

return 0;
}
//初始化 DHT11 的 IO 口 DQ 同时检测 DHT11 的存在
//返回 1:不存在
//返回 0:存在
void DHT11_Init(void)
{
DHT11_Rst(); //复位 DHT11
DHT11_Check();//等待 DHT11 的回应
}

5.03.11 main.c 文件里的内容是

#include "pbdata.h"

void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void USART_Configuration(void);

int fputc(int ch,FILE *f)


{
USART_SendData(USART1,(u8)ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
return ch;
}

int main(void)
{
u8 wd=0;
u8 sd=0;

RCC_Configuration(); //系统时钟初始化
GPIO_Configuration();//端口初始化
USART_Configuration();
NVIC_Configuration();

DHT11_Init();

while(1)
{
DHT11_Read_Data(&wd,&sd); //读取温湿度值

版本号:V2.1 第 17 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

printf("当前环境温度: %d ℃\r\n",wd);
printf("当前环境湿度: %d %%\r\n",sd);
delay_ms(1000);
delay_ms(1000);
}
}

void RCC_Configuration(void)
{
SystemInit();//72m
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
}

void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}

void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

void USART_Configuration(void)

版本号:V2.1 第 18 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

{
USART_InitTypeDef USART_InitStructure;

USART_InitStructure.USART_BaudRate=9600;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowContr
ol_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;

USART_Init(USART1,&USART_InitStructure);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
USART_Cmd(USART1,ENABLE);
USART_ClearFlag(USART1,USART_FLAG_TC);
}

5.03.12 程序下载

在这一章节中要掌握 DHT11 温湿度传感器工作时序,了解常用的温湿度

传感器功能和原理。

请根据下图所指向的 7 个重点区域配置。其中(1)号区域根据自己机

器的实际情况选择,我的机器虚拟出来的串口号是 COM3。(2)号区域请自

己选择程序代码所在的文件夹。(7)号区域当程序下载完后,进度条会到

达最右边,并且提示一切正常。(4、5、6)号区域一定要按照上图显示的

设置。当都设置好以后就可以直接点击(3)号区域的开始编程按钮下传程

序了。

版本号:V2.1 第 19 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

本节实验的源代码在光盘中:(LY-STM32 光盘资料\1.课程\2,外设篇\模块

篇 03.温湿度传感器模块(DHT11)\程序)

5.03.13 实验效果图

打开众想科技多功能监控软件,接着打开串口,我们在接收区可以观察

到实测采集到周围环境的温湿度数据,周围环境的温度大约 摄氏度左

右、湿度是 左右,说明我们温湿度模块工作正常,程序编写和设计思路

吻合。

版本号:V2.1 第 20 页 共 21 页 官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司 STM32 开发板用户使用手册

图 5.03.13.1 温湿度模块测试周围环境实验效果图

版本号:V2.1 第 21 页 共 21 页 官方网站:www.zxkjmcu.com

You might also like