找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3478|回復(fù): 0
收起左側(cè)

IIC協(xié)議及STM32中IIC初始化結(jié)構(gòu)體

[復(fù)制鏈接]
ID:327671 發(fā)表于 2019-11-24 10:38 | 顯示全部樓層 |閱讀模式
IIC協(xié)議
分為   物理層(硬件)和協(xié)議層(軟件)   同步串行通訊方式
物理層(硬件):兩根總線 SDA(數(shù)據(jù)線)   SCL(時(shí)鐘線)
               每一個(gè)連接到總線的設(shè)備都有一個(gè)獨(dú)立的地址(7——10位),主機(jī)利用這個(gè)地址進(jìn)行不同設(shè)備之間的通訊。
               上拉電阻一般接4.7K   實(shí)現(xiàn)高阻態(tài)  線與
               當(dāng)設(shè)備空閑時(shí),輸出高阻態(tài)。   高阻態(tài)表示邏輯1  地表示邏輯0
               電壓為:2-15v
               STM32使用時(shí)引腳配置為開漏輸出模式
               三種傳輸模式:標(biāo)準(zhǔn)模式  傳輸速率100kbps
                            快速模式  傳輸速率400kbps
                            高速模式  傳輸速率3.4mbps  但目前大多IIC設(shè)備不支持
                            只要滿足設(shè)備傳輸要求  可根據(jù)具體情況設(shè)置傳輸速率
                連接到總線的電容不能超過400pf限制。
協(xié)議層(軟件):起始和停止信號(hào)、數(shù)據(jù)有效性、響應(yīng)、仲裁、時(shí)鐘同步和地址廣播的等
               主機(jī)寫從機(jī)讀信號(hào)傳輸過程:
                   起始信號(hào)  從機(jī)地址  讀寫方向R/nW(主機(jī)1讀0寫) 從機(jī)產(chǎn)生應(yīng)答信號(hào)給主機(jī)   數(shù)據(jù)傳輸   從機(jī)產(chǎn)生應(yīng)答信號(hào)  數(shù)據(jù)傳輸  判斷是否應(yīng)答(應(yīng)答則繼續(xù)傳輸數(shù)據(jù)非應(yīng)答則停止傳輸) 主機(jī)發(fā)出停止信號(hào)
               主機(jī)讀從機(jī)寫信號(hào)傳輸過程:
                   起始信號(hào)  從機(jī)地址  讀寫方向R/nW(主機(jī)1讀0寫) 從機(jī)產(chǎn)生應(yīng)答信號(hào)給主機(jī)   數(shù)據(jù)傳輸   主機(jī)產(chǎn)生應(yīng)答信號(hào)  數(shù)據(jù)傳輸  判斷是否應(yīng)答(應(yīng)答則繼續(xù)傳輸數(shù)據(jù)非應(yīng)答則停止傳輸) 主機(jī)發(fā)出停止信號(hào)
               復(fù)用信號(hào)傳輸數(shù)據(jù),兩個(gè)起始信號(hào),第一個(gè)發(fā)送要讀寫寄存器的地址,第二個(gè)發(fā)送要讀寫的數(shù)據(jù)
               當(dāng)SCL為高電平時(shí)SDA線從高電平向低電平切換表示通訊起始
               當(dāng)SCL為高電平時(shí)SDA線從低電平向高電平切換表示通訊結(jié)束
               SCL的每個(gè)時(shí)鐘周期傳輸一位數(shù)據(jù),SCL高電平SDA數(shù)據(jù)有效,SCL低電平數(shù)據(jù)無效,此時(shí)SDA數(shù)據(jù)交換。
軟件模擬協(xié)議    硬件實(shí)現(xiàn)協(xié)議
1、初始化IIC相關(guān)的GPIO
2、配置IIC外設(shè)的工作模式
3、編寫IIC寫入EEPROM的BYTE write函數(shù)
4、編寫IIC讀取EEPROM的RANDOM read函數(shù)
5、使用page write 及set read函數(shù)并校驗(yàn)
//IIC初始化結(jié)構(gòu)體
typedef struct
{
  uint32_t I2C_ClockSpeed;          /*設(shè)置SCL時(shí)鐘頻率,此值要低于400000*/

  uint16_t I2C_Mode;                /*指定工作模式,可選IIC和SMBUS模式 */

  uint16_t I2C_DutyCycle;           /*指定時(shí)鐘占空比,可選low/hign = 2:1及16:9模式*/

  uint16_t I2C_OwnAddress1;         /*指定IIC設(shè)備地址*/

  uint16_t I2C_Ack;                 /*使能或關(guān)閉響應(yīng)(一般都要使能)*/

  uint16_t I2C_AcknowledgedAddress; /*指定地址長(zhǎng)度,可為7為及10為 */
}I2C_InitTypeDef;


//IO口作為輸出方式時(shí),IO口的IDR寄存器有數(shù)據(jù)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表