www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]I2C總線是由NXP(原PHILIPS)公司設(shè)計(jì),有十分簡潔的物理層定義,其特性如下:只要求兩條總線線路:一條串行數(shù)據(jù)線SDA,一條串行時(shí)鐘線SCL;每個(gè)連接到總線的器件都可以通過唯一的地址和一直存在的簡單的主機(jī)/從機(jī)關(guān)系

I2C總線是由NXP(原PHILIPS)公司設(shè)計(jì),有十分簡潔的物理層定義,其特性如下:

只要求兩條總線線路:一條串行數(shù)據(jù)線SDA,一條串行時(shí)鐘線SCL;

每個(gè)連接到總線的器件都可以通過唯一的地址和一直存在的簡單的主機(jī)/從機(jī)關(guān)系軟件設(shè)定地址,主機(jī)可以作為主機(jī)發(fā)送器或主機(jī)接收器;

它是一個(gè)真正的多主機(jī)總線,如果兩個(gè)或更多主機(jī)同時(shí)初始化,數(shù)據(jù)傳輸可以通過沖突檢測和仲裁防止數(shù)據(jù)被破壞;

串行的8 位雙向數(shù)據(jù)傳輸位速率在標(biāo)準(zhǔn)模式下可達(dá)100kbit/s,快速模式下可達(dá)400kbit/s,高速模式下可達(dá)3.4Mbit/s;

連接到相同總線的IC 數(shù)量只受到總線的最大電容400pF 限制。

其典型的接口連線如下:

I2C的協(xié)議很簡單:

數(shù)據(jù)的有效性

  在傳輸數(shù)據(jù)的時(shí)候,SDA線必須在時(shí)鐘的高電平周期保持穩(wěn)定,SDA的高或低電平狀態(tài)只有在SCL 線的時(shí)鐘信號是低電平時(shí)才能改變 。

起始和停止條件

  SCL 線是高電平時(shí),SDA 線從高電平向低電平切換,這個(gè)情況表示起始條件;

  SCL 線是高電平時(shí),SDA 線由低電平向高電平切換,這個(gè)情況表示停止條件。

字節(jié)格式

  發(fā)送到SDA 線上的每個(gè)字節(jié)必須為8 位,每次傳輸可以發(fā)送的字節(jié)數(shù)量不受限制。每個(gè)字節(jié)后必須處理一個(gè)響應(yīng)位。

應(yīng)答響應(yīng)   

數(shù)據(jù)傳輸必須帶響應(yīng),相關(guān)的響應(yīng)時(shí)鐘脈沖由主機(jī)產(chǎn)生。在響應(yīng)的時(shí)鐘脈沖期間發(fā)送器釋放SDA 線(高)。   

在響應(yīng)的時(shí)鐘脈沖期間,接收器必須將SDA 線拉低,使它在這個(gè)時(shí)鐘脈沖的高電平期間保持穩(wěn)定的低電平。

也就是說主器件發(fā)送完一字節(jié)數(shù)據(jù)后要接收一個(gè)應(yīng)答位(低電平),從器件接收完一個(gè)字節(jié)后要發(fā)送一個(gè)低電平。

尋址方式(7位地址方式)

  第一個(gè)字節(jié)的頭7 位組成了從機(jī)地址,最低位(LSB)是第8 位,它決定了傳輸?shù)?普通的和帶重復(fù)開始條件的7位地址格式方向。第一個(gè)字節(jié)的最低位是

“0”,表示主機(jī)會寫信息到被選中的從機(jī);

“1”表示主機(jī)會向從機(jī)讀信息。

當(dāng)發(fā)送了一個(gè)地址后,系統(tǒng)中的每個(gè)器件都在起始條件后將頭7 位與它自己的地址比較,如果一樣,器件會判定它被主機(jī)尋址,至于是從機(jī)接收器還是從機(jī)發(fā)送器,都由R/W 位決定。

仲裁

I2C是所主機(jī)總線,每個(gè)設(shè)備都可以成為主機(jī),但任一時(shí)刻只能有一個(gè)主機(jī)。

stm32至少有一個(gè)I2C接口,提供多主機(jī)功能,可以實(shí)現(xiàn)所有I2C總線的時(shí)序、協(xié)議、仲裁和定時(shí)功能,支持標(biāo)準(zhǔn)和快速傳輸兩種模式,同時(shí)與SMBus 2.0兼容。


本實(shí)驗(yàn)直接操作寄存器實(shí)現(xiàn)對I2C總線結(jié)構(gòu)的EEPROM AT24c02的寫入和讀取。AT24c02相關(guān)操作詳見單片機(jī)讀取EEPROM(AT24C02)。

庫函數(shù)實(shí)現(xiàn)使用stm32的兩個(gè)I2C模擬I2C設(shè)備間的數(shù)據(jù)收發(fā),并通過串口查看數(shù)據(jù)交換情況。

直接操作寄存器

首先需要配置I2C接口的時(shí)鐘,相關(guān)寄存器如下:

I2C_CR2寄存器低五位:

FREQ[5:0]:I2C模塊時(shí)鐘頻率 ,必須設(shè)置正確的輸入時(shí)鐘頻率以產(chǎn)生正確的時(shí)序,允許的范圍在2~36MHz之間:

000000:禁用 000001:禁用 000010:2MHz ... 100100:36MHz 大于100100:禁用。

用于設(shè)置I2C設(shè)備的輸入時(shí)鐘,本例使用的是PLCK1總線上的時(shí)鐘所以為36Mhz;

時(shí)鐘控制寄存器(I2C_CCR)低12位:

CCR[11:0]:快速/標(biāo)準(zhǔn)模式下的時(shí)鐘控制分頻系數(shù)(主模式),該分頻系數(shù)用于設(shè)置主模式下的SCL時(shí)鐘。

在I2C標(biāo)準(zhǔn)模式或SMBus模式下:

Thigh = CCR ×TPCLK1

Tlow = CCR ×TPCLK1

時(shí)鐘周期為 T = Thigh + Tlow;

例如:在標(biāo)準(zhǔn)模式下,F(xiàn)REQR = 36 即36Mhz,產(chǎn)生200kHz的SCL的頻率

時(shí)鐘控制分頻系數(shù) = Freqr /2/f f 為想得到的頻率

配置好時(shí)鐘,還需要配置本機(jī)地址,I2C支持7位地址和10位地址,這里用的是7位地址:

自身地址寄存器1(I2C_OAR1)[7:1]:接口地址,地址的7~1位。

其他相關(guān)操作參見代碼,有詳細(xì)注釋:(system.h 和stm32f10x_it.h等相關(guān)代碼參照stm32 直接操作寄存器開發(fā)環(huán)境配置)

User/main.c

#include#include"system.h"#include"usart.h"#include"i2c.h"#defineLED1PAout(4)#defineLED2PAout(5)#defineLED3PAout(6)#defineLED4PAout(7)voidGpio_Init(void);intmain(void){Rcc_Init(9);//系統(tǒng)時(shí)鐘設(shè)置Usart1_Init(72,9600);Nvic_Init(1,0,I2C1_EV_IRQChannel,4);//設(shè)置搶占優(yōu)先級為1,響應(yīng)優(yōu)先級為0,中斷分組為4Nvic_Init(0,0,I2C1_ER_IRQChannel,4);//設(shè)置I2C錯誤中斷搶占優(yōu)先級為0Gpio_Init();I2c_Init(0x30);//設(shè)置I2C1地址為0x30I2c_Start();while(1);}voidGpio_Init(void){RCC->APB2ENR|=1<<2;//使能PORTA時(shí)鐘RCC->APB2ENR|=1<<3;//使能PORTB時(shí)鐘;GPIOA->CRL&=0x0000FFFF;//PA0~3設(shè)置為浮空輸入,PA4~7設(shè)置為推挽輸出GPIOA->CRL|=0x33334444;GPIOB->CRL&=0x00FFFFFF;//PB6I2C1_SCL,PB7I2C1_SDLGPIOB->CRL|=0xFF000000;//復(fù)用開漏輸出//USART1串口I/O設(shè)置GPIOA->CRH&=0xFFFFF00F;//設(shè)置USART1的Tx(PA.9)為第二功能推挽,50MHz;Rx(PA.10)為浮空輸入GPIOA->CRH|=0x000008B0;}

User/stm32f10x_it.c

#include"stm32f10x_it.h"#include"system.h"#include"stdio.h"#include"i2c.h"#defineLED1PAout(4)#defineLED2PAout(5)#defineLED3PAout(6)#defineLED4PAout(7)#defineADDRS_R0xA1//讀操作地址#defineADDRS_W0xA0//寫操作地址u8go=0;//操作步驟標(biāo)記voidI2C1_EV_IRQHandler(void)//I2C1EventInterrupt{u16clear=0;if(I2C1->SR1&1<<0)//已發(fā)送起始條件,寫數(shù)據(jù)寄存器的操作將清除該位{printf("rnI2C1Start..rn");switch(go){case0:{I2c_Write(ADDRS_W);//寫入從機(jī)地址,寫指令操作地址break;}case1:{I2c_Write(ADDRS_W);//寫入從機(jī)地址,寫指令操作地址break;}case2:{I2c_Write(ADDRS_R);//寫入從機(jī)地址,讀數(shù)據(jù)操作地址break;}}}if(I2C1->SR1&1<<1)//從機(jī)地址已發(fā)送{printf("rnI2C1hassendaddress..rn");clear=I2C1->SR2;//讀取SR2可以清除該位中斷switch(go){case0:{I2c_Write(0x01);//寫入待寫入的EEPROM單元地址break;}case1:{I2c_Write(0x01);//寫入待寫入的EEPROM單元地址break;}case2:{delay(100000);printf("rnRead0x%XfromAt24c02,Address0x01..rn",I2c_Read());I2c_Stop();break;}}}if(I2C1->SR1&1<<2)//字節(jié)發(fā)送結(jié)束發(fā)送地址字節(jié)時(shí),不觸發(fā)此中斷{//printf("rnI2C1sendbytesuccess..rn");switch(go){case0:{I2c_Write(0x86);//寫入數(shù)據(jù)printf("rnWrite0x%XtoAt24c02,Address0x01..rn",0x86);//I2c_Stop();delay(10000);go=1;I2c_Start();break;}case1:{delay(10000);go=2;I2c_Start();break;}case2:{break;}}}delay(100000);LED3=1;//I2C1->CR2&=~(1<<9);//事件中斷關(guān)閉}voidI2C1_ER_IRQHandler(void)//I2C1ErrorInterrupt{delay(100000);LED4=1;if(I2C1->SR1&1<<10)//應(yīng)答失敗{printf("rnACKERROR..rn");I2C1->SR1&=~(1<<10);//清除中斷}if(I2C1->SR1&1<<14)//超時(shí){printf("rnTimeout..rn");I2C1->SR1&=~(1<<14);//清除中斷}if(I2C1->SR1&1<<11)//過載/欠載{printf("rnOverrun/Underrun..rn");I2C1->SR1&=~(1<<11);//清除中斷}if(I2C1->SR1&1<<9)//仲裁丟失{printf("rnArbitrationlost..rn");I2C1->SR1&=~(1<<9);//清除中斷}if(I2C1->SR1&1<<8)//總線出錯{printf("rnBuserror..rn");I2C1->SR1&=~(1<<8);//清除中斷}}

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計(jì)工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉