[资料分享] 高度提炼的模拟I2C程序.pdf

[复制链接]
1490|2
 楼主| nicholasldf 发表于 2016-12-29 10:31 | 显示全部楼层 |阅读模式
本帖最后由 nicholasldf 于 2017-1-4 08:56 编辑


设计了一个巧妙的I2C结构体,赋值了GPIO端口和PIN管脚,I2C地址等等,,,就可以模拟出无数个I2C了。




使用方法:定义一个模拟I2C结构体,初始化IO口,设置好GPIO端口和pin引脚号,,即可开始使用        
        //
定义好模拟I2C结构体
        structSimuI2cPortType  TouchI2cPort;

        //
管脚初始化,设置SCLSDA为普通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   ^_^
       开始使用了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
renxiaolin 发表于 2017-1-5 17:27 | 显示全部楼层
第一,不巧妙,第二,可移植性差,第三,代码也比较烂,鉴定完毕 !
 楼主| nicholasldf 发表于 2017-1-6 09:12 | 显示全部楼层
renxiaolin 发表于 2017-1-5 17:27
第一,不巧妙,第二,可移植性差,第三,代码也比较烂,鉴定完毕 !

呵呵,,期待你的分享一个最好的“模拟IIC”,,代码比linux还漂亮,注释文档比ucos还好,移植性几乎不用改任何一句代码,,甚至声控就行了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

261

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部