温湿度采集与OLED显示

实验背景

1. 学习I2C总线通信协议,使用STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出。具体任务:1)解释什么是“软件I2C”和“硬件I2C”? (阅读野火配套教材的第23章“I2C–读写EEPROM”原理章节)2)阅读AHT20数据手册,编程实现:每隔2秒钟采集一次温湿度数据,显示到OLED上,同时通过串口发送到上位机的“串口助手”软件。

实验原理

I2C

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。

物理层与协议层

物理层

I2C是一个支持设备的总线。可连接多个 I2C 通讯设备,支持多个通讯主机及多个通讯从机。对于I2C 总线,只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL)。I2C 通讯设备常用连接方式

在这里插入图片描述

协议层

主要是定义了通讯的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等。
通讯的起始和停止信号
在这里插入图片描述
数据有效性
在这里插入图片描述
从图中可以看出I2C在通讯的时候,只有在SCL处于高电平时,SDA的数据传输才是有效的。SDA 信号线是用于传输数据,SCL 信号线是保证数据同步。
响应
在这里插入图片描述
当SDA传输数据后,接收方对接受到的数据进行一个应答。如果希望继续进行传输数据,则回应应答信号(低电平),否则回应非应答信号(高电平)。

硬件O2C和软件I2C

硬件I2C

直接利用 STM32 芯片中的硬件 I2C 外设。

硬件I2C的使用
只要配置好对应的寄存器,外设就会产生标准串口协议的时序。在初始化好 I2C 外设后,只需要把某寄存器位置 1,此时外设就会控制对应的 SCL 及 SDA 线自动产生 I2C 起始信号,不需要内核直接控制引脚的电平。

软件I2C的使用

直接使用 CPU 内核按照 I2C 协议的要求控制 GPIO 输出高低电平,从而模拟I2C。

软件I2C的使用
需要在控制产生 I2C 的起始信号时,控制作为 SCL 线的 GPIO 引脚输出高电平,然后控制作为 SDA 线的 GPIO 引脚在此期间完成由高电平至低电平的切换,最后再控制SCL 线切换为低电平,这样就输出了一个标准的 I2C 起始信号。

两者的差别

硬件 I2C 直接使用外设来控制引脚,可以减轻 CPU 的负担。不过使用硬件I2C 时必须使用某些固定的引脚作为 SCL 和 SDA,软件模拟 I2C 则可以使用任意 GPIO 引脚,相对比较灵活。对于硬件I2C用法比较复杂,软件I2C的流程更清楚一些。如果要详细了解I2C的协议,使用软件I2C可能更好的理解这个过程。在使用I2C过程,硬件I2C可能通信更加快,更加稳定。

AHT20

引脚定义

在这里插入图片描述

传感器读取流程
  • 上电后要等待不少于100ms, 读取温湿度值之前, 通过发送0x71获取一个字节的状态字,如果状态字和0x18相与后不等于0x18,初始化0x1B、 0x1C、 0x1E寄存器, 详细初始化流程请参照官网例程; 如果相等,执行下一步

  • 等待10ms发送0xAC命令(触发测量), 此命令参数有两个字节, 第一个字节为0x33,第二个字节为0x00

  • 等待80ms待测量完成,如果读取状态字Bit[7]为0, 表示测量完成, 然后可以连续读取六个字节; 否则继续等待

  • 当接收完六个字节后, 紧接着下一个字节是CRC校验数据, 用户可以根据需要读出, 如果接收端需要CRC校验,则在接收完第六个字节后发ACK应答, 否则发NACK结束,CRC初始值为0XFF,CRC8校验多项式为:

CRC[7:0]=1+x4+x5+x8AHT20

  • 计算温湿度值。 注: 在第一步的校准状态检验只需要上电时检查, 在正常采集过程无需操作。
    在这里插入图片描述

  • 原始数据处理

  • 在这里插入图片描述

实验

使用keil生成hex文件之后设置成如下模式,即可得到实验结果
在这里插入图片描述

在这里插入图片描述
硬件连接方法
STM32F103C8T6——USB to TTL
3V3 ——3V3
GND —— GND
RXD ——A9
TXD ——A10

STM32F103C8T6 ——AHT20
3V3/5V——VDD
PB7——SDA
GND——GND
PB6——SCL

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值