STM32F103基于I2C的(AHT20)温湿度回传上位机

每隔2秒钟采集一次温湿度数据,并通过串口发送到上位机(win10)

一、IIC

1.1 简介

IIC(Inter-Integrated Circuit) 其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。I²C的正确读法为“I平方C”(“I-squared-C”),而“I二C”(“I-two-C”)则是另一种错误但被广泛使用的读法。

1.2 IIC主要特点

具有多机功能,该模块既可以做主设备也可以做为从设备;
IIC主设备功能,主要产生时钟,产生起始信号和停止信号;
IIC从设备功能,可编程的IIC地址检测,停止位检测;
支持不同速率的通讯速度,标准速度(最高速度100kHZ),快速(最高400kHZ)。

1.3 IIC通信过程

主模式时,IIC的接口启动数据传输并且产生时钟信号。串行数据传输总是以其实条件开始并以停止条件借宿。起始条件和停止条件都是在主模式下由软件产生控制的。

从模式时,IIC接口能识别它自己的地址(7位或者10位)和在数据总线广播的地址(好比每个人都有不同的身份ID,叫到哪个哪个就发生应答),同时软件能够控制开启或者禁止广播呼叫地址的识别。

数据和地址按照8位每个字节来传输,高位在前。跟在起始条件后的1或者2个字节是地址(7位模式为1个自己,10位模式为2个字节)。地址只能主模式发送。在一个字节传输的8个时钟后的第九个时钟期间,从模式接收后必须回一个ACK给发送器,这样才进行数据传输。

在这里插入图片描述

提醒:在IIC空闲时候,SDA ,SCL 都是保持高电平。

起始信号:在时钟SCL保持高电平,然后SDA数据线是从高电平变为低电平表示起始信号;

扫描二维码关注公众号,回复: 13395689 查看本文章

停止信号:在时钟SCL保持高电平,然后SDA数据线是从低电平变为高电平表示停止信号;

在这里插入图片描述

应答信号:主机发送完一个8为数据后,会等待从机的回答一个ACK信号就是SDA将会拉低。

每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。
在这里插入图片描述

在 IIC总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化,否者找成数据发送失败。

1.3 软件IIC和硬件IIC

硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的;软件I2C一般是用GPIO管脚,用软件控制管脚状态以模拟I2C通信波形。

硬件I2C的效率要高于软件模拟的,模拟I2C 是通过GPIO,软件模拟寄存器的工作方式,而硬件I2C是直接调用内部寄存器进行配置;

软件模拟IIC就意味着你要用软件模拟i2c的时序,并且要随时监控IIC总线上的各种状态并作出相应的回应,如果总线上的数据交换比较频繁,那cpu基本就不能做其他事情了,否则就会丢数据。
硬件i2c则是由i2c控制器实现各种时序和应答,软件只需要根据控制器返回的状态处理数据就可以了。

二、实验

2.1 实验代码

2.2 连接烧录

  • 温湿度传感器接法 由于本程序采用的软件I2C实现的,采用GPIO引脚是PB6,PB7。具体定义代码如下

#define SDA_IN() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;}
#define IIC_SCL PBout(6) //SCL
#define IIC_SDA PBout(7) //SDA
#define READ_SDA PBin(7)

所以,SCL连接PB6,SDA连接PB7。 如果采用硬件I2C进行实现,可以查看关于STM32的原理图,可以看到硬件I2C接口,野火stm32mini开发板的I2C接口是PA2,PA3,要实现硬件I2C读取数据,就根据上面使用的方式进行配置,就可以完成通讯

  • 将串口等连接好后,用 FlyMcu 烧录。

2.3 回传结果

请添加图片描述

小小的总结

实验步骤不难,但理解代码有一定的难度。

主要是对于I2C协议进行通信的一个过程理解,如果不太理解这个协议,对于代码内容就会看不懂。同时,对于AHT20芯片读取数据的过程也要有一个比较清晰的认识,才能看懂代码中是如何进行读取的。

参考文献

  1. IIC-百度百科
  2. IIC总线解析-博客园
  3. 软件I2C和硬件I2C的实现原理及差异
  4. STM32103C8通过IIC采集温度(AHT20)
  5. stm32通过I2C接口实现温湿度(AHT20)的采集

猜你喜欢

转载自blog.csdn.net/YouthBlood9/article/details/121552155