#define ADDR_24CXX 0xA0
void I2C_24CXX_Write(u16 nAddr, u8* pDat, u16 nLen)
{
u16 i = 0;
/* Enable I2C1 acknowledgement if it is already disabled by other function */
//I2C_AcknowledgeConfig(I2C1, ENABLE);
STM32_I2c1_Regs->cr1.bit.ACK=1; // ACK:應答使能 1:在接收到一個字節后返回一個應答(匹配的地址或數據)
/* Send I2C1 START condition */
//I2C_GenerateSTART(I2C1, ENABLE);
STM32_I2c1_Regs->cr1.all|= I2C_EN|I2C_START;
/* Test on I2C1 EV5 and clear it */
// 【SB=1 起始條件已發送 讀SR1,然后寫數據DR 清零 】 MSL="1主模式" BUSY="1" 在總線上正在進行數據通訊 )
// while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)){;} /* EV5 */
while(!(STM32_I2c1_Regs->sr1.bit.SB & I2C_SB)) ;
/* Send slave address for write */
//I2C_Send7bitAddress(I2C1, ADDR_24CXX, I2C_Direction_Transmitter);
STM32_I2c1_Regs->dr.bit.DR=ADDR_24CXX;
/* Test on I2C1 EV6 and clear it */
// 【ADDR=1 地址發送結束;讀SR1和SR2來清零 】。 TXE="1" 數據寄存器空 MSL="1" BUSY="1", TRA="1" 數據已發送
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)){;} /* EV6 */
while(!(STM32_I2c1_Regs->sr1.all & I2C_ADDR)) ;
STM32_I2c1_Regs->sr2.all;
/* Send the low part of memory address */
//I2C_SendData(I2C1, (u8)nAddr);
STM32_I2c1_Regs->dr.bit.DR=(u8)nAddr;
/* Test on I2C1 EV8 and clear it */
// 【TXE=1 數據寄存器空; 寫數據DR清除,START,STOP】 BTF="1:" 字節發送結束 TRA="數據已發送" BUSY="在總線上正在進行數據通訊" MSL="主模式"
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)){} /* EV8 */
while(!(STM32_I2c1_Regs->sr1.all & I2C_TXE));
for(i=0;i
/* Send I2C1 data */
//I2C_SendData(I2C1, pDat[i]);
STM32_I2c1_Regs->dr.bit.DR=pDat[i];
/* Test on I2C1 EV8 and clear it */
// 【TXE=1 數據寄存器空; 寫數據DR清除,START,STOP】 BTF="1:" 字節發送結束 TRA="數據已發送" BUSY="在總線上正在進行數據通訊" MSL="主模式"
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)){;} /* EV8 */
while(!(STM32_I2c1_Regs->sr1.all & I2C_TXE));
}
/* Send I2C1 STOP Condition */
//I2C_GenerateSTOP(I2C1, ENABLE);
STM32_I2c1_Regs->cr1.all|= I2C_EN|I2C_STOP;
while(STM32_I2c1_Regs->sr2.bit.MSL); // 0:從模式
}//end sub
//=============================================================================
//
//=============================================================================
void I2C_24CXX_Read(u16 nAddr, u8* pDat, u16 nLen)
{
u16 i = 0;
/* Enable I2C1 acknowledgement if it is already disabled by other function */
//I2C_AcknowledgeConfig(I2C1, ENABLE);
STM32_I2c1_Regs->cr1.bit.ACK=1; // ACK:應答使能 1:在接收到一個字節后返回一個應答(匹配的地址或數據)
/* Send I2C1 START condition */
//I2C_GenerateSTART(I2C1, ENABLE);
STM32_I2c1_Regs->cr1.all|= I2C_EN|I2C_START;
/* Test on I2C1 EV5 and clear it */
// 【SB=1 起始條件已發送 讀SR1,然后寫數據DR 清零 】 MSL="1主模式" BUSY="1" 在總線上正在進行數據通訊 )
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)){;} /* EV5 */
while(!(STM32_I2c1_Regs->sr1.bit.SB & I2C_SB)) ;
/* Send 24CXX slave address for write */
//I2C_Send7bitAddress(I2C1, ADDR_24CXX, I2C_Direction_Transmitter);
STM32_I2c1_Regs->dr.bit.DR=ADDR_24CXX;
/* Test on I2C1 EV6 and clear it */
// 【ADDR=1 地址發送結束;讀SR1和SR2來清零 】。 TXE="1" 數據寄存器空 MSL="1" BUSY="1", TRA="1" 數據已發送
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)){;} /* EV6 */
while(!(STM32_I2c1_Regs->sr1.all & I2C_ADDR)) ;
STM32_I2c1_Regs->sr2.all;
/* Send the low part of memory address */
//I2C_SendData(I2C1, (u8)nAddr);
STM32_I2c1_Regs->dr.bit.DR=(u8)nAddr;
/* Test on I2C1 EV8 and clear it */
// 【TXE=1 數據寄存器空; 寫數據DR清除,START,STOP】 BTF="1:" 字節發送結束 TRA="數據已發送" BUSY="在總線上正在進行數據通訊" MSL="主模式"
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)){} /* EV8 */
while(!(STM32_I2c1_Regs->sr1.all & I2C_TXE));
//====================================================================
//I2C_GenerateSTART(I2C1, ENABLE);
STM32_I2c1_Regs->cr1.all|= I2C_EN|I2C_START;
/* Test on EV5 and clear it */
// 【SB=1 起始條件已發送 讀SR1,然后寫數據DR 清零 】 MSL="1主模式" BUSY="1" 在總線上正在進行數據通訊 )
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)){;} /* EV5 */
while(!(STM32_I2c1_Regs->sr1.bit.SB & I2C_SB)) ;
/* Send 24CXX slave address for read */
//I2C_Send7bitAddress(I2C1, ADDR_24CXX, I2C_Direction_Receiver);
STM32_I2c1_Regs->dr.bit.DR=(u8)ADDR_24CXX|((u8)0x01);
/* Test on EV6 and clear it */
// 【ADDR=1 地址發送結束;讀SR1和SR2來清零 】。 TXE="1" 數據寄存器空 MSL="1" BUSY="1", TRA="1" 數據已發送
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)){;} /* EV6 */
while(!(STM32_I2c1_Regs->sr1.all & I2C_ADDR)) ;
STM32_I2c1_Regs->sr2.all;
for(i=0;i
if((i+1)>=nLen)
{
/* Disable I2C1 acknowledgement */
//I2C_AcknowledgeConfig(I2C1, DISABLE);
STM32_I2c1_Regs->cr1.bit.ACK=0; // ACK:應答使能 關閉
/* Send I2C1 STOP Condition */
//I2C_GenerateSTOP(I2C1, ENABLE);
STM32_I2c1_Regs->cr1.all|= I2C_EN|I2C_STOP;
while(STM32_I2c1_Regs->sr2.bit.MSL); // 0:從模式
}
/* Test on EV7 and clear it */
// 【RXNE=1 數據寄存器非空; 讀寫DR清零 】 BUSY="1" 在總線上正在進行數據通訊 MSL="1" 主模式
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)){;} /* EV7 */
while(!(STM32_I2c1_Regs->sr1.all & I2C_RXNE)) ;
/* Store I2C1 received data */
//pDat[i] = I2C_ReceiveData(I2C1);
pDat[i] = STM32_I2c1_Regs->dr.bit.DR;
}
}//end sub
上一篇:STM32作為主機I2C,讀寫24C02 EEPROM
下一篇:STM32IO及定時器映射到地址
推薦閱讀
史海拾趣
Epitex一直將品質管理作為公司的核心競爭力之一。他們建立了嚴格的質量管理體系,從原材料采購到生產過程的每一個環節都進行嚴格的控制。同時,Epitex還不斷引進先進的生產設備和檢測技術,確保產品的穩定性和可靠性。
此外,Epitex還非常重視員工的培訓和素質提升。他們定期組織員工進行技能培訓和質量意識教育,提高員工的專業素養和工作質量。這種持續改進的精神使得Epitex的產品質量得到了客戶的高度認可。
面對日益激烈的市場競爭,ARBOR公司始終堅持創新驅動的發展策略。公司不斷加大研發投入,引進高素質的研發人才,加強與國內外科研機構的合作。通過不斷創新,ARBOR公司成功推出了一系列具有自主知識產權的新產品和技術。這些創新成果不僅提升了公司的核心競爭力,也為公司的未來發展注入了新的動力。
雖然這些故事是虛構的,但它們反映了電子行業公司可能面臨的挑戰和機遇。通過不斷的技術創新、市場拓展和合作共贏,ARBOR公司或類似的電子企業可以不斷壯大并引領行業的發展。
進入21世紀后,Fox Electronics意識到全球化對于企業發展的重要性。為了更好地服務全球客戶,公司開始在全球范圍內布局生產基地和銷售網絡。通過在亞洲、歐洲和北美等地設立分廠和辦事處,Fox Electronics不僅縮短了交貨周期,還降低了生產成本,提高了市場競爭力。同時,公司還加強了與全球供應鏈伙伴的合作,通過優化供應鏈管理,確保產品質量和交貨期的穩定性。
在20世紀90年代初,Fox Electronics憑借其創新的溫補晶體振蕩器(TCXO)技術,在競爭激烈的電子行業中脫穎而出。該技術通過自動調節晶體振蕩頻率以補償溫度變化,極大地提高了電子設備的穩定性和可靠性。這一創新不僅為Fox Electronics贏得了眾多高端客戶的青睞,還推動了整個行業對高精度時鐘源的需求增長。隨著通信和計算機技術的快速發展,Fox Electronics不斷迭代其TCXO技術,持續引領市場潮流。
在競爭激烈的電子行業,技術創新是企業生存發展的關鍵。BusBoard公司深知這一點,因此不斷加大研發投入,引進高端人才,推動技術創新。一次偶然的機會,公司研發團隊發現了一種新型材料,可以顯著提高電路板的性能和穩定性。經過反復試驗和優化,這一技術突破最終轉化為實際產品,并成功推向市場。這一創新不僅提升了BusBoard公司的競爭力,也為客戶帶來了更優質的產品體驗。
近年來,FRIWO與印度UNO MINDA集團建立了戰略合作關系,共同開發印度電動汽車市場。UNO MINDA集團投資1500萬歐元收購FRIWO AG的部分股權,這一交易標志著FRIWO在電動汽車領域的進一步拓展。雙方合作將結合FRIWO在電源和充電技術方面的優勢與UNO MINDA在印度市場的深厚基礎,為印度市場提供完整的電驅動系統解決方案。這一合作不僅增強了FRIWO在全球市場的影響力,也為印度電動汽車市場的發展注入了新的活力。
摘 要: PIC單片機匯編指令格式介紹、指令對寄存器的操作及其他具體操作說明, 關鍵詞: Microchip pic 匯編 單片機 指令 作者: 成都 史為 各大類單片機的指令系統是沒有通用性的,它是由單片機生產廠家規定的,所以用戶必須遵循廠家 ...… 查看全部問答∨ |
我用FPGA控制網卡芯片做一個數據收發的東西,但是怎樣讓FPGA開始發送數據呢?具體就是, FPGA接收到命令就開始發數據,接收到數據就存儲,可是怎樣判斷接到的是命令還是數據呢?… 查看全部問答∨ |
有點小問題,44b0,為什么一些教程里PCONA要復位成0x1ff?賣家給的芯片手冊上是0x3ff,其余端口也和手冊上不一樣。請問這個復位應該參考什么設置? 我開始沒在意,后來發現賣家的源碼也是0x1ff… 查看全部問答∨ |
|
最近在用一臺負載較大的機床調試加工時,加工工件表面出現了抖紋。開始懷疑是增益太小導致的,后來通過一些輔助手段將增益提高了近一倍后,抖紋仍然存在。再思考各參數的作用,感覺可能跟速度環的積分時間常數有關系。于是通過增加積分時間常數來削 ...… 查看全部問答∨ |
|
官方網站上下載的,前兩天一直找這個,總算下來了,和大家分享一下。 其它的文本資料因為網上有很多了,在此就不在一一提供了。我也是初學者,剛看了不到一周的時間,也沒發現哪個資料特有用,因為都看不懂…… uCOS版本:v2.92 IAR版本:v6.10. ...… 查看全部問答∨ |
|
本帖最后由 dontium 于 2015-1-23 11:42 編輯 博文鏈接:deyisupport./blog/b/analogwire/archive/2013/11/27/i2c.aspx 讀了簡易 I2C 隔離器設計小貼士之后,我發現其實很多模擬的很多東西并不是那么難懂,所以只要耐心學習還是能學 ...… 查看全部問答∨ |
pcb新手剛畫封裝時遇到個問題,就是as3933的16-pin tssop package,它是16pin的,可官網的資料卻是20pin,如下圖 這個事按16pin還是20pin來畫呢? … 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- STM32一文通(6) 外部中斷
- ESP32玩轉MicroPython(一) 燒入固件, 初識
- ESP32玩轉MicroPython(二) 連接WIFI網絡 webperl文件傳輸
- ESP32玩轉MicroPython(三) 延時、計時 和GPIO操作
- 玩轉 ESP32 + Arduino (一) 開發環境搭建
- 玩轉 ESP32 + Arduino (四) 電容按鍵 霍爾傳感器 外部中斷 延時 脈沖檢測
- 玩轉 ESP32 + Arduino (五) platformIO引入類庫 自開發庫 串口打印字符串
- 玩轉 ESP32 + Arduino (六) 硬件定時器, IIC, SPI
- 玩轉 ESP32 + Arduino (八) U8G2驅動OLED
- TI模電選課測試體驗活動第二期!模電怎么學?TI幫你訂制課程清單~
- 尋人:熟悉“儀器儀表校準流程”的工程師來報到啦!
- 直播已結束【Molex 新能源汽車低壓連接器解決方案】
- 【EEWORLD第二十三屆】2011年02月社區明星人物揭曉!
- EEWORLD社區5月明星人物出臺嘍!
- 瑞薩電子顛覆傳統理念的嵌入式開發平臺 Renesas Synergy™ 評估套件震撼來襲!答題即可免費申請!
- 評論贏好禮|TI SK-AM64評估套件測評
- 遇見春天,“愚”你同樂 快來與keysight一起學習 光通信測試測量解決方案 下載贏好禮!
- 全球首款Cortex-M23內核物聯網芯片SAML10和SAM L11系列 闖關獲取SAML10/SAML11法寶,拆除電子界安全危機,贏好禮!
- 答題贏好禮| ADI 智能樓宇煙霧探測方案