本帖最后由 nicholasldf 于 2017-1-4 08:56 编辑
设计了一个巧妙的I2C结构体,赋值了GPIO端口和PIN管脚,I2C地址等等,,,就可以模拟出无数个I2C了。
高度提炼的模拟I2C程序.pdf
(425.55 KB)
使用方法:定义一个模拟I2C结构体,初始化IO口,设置好GPIO端口和pin引脚号,,即可开始使用
//定义好模拟I2C结构体
structSimuI2cPortType TouchI2cPort;
//管脚初始化,设置SCL、SDA为普通IO口,输出方式
//SCL
/*Configure SCL PIN - PB0 */
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
//SDA
/*Configure SDA PIN - PF11 */
GPIO_InitStruct.Pin = GPIO_PIN_11;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_13, GPIO_PIN_SET);
//设置好模拟I2C结构体的端口号和引脚号:SimuI2C PORT, SCL-PB0, SDA-PF11
//SCL的端口号和引脚号
TouchI2cPort.SCLPort = GPIOB;
TouchI2cPort.SCLPin = GPIO_PIN_0;
//SDA的端口号和引脚号
TouchI2cPort.SDAPort = GPIOF;
TouchI2cPort.SDAPin = GPIO_PIN_11;
//设置该模拟I2C结构体对应从设备的地址
TouchI2cPort.address = xxxx; //slave address
//let‘s go ^_^
开始使用了
|