欢迎光临
我们一直在努力

IIC型是什么型号STM32 多路模拟I2C总线:同型号多设备并行访问

1.前言

CSDN关于多路模拟I2C总线并行访问的资料很少,而且讲的我都没看明白,所以花时间研究了这个问题,算是实现了这方面的实现方案。

2.设计方案

假设有这样一个场景:你有6个传感器,它们的IIC地址相同,使用单片机实现6个传感器数据读取,要求IIC传输速率尽可能的快。

首先,硬件IIC数量无法满足,很少有单片机有六路硬件IIC总线。那一路挂载多个传感器呢?也不行,因为6个传感器的IIC地址相同。所以需要使用模拟IIC。这时,你会想到直接开6路模拟IIC,然后依次读取,这样实现起来很简单,但是传输速率会很慢。所以,为了最大程度提高传输速率,多个IIC总线并行传输是一个很好的方法,注意,这里的并行是指同一GPIO口的情况,比如A口从P0到P12,开6路I2C,实现6个SCL和SDA同时拉高拉低,这是真正意义上的并行,因为每个GPIO端口都有一组寄存器,通过直接操作这些寄存器,可以同时控制整个端口的所有IO口。

当然,在实际情况中,建议PA口开三路IIC,PB口开三路IIC。至于为什么不能在一个GPIO口同时开六路IIC,我也不清楚真正的原理,我所能理解并且解释的是单个GPIO口的负载能力无法实现,希望有知道不同原因的朋友能够分享。

3.代码实现

3.1  IIC.h

这是PA口实现三路并行模拟IIC总线,我先给出代码,再详细解释。这是IIC.h代码。

#ifndef  __IIC_H__
#define __IIC_H__

#include "main.h"
#include "Delay.h"

#define SDA_GPIO_Port    GPIOA
#define SCL_GPIO_Port    GPIOA

//IIC总线1  SDA:PA11   SCL:PA12
#define SDA_Pin_1        GPIO_PIN_1
#define SCL_Pin_2        GPIO_PIN_2
//IIC总线2  SDA:PA3    SCL:PA4
#define S
赞(0)
未经允许不得转载:上海聚慕医疗器械有限公司 » IIC型是什么型号STM32 多路模拟I2C总线:同型号多设备并行访问

登录

找回密码

注册