STM32 I2C從機傳送資料 中斷方式

2021-06-25 18:14:25 字數 636 閱讀 2507

在除錯stm32 i2c中斷方式傳送資料時,發現上篇介紹的內容有很多不足之處,對i2c時序也有了新的認識。

上篇文章介紹在資料傳送完成後,傳送nack和stop,然後向從機dr暫存器寫了乙個沒用的資料,目的是為了清楚傳輸完成事件。其實文件中說的很明白,再倒數第二個數之後傳送nack和stop,當時沒有理解,現在看來確實是這樣。

利用中斷方法時,對傳送nack及stop要求比較嚴格,除錯時在多個位置都測試了下,發現只有在讀取暫存器最後乙個資料之前傳送nack和stop,但要在主機接收事件之後,邏輯**如下:

//這段**順序不能改變,否則無法終止匯流排

/*檢測主機接收資料完成事件*/

while(!i2c_checkevent(i2c1,i2c_event_master_byte_received));

i2c_acknowledgeconfig(i2c1,disable);

/*send i2c1 stop

condition

*/i2c_generatestop(i2c1,enable);                 

/* store received data on i2c1 */

i2c_buffer_rx[rxidx++] =i2c_receivedata(i2c1);

STM32 I2C匯流排通訊原理

i2c匯流排是由philips公司開發的一種簡單 雙向二線制同步序列匯流排。用於連線微控制器以及其外圍裝置,是微電子通訊控制領域廣泛採取的一種匯流排標準。他是同步通訊的一種特殊形式,具有介面線少,控制方式簡單,期間封裝形式少,通訊速率高等優點。i2c 匯流排在物理連線上非常簡單,只有兩條匯流排sda...

微控制器 stm32f030 硬體 I2C

參考文章 i2c hard.c 檔案 include i2c hard.h static int i2c timeout 0 void i2c1 port init void void i2c1 init void brief 從i2c1匯流排上的某一器件的某一起始位址中讀取一定位元組的資料到陣列中...

STM32 軟體模擬I2C

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