STM32 使用HTU21D温湿度传感器(结合逻辑分析仪深入分析IIC总线)
目录
1、介绍:
1、IIC总线为半双工通讯,有两条线,时钟信号线SCL和数据线SDA,主从模式,每个从设备可以通过,从机地址进行区分。
2、其数据传输速率位于串口和SPI之间。
3、上拉电阻一般在4.7k~10k之间,通过上拉电阻接正电源。当总线空闲的时候,两根线均为高电平。
4、一般用于同一板卡上芯片之间的通信
5、允许有多个master多个slave,并且每个master都可以与所有的slaves通信(master之间不可通过I2C通信,并且每个master只能轮流使用I2C总线),多主机会产生总线裁决问题。
6、IIC设备(绝大多数)里有个固化的地址,只有在两条线上传输的值等于IIC设备的固化地址时,其才会作出响应。基本上谁控制时钟线(即控制SCL的电平高低变换)谁就是主设备。(之前面试前有准备或几个常见总线的异同,贴一下给大家参考一下,见下图:)
2、信号:
开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲(把SDA拉低),表示已收到数据。
数据位的有效性规定:SCL为高电平期间,SDA上的数据必须保持稳定
只有在SCL线上的信号为低电平的期间,SDA线上的电平才允许变化
数据传送的时候,先传传送的高位 , 每个字节传送均是高位在前面MSB
3、使用的平台:
使用的平台/硬件:正点原子的STM32F767的开发板(大同小异),温湿度传感器SHT201D(购买自某宝)
接线:温湿度传感器SHT201D 的四根线 电源3.3V的正负两根 ,另外两根就是IIC的SCL和SDA。接到了开发板的PH4/PH5(和板载的24C02共用一路IIC)
逻辑分析仪购买自某宝
4、实物接线
某宝上买的温湿度模块
5、实验
接下来我们来看一下我自己写的一个代码:
此博客主要是为了分析IIC的波形,那我们就研究一下SHT201D模块的一个启动就可以了
通过查阅SHT201D 的手册,得知
5.1、读写地址
他的写地址是0x80,还有一些命令就不一一列写了
5.2、软件复位
首先我们先使用这款芯片的时候,需要对他进行一个初始化的软件复位,我们就用逻辑分析仪分析这段波形;下图捕捉的这段波形就是上图手册中的一个时序的表达。
上图中的波形对应的的代码是:
IIC_Start();
IIC_Send_Byte(I2C_ADR_W);
err = IIC_Wait_Ack();
接下来我们来细看一下逻辑分析仪的电平:
6、主程序读取温湿度
主函数中获取温度,其中那个公式是手册中给出的:
主函数中获取湿度:
通过串口输出的数据,也就打印了温湿度的一个数据,中间对着传感器哈了一次气,可以看到湿度的响应还是比较快和敏感的