STM32之I2C 學習筆記

2021-08-22 11:47:56 字數 1611 閱讀 9875

(1)i2c是兩線式序列匯流排,由資料線sda和時鐘scl構成的序列匯流排,可傳送和接收資料。在cpu與被控ic之間、ic與ic之間進行雙向傳送,高速iic匯流排一般可達400kbps以上。

(2)iic是半雙工通訊方式,也就是說它既可以接收也可以傳送,但是由於它只有一根資料線,所以接收和傳送不能同時進行。

(1)空閒狀態:資料線sda和時鐘scl線都處於高電平。

(2)開始訊號:scl線持續處於高電平,資料線sda由高變為低。

(3)停止訊號:scl線持續處於高電平,資料線sda由低變為低。

(4)應答訊號:位傳送器每傳送乙個位元組,就在時鐘脈衝9期間釋放資料線,由接收器反饋乙個應答訊號。 應答訊號為低電平時,規定為有效應答(ack簡稱應答位)

(5)資料的有效性:資料sda在scl的上公升沿到來之前就需準備好。並在在下降沿到來之前必須穩定。否則,你可以想象,就會被認為是開始訊號或者停止訊號。

(6)資料的傳輸:在scl序列時鐘的配合下,在sda上逐位地序列傳送每一位資料。資料位的傳輸是邊沿觸發。

//產生iic起始訊號

void iic_start(void)

//產生iic停止訊號

void iic_stop(void)

//等待應答訊號到來

//返回值:1,接收應答失敗

// 0,接收應答成功

u8 iic_wait_ack(void)

} iic_scl=0;//時鐘輸出0

return 0;

}

//產生ack應答

void iic_ack(void)

//不產生ack應答		    

void iic_nack(void)

//iic傳送乙個位元組

//返回從機有無應答

//1,有應答

//0,無應答

void iic_send_byte(u8 txd)

}

//讀1個位元組,ack=1時,傳送ack,ack=0,傳送nack   

u8 iic_read_byte(unsigned char ack)

if (!ack)

iic_nack();//傳送nack

else

iic_ack(); //傳送ack

return receive;

}

四、eeprom(24c02)

STM32 軟體模擬I2C

i2c的兩個引腳 scl引腳和sda引腳 需要既能輸出又能輸入,為了避免複雜的配置操作需要把該引腳配置為開漏輸出模式,該模式的說明如下圖所示 當微控制器的sda引腳配置為低電平時,sda線被拉低 當微控制器的sda引腳配置為高電平時,引腳埠為高阻態,sda線通過上拉電阻被vcc拉高。因此一定要注意在...

STM32之I2C模組除錯總結

前一段時間對stm32的i2c模組進行了除錯,今天做乙個總結。關於i2c協議的知識,這裡就不再贅述,網上有很多介紹i2c協議的文章。目前實現i2c協議的方式有兩種,一是採用gpio口來模擬i2c協議,另外一種是使用stm32自帶的i2c模組。雖說使用gpio口模擬i2c協議較為複雜,需要詳細了解i2...

STM32的I2C特性及架構

軟體模擬協議 使用cpu直接控制通訊引腳 gpio 的電平,產生出符合通訊協議標準的邏輯。硬體實現協議 由stm32的i2c片上外設專門負責實現i2c通訊協議,只要配置好該外設,它就會自動根據協議要求產生通訊訊號,收發資料並快取起來,cpu只要檢測該外設的狀態和訪問資料暫存器,就能完成資料收發。這種...