SIM32任意引脚模拟IIC

关于模拟I2C,任意接口都可模拟(未全部测试,可能存在特殊情况)。

关于SDA_IN与SDAOUT:如下定义:

举例:
#define MPU_SDA_IN() {GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=8<<12;}
#define MPU_SDA_OUT() {GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=3<<12;}
原因:可选A\B\C\D\E任意接口引脚,低8位接口引脚(即0-7)选用CRL,高8位接口(即8-15)选用CRH;
选用3位时,查找该3位置于CRL/CRH寄存器哪一处,该n位占寄存器中4个位(共32个位,4x8=32),刚好
对应上面的0xFFFFFFFF这8位,当选第3位(0开始)时,即为0xFFFF0FFF的第4位(下图中,红字1234即为第0位);

SIM32任意引脚模拟IIC

 

                   图CRL寄存器


上面的左移前面的8和3为默认,后面的12查看CRL寄存器的MODE3开始于12位,即用12(见上图)。其他类似。
具体原理细看CRL/CRH寄存器。(未学习STM32寄存器,具体原理未知,仅为个人测试通过,并不包含具体原因及细节。)

上一篇:4位数码管显示模块TM1637芯片C语言驱动程序


下一篇:TMS320F280049C I2C IIC 相对于库函数操作CAT24C02 中文