1. 程式人生 > >(一)基於STM32f103的I2C通訊介面的EPPROM模組(24C256)讀寫程式詳解

(一)基於STM32f103的I2C通訊介面的EPPROM模組(24C256)讀寫程式詳解

     我看了很多網上的解釋,都是先官方的說明I2C協議,再潦草的給出不完整的程式,導致你們又看不懂I2C原理又除錯不出程式,所以我這篇文章先專門針對程式,先使你們的程式除錯成功,再利用模擬或其他方式回去理解I2C的原理!我自己就是這麼來的,所以把這種方法推薦給你們!

  潦草的說明一下先,不懂不要緊!!!

 I2C 有四條連線線,SCL、SDA、VCC、GND。

  I2C的通訊協議:

           資料若要傳輸,傳輸前必須由SCL、SDA線產生一個特定的電平組合,告訴模組接下來要開始傳輸資料了,此特定組合稱為開始訊號

         同理,資料傳輸結束了,也必須由SCL、SDA線產生一個特定的電平組合,此特定組合稱為結束訊號

          那我們如何知道資料傳輸結束了呢?於是24C256接收到八位後就會返回一個特定的電平,此電平稱為應答信  號,如果我們是讀的話,自己也要產生一個應答訊號傳送出去,寫的應答訊號是24C256產生的注意區別這2個       應答訊號)!

下面我們開始程式的設計:

第一步;建立一個c檔案和一個h檔案,我建立的如下圖


第二步:選擇微控制器的一個I2C介面!我選擇了PB6、PB7,對應SCL和SDA!

所以c檔案的第一個函式就是初始化這2個介面,程式如下:


為了方便之後的程式的簡單,我們在c檔案裡巨集定義如下幾個功能的函式:

1、因為SDA埠是資料傳輸,所以要有輸出、輸入的配置,我們巨集定義如下:

這裡如果不懂可以看我的一篇《暫存器操作埠模式SDA_OUT()/SDA_IN()》)


2、SDA、SCL輸出電平的高低控制即PB6、PB7埠的輸出電平控制,巨集定義如下:


現在我們對於埠的初始化都完成了,接下來就是操作這幾個埠了!

第三步:c檔案接下來的函式就是產生開始訊號和停止訊號,程式如下:


第四步:這裡有3個函式,一個是接收模組完成資料接收傳輸之後的響應訊號,還有2個就是微控制器完成資料讀之後是否發出響應訊號!程式如下:



先到這裡,不明白的可以提出來,其中的延遲函式去掉本人除錯過基本沒問題,但加上也不會錯!!!

當然程式還沒完,怕一次寫太多!待續。。。