目录
一、固件库模板
二、准备资料
-
固件库模板
-
MDK5开发环境
-
stm32参考手册
-
利用固件库模板点灯工程(下面第三行,手动狗头)
-
OLED模块资料
-
DHT11数据手册
-
利用固件库模板点灯工程(下面第三行,手动狗头)
-
CH340 USB→TTL模块
实验程序已经发布到百度网盘,本文末有链接可以自取
串口协议查看这篇博客USART串口协议
stm32中断概念STM32中断应用概括
DHT11模块资料:DHT11
IIC协议查看这篇博客IIC协议
OLED数据手册查看SSD1306Z
字模链接 链接:https://pan.baidu.com/s/1k_ay03xnAdGChirlTpTIVA
提取码:OLED
串口调试工具 :https://pan.baidu.com/s/1V-jRJzb0INDXDLo9I4CJ6A 提取码:0000
三、DHT11 简介
DHT11是一款有已校准数字信号输出的温湿度传感器
。 其精度湿度±5%RH, 温度±2℃,量程湿度5~95%RH, 温度-20~+60℃
查看数据手册在这:DHT11
下面的解释也都是引用数据手册内容,大家可以试着自己来阅读手册,当然想快速上手看下文即可,
1. 引脚定义
标号 | PIN | 引脚说明 |
---|---|---|
1 | GND | 模块电源地 |
2 | VCC | 模块电源正 |
3 | DATA | 数据引脚 |
2. DHT11 数据结构
DHT11数字湿温度传感器采用单总线数据
格式。即,单个数据引脚端口完成输入输出双向传输。其数据包由5Byte( 40Bit)组成。数据分小数部分和整数部分,具体格式在下面说明。
一次完整的数据传输为40bit,高位先出。
数据格式:
8bit湿度整数数据
+8bit湿度小数数据
+8bit温度整数数据
+8bit温度小数数据
+8bit校验和
校验和数据为前四个字节相加。
传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间应该分开处理。如果,某次从传感器中读取如下5Byte数据:
由以上数据就可得到湿度和温度的值,计算方法:
humi (湿度)= byte4. byte3=45.0 (%RH)
temp (温度)= byte2. byte1=28.0 (℃ )
jiaoyan(校验)= byte4+ byte3+ byte2+ byte1=73(=humi+temp)(校验正确)
注意: DHT11一次通讯时间最大3ms,主机连续采样间隔建议不小于100ms。
3. DHT11的传输时序
3.1 DHT11 开始发送数据流程
通讯过程
用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主 机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集, 用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集, 如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.
主机
发送开始信号后,延时等待 20us-40us
后读取 DHT11 的回应信号
,读取总线为低电平
,说明 DHT11 发送响应信号
, DHT11 发送响应信号后,再把总线拉高
,准备发送数据
,每一 bit 数据都以低电平开始
,格式见下面图示。如果读取响应信号为高电平,则 DHT11 没有响应,请检查线路是否连接正常。
3.2 主机复位信号和 DHT11 响应信号
3.3 数字‘ 0’信号表示方法
3.4 数字‘ 1’信号表示方法
四、OLED显示温湿度实验
1.硬件设计
GND接GND
VCC接3.3
OLED的SCL接stm32的B6(模拟IIC)
OLED的SDA接stm32的B7(模拟IIC)
DHT11的DATA接stm32的A11(普通GPIO口即可)
切记尽量避免使用PB3、PB4,具体看stm32f103c8t6使用PB3和PB4做普通GPIO使用时发现异常
硬件IIC请查看IIC协议
2.软件设计
-
使能 I2C 外设和A11的时钟;
-
配置 I2C 外设的参数并使能 I2C 外设,使能A11;
-
编写OLED初始化指令
-
编写DHT11获取数据函数
-
初始化SysTick系统定时器
2.1 复制工程 固件库模板
五、stm32-SysTick(系统定时器)
复制上面两个文件夹,不知道的同学可以去博客查阅
2.2 新建DHT11文件(打开工程)
2.3 编写代码
oled.c(模拟IIC)
OLED和SysTick的代码这里就不说了,相信关注我的都会手动狗头
oledfont.h
这里把使用到的中文字库也发一下吧
{
0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00},
{
0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00},/*"温",0*/
{
0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00},
{
0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00},/*"度",1*/
{
0x10,0x60,0x02,0x8C,0x00,0xFE,0x92,0x92