文章目录
-
- 一、I2C总线通信协议
-
- 1.I2C协议
- 2.I2C物理层
- 2.I2C协议层
- 3.软件I2C和硬件I2C
- 二、基于STM32和AHT20温湿度传感器的数据采集
-
- 1.任务
- 2.主要代码
- 3.管脚连接
- 4.操作效果
- 三、总结
- 四、参考资料
一、I2C总线通信协议
1.I2C协议
I2C(Inter-Integrated Circuit),集成电路总线,它是一种串行通信总线,使用多主从架构,是由飞利浦公司在1980年代初设计的,方便了主板、嵌入式系统或手机与周边设备组件之间的通讯。由于其简单性,它被广泛用于微控制器与传感器阵列,显示器,IoT设备,EEPROM等之间的通信。
2.I2C物理层
I2C总线分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信 进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。
常见的 I2C 通讯系统
开始条件、停止条件:当 SCL 线是高电平时 SDA 线从高电平向低电平切换,这个情况表示通讯的起始。当 SCL 是高电平时 SDA线由低电平向高电平切换,表示通讯的停止。开始和停止条件一般由主机产生。
起始和停止信
I2C总线的上拉电阻的阻值要精心考虑,如果上拉电阻的阻值太大,则由于I2C设备输入端的输入电容的存在,会造成信 上升沿和下降沿变缓,以至于不能满足I2C设备的建立时间和保持时间,造成通信的错误发生;如果上拉电阻的阻值过小,则会造成较大的功率损耗。因此I2C通信的上拉电阻的阻值要满足设备上升沿和下降沿要求的同时尽量选择较大的阻值,以降低消耗的功耗问题。
3.软件I2C和硬件I2C
软件I2C:按照信 的时序要求,用软件直接控制 STM32的两个 GPIO 引脚(分别用作 SCL及 SDA管脚)状态以模拟I2C通信。由于直接控制 GPIO 引脚电平产生通讯时序时,需要由 CPU 控制每个时刻的引脚状态,称为软件I2C。
硬件IIC:STM32 的 I2C 片上外设专门负责实现 I2C 通讯协议,直接调用内部寄存器进行配置,它就会自动根据协议要求产生通讯信 ,收发数据并缓存起来, CPU只要检测该外设的状态和访问数据寄存器,就能完成数据收发。
硬件I2C减轻了 CPU 的工作,其效率要远高于软件的,而软件I2C由于不受管脚限制,接口比较灵活。
二、基于STM32和AHT20温湿度传感器的数据采集
1.任务
每隔2秒钟采集一次温湿度数据,并将采集的温度、湿度值通并通过串口发送到上位机(win10)。
2.主要代码
直接读取AHT20的温度和湿度数据
主函数
可以参考AHT20的官方手册和本工程完整代码作更深一步的学习,链接放在参考资料里。
3.管脚连接
AHT20
AHT20 | STM32 |
---|---|
SCL | PB6 |
SDA | PB7 |
VCC | 3V3 |
GND | GND |
串口
STM32 | USB转TTL |
---|---|
PA9 | TXD |
PA10 | RXD |
3V3 | 3V3 |
GND | GND |
4.操作效果
可以看到每隔2秒钟采集一次温湿度数据,通过串口输出,用手摸一下AHT20芯片后温度、湿度值有明显变化。

三、总结
在了解了I2C协议基础上完成本次实验后,突然觉得身边的家电也不是什么难以理解的东西了,I2C作为串行通信总线解决了主板、嵌入式系统或手机与周边设备组件的通信问题。I2C总线是一种简单双向二进制同步串行总线,其只需要两根双向I/O线即可以实现连接在总线上的器件之间的信息传递。
四、参考资料
stm32通过I2C接口实现温湿度(AHT20)的采集
完整代码链接
提取码:03zq
奥松AHT20传感器厂商资料
提取码:95dx
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!