I2C初始化結構體詳解


typedef struct
{
  uint32_t I2C_ClockSpeed;             /*設置SCL時鍾頻,此值不低於40000*/
  uint16_t I2C_Mode;                   /* 指定工作模式,可選I2C模式和SMBUS模式*/
  uint16_t I2C_DutyCycle;              /*指定時鍾占空比,可選 low/high=2:1以及16:9模式*/
  uint16_t I2C_OwnAddress1;            /*指定自身的I2C設備地址 */
  uint16_t I2C_Ack;                    /*使能或者關閉響應 (一般都是使能) */
  uint16_t I2C_AcknowledgedAddress;    /*指定地址的長度,可以位7位及10位 */
}I2C_InitTypeDef;

 

 

• I2C_ClockSpeed 設置I2C的傳輸速率,在調用初始化函數時,函數會根據我們輸入的數值經過運算后把時鍾因子寫入到I2C的時鍾控制寄存器CCR。而我們寫入的這個參數值不得高於400KHz。實際上由於CCR寄存器不能寫入小數類型的時鍾因子,影響到 SCL的實際頻率可能會低於本成員設置的參數值,這時除了通訊稍慢一點以外,不會對I2C的標准通訊造成其它影響。

• I2C_Mode 選擇I2C的使用方式,有I2C模式(I2C_Mode_I2C )和SMBus主、從模式(I2C_Mode_SMBusHost、 I2C_Mode_SMBusDevice ) 。 I2C不需要在此處區分主從模式,直接設置I2C_Mode_I2C即可。

• I2C_DutyCycle 設置I 2C的SCL線時鍾的占空比。該配置有兩個選擇,分別為低電平時間比高電平時間為2:1 ( I2C_DutyCycle_2)和16:9 (I2C_DutyCycle_16_9)。其實這兩個模式的比例差別並不大,一般要求都不會如此嚴格,這里隨便選就可以了。

• I2C_OwnAddress1 配置STM32的I2C設備自己的地址,每個連接到I2C總線上的設備都要有一個自己的地址,作為主機也不例外。地址可設置為7位或10位(受下面 I2C_AcknowledgeAddress成員決定),只要該地址是I2C總線上唯一的即可。 STM32的I2C外設可同時使用兩個地址,即同時對兩個地址作出響應,這個結構成員I2C_OwnAddress1配置的是默認的、OAR1寄存器存儲的地址,若需要設置第二個地址寄存器OAR2,可使用 I2C_OwnAddress2Config函數來配置,OAR2不支持10位地址。

• I2C_Ack_Enable 配置I 2C應答是否使能,設置為使能則可以發送響應信號。一般配置為允許應答(I2C_Ack_Enable),這是絕大多數遵循I 2C標准的設備的通訊要求,改為禁止應答(I2C_Ack_Disable)往往會導致通訊錯誤。

• I2C_AcknowledgeAddress 選擇I2C的尋址模式是7位還是10位地址。這需要根據實際連接到I2C總線上設備的地址進行選擇,這個成員的配置也影響到 I2C_OwnAddress1成員,只有這里設置成10位模式時, I2C_OwnAddress1才支持10位地址。

配置完這些結構體成員值,調用庫函數I2C_Init即可把結構體的配置寫入到寄存器中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM