無論在51或者stm32的學習中,我們都會使用到IIC總線的數據傳送,從當初51到現在的stm32的學習。iic一直都是只會簡單的使用并未很仔細的去研究中間每一個過程或者時序。今天用了一天的時間去理解IIC。當然這都是建立在以往的學習經驗之中而得。一下都是我自己的一些理解和對照程序而寫的一些IIC的使用過程。PS:純屬本人手打,不喜勿碰!。!iic總線時序理解:
24C04
引腳:
NC (1) VCC(8)
A1 (2) WP (7)
A2 (3) SCL(6)
GBD(4) SDA(5)
注:SCL
設置start信號和stop信號,由于此時是STM32對24c02發送信號,所以SCL和SDA設置為輸出狀態,即:SDA_OUT();
由時序圖可知:
START:SCL=1,SDA=1,delay(),SDA=0,delay(),SCL=0,//時鐘線為高,數據線從高到低的跳變
STOP :SCL=0,SDA=0,delay(),SCL=1,delay(),SDA=1,//時鐘線為高,數據線從低到高的跳變
STM32程序:
void IIC_Start(void)
{
SDA_OUT(); //sda線輸出
IIC_SDA=1;
IIC_SCL=1;
delay_us(4);
IIC_SDA=0;//START:when CLK is high,DATA change form high to low
delay_us(4);
IIC_SCL=0;//鉗住I2C總線,準備發送或接收數據
}
void IIC_Stop(void)
{
SDA_OUT();//sda線輸出
IIC_SCL=0;
IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
delay_us(4);
IIC_SCL=1;
IIC_SDA=1;//發送I2C總線結束信號
delay_us(4);
}
|