天天看點

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寄存器,具體原理未知,僅為個人測試通過,并不包含具體原因及細節。)