关注分享主机优惠活动
国内外VPS云服务器

STM32通过I2C界面(STM32F103内部温度采集)实现温度和湿度(AHT20)。

摘要:如图所示,一旦您了解了开始和停止条件,让我们看一下在此过程中如何执行数据传输。 通过界面

获得温度和湿度之间的差异的四种参考材料

STM32实现了I2C接口1。硬件I2C2的温度和湿度的获取(AHT20)。模拟I2C3。差异2。实施AHT20采集程序(i)了解AHT20芯片(串行数据线)和SCL(串行时钟线)和上拉电阻的相关信息。 通信的原理是在I2C总线协议中生成必要的信号,以通过控制SCL和SDA线的高和低级别来传输数据。 当公共汽车闲置时,这两条电线通常会被连接到上面的上拉电阻向上拉,以保持高水平。

(ii)I2C总线协议

I2C协议规定,总线上数据的传输必须基于起始信号作为起始条件和传输的停止条件。 启动和端信号始终由主设备生成。 当公共汽车闲置时,SCL和SDA都保持高水平。 高SCL和高低SDA将产生起始条件。 高SCL和低SDA从低至高跳跃将产生停止条件。 生成启动条件后,总线很忙,并且该数据传输的主和从设备被专门占用,其他I2C设备无法访问总线。同样,在生成停止状态后,此数据传输的主和从设备释放总线和总线再次同时进行闲置状态。 如图所示:了解起点和停止条件后,让我们看一下在此过程中如何执行数据传输。 数据传输是字节。 当SCL线生成每个时钟脉冲时,主会在SDA线上发送一些数据。当按数据位按高点到低的顺序发送字节时,从属将SDA线向下拉回并将其发送回主设备。只有这样,它才认为兼职工作正在真正发送。 当然,例如,并非每个字节传输都需要一个答案。如果从属不再能够接收从主发送发送的数据,则从从设备返回负面答案位。 数据传输过程在图中说明。 I2C总线上的每个设备都对应于一个唯一的地址。主机和从设备之间的数据传输基于地址。这意味着主设备在发送有效数据之前必须首先指定从设备的地址。地址规范过程与上述数据传输过程相同,只是大多数从设备都有7个位地址。然后,该协议指定最低位被添加到地址中,以指示下一个数据传输的方向。 如图所示:

(iii)硬件I2C和模拟I2C1。硬件I2C

所谓的硬件I2C支持芯片上的I2C外围设备,并具有相应的I2C驱动器电路。使用的I2C引脚也是专用的。 软件I2C通常使用GPIO引脚和软件来控制PIN状态以模拟I2C通信波形。

2。模拟I2C

模拟I2C是通过GPIO和软件模拟寄存器的一种方式,但是硬件(固件)I2C直接将其调用到内部寄存器中进行配置。 如果您想查看特定的硬件,则可以使用芯片手册。 因为固定I2C的末端开口是固定的,因此与该地区处于同一区域。

3。差异:硬件I2C的效率远高于软件的效率,并且软件I2C不受引脚的限制,并且具有相对灵活的接口。 您可以看到基础配置,例如IO端口配置。 如果配置了IO端口函数(IIC函数),则是固件IIC。否则是一个模拟。 您可以查看IIC中的写入功能,以查看是否有针对现成功能的调用,或者是否要为寄存器分配值。如果是这样,这绝对是固件IIC功能。如果数据以1位(1位)传输,则必须将其传输。使用循环是一个模拟。 从代码卷来看,模拟的代码卷绝对比固件量大。

(1)使用硬件IIC更为复杂,模拟IIC的过程更加清楚。

(2)硬件IIC的速度比模拟更快,可以与DMA

(3)在任何PIN中找到模拟IIC,但硬件仅是固定引脚。

软件I2C是一个程序,可以使用控制SCL和SDA线路的程序来模拟I2C协议的时间,并输出高和低级别。 通常,它比硬件I2C更稳定,但是编程更加乏味,但并不难。

硬件i2c程序员只需直接控制SCL和SDA的高级输出即可调用I2C控制功能。 但是,某些微控制器I2C硬件不是很稳定,并且有许多调试问题。

2。请实施AHT20采集程序(i)以获取特定信息,请了解AHT20芯片

的相关信息。请访问兼容产品简介文档的官方下载。信息链接为:http://www.aosong.com/class - 36.html

(ii)特定的代码添加过程

打开一个由Wildfire提供的示例代码的空项目,该项目仅包含固件库。 将相关代码添加到您的项目中。有关添加代码的特定内容,请参见以下链接:https://blog.csdn.net/hhhhhhhh277523/article/details/111397514

(iii)主代码的分析

1。aht20chip usage Process <Aht20 chip usage process

void effiod effiot read_aht20 deader_once(10)10 {10) reset_aht20(); //重置AHT20芯片delay_ms(10); init_aht20(); //初始化AHT20芯片delay_ms(10); startMeasure_aht20(); //开始测试测试AHT20芯片delay_ms(80); read_aht20(); //读取AHT20 delay_ms收集的数据(5);}

2.ht20芯片读取数据

void read_aht20(void){uint8_t i; for(i = 0; i

未经允许不得转载:主机频道 » STM32通过I2C界面(STM32F103内部温度采集)实现温度和湿度(AHT20)。

相关推荐

评论 抢沙发

评论前必须登录!