




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、u32 ulTimeOut_Time; /* I2C_EE_WriteStr()* Description : 將一個(gè)數(shù)據(jù)塊寫入EEPROM 的指定的地址* Argument(s) : xChip - 從器件地址* xAddr - EEPROM存儲(chǔ)空間地址 * xpBuf - 數(shù)據(jù)緩沖區(qū)指針* xLen - 數(shù)據(jù)長(zhǎng)度* Return(s) : none.* Caller(s) : Application.* Note(s) : (1) *-* Modified by : * Modified date : * Description :*-*/ void I2C_EE_WriteStr(u8
2、xChip, u16 xAddr, u8 *xpBuf, u16 xLen) u8 *pbuf; u8 err; u8 retry; u16 addr; u16 len; / pbuf = xpBuf; addr = xAddr; len = xLen; I2C_EE_Drv_BusEn(); / 允許總線,寫允許 retry = 5; / 重試5次 while(len) err = I2C_EE_Drv_WriteByte(xChip, addr, *pbuf); if(err) if(-retry = 0 ) / 已經(jīng)試了5次,寫下一個(gè)數(shù)據(jù) retry = 5; pbuf+; addr+;
3、 len-; else / 順利,寫下一個(gè)數(shù)據(jù) pbuf+; addr+; len-; I2C_EE_Drv_BusDis(); / 失能總線,寫保護(hù)/* I2C_EE_ReadStr()* Description : 從EEPROM 的指定的地址讀出一個(gè)數(shù)據(jù)塊* Argument(s) : xChip - 從器件地址* xAddr - EEPROM存儲(chǔ)空間地址 * xpBuf - 數(shù)據(jù)緩沖區(qū)指針* xLen - 數(shù)據(jù)長(zhǎng)度* Return(s) : none.* Caller(s) : Application.* Note(s) : (1) *-* Modified by : * Modifi
4、ed date : * Description :*-*/ void I2C_EE_ReadStr(u8 xChip, u16 xAddr, u8 *xpBuf, u16 xLen) u8 *pbuf; u8 err; u8 retry; u16 addr; u16 len; / pbuf = xpBuf; addr = xAddr; len = xLen; I2C_EE_Drv_BusEn(); / 允許總線,寫允許 retry = 5; / 重試5次 while(len) *pbuf = I2C_EE_Drv_ReadByte(xChip, addr, &err); if(err)
5、 if(-retry = 0) / 已經(jīng)試了5次,讀下一個(gè)數(shù)據(jù) retry = 5; pbuf+; addr+; len-; else / 順利,讀下一個(gè)數(shù)據(jù) pbuf+; addr+; len-; I2C_EE_Drv_BusDis(); / 失能總線,寫保護(hù) /* I2C_EE_Drv_Init()* Description : I2C1初始化,默認(rèn)情況下,I2C接口工作在從模式下。* Argument(s) : xI2C_EE_Speed - 總顯的速度 100000 - 400000* Return(s) : none.* Caller(s) : Application.* Note(
6、s) : (1) *-* Modified by : * Modified date : * Description :*-*/ void I2C_EE_Drv_Init( u32 xI2C_EE_Speed ) I2C_InitTypeDef i2c_Init; GPIO_InitTypeDef gpio_Init; RCC_ClocksTypeDef rcc_clocks; / BSP_PeriphEn(I2C1_PORT_ID); BSP_PeriphEn(I2C1_WP_PORT_ID); BSP_PeriphEn(BSP_PERIPH_ID_I2C1); / 給 I2C1 加載時(shí)鐘
7、/- Configure I2C1 pins: SCL and SDA - gpio_Init.GPIO_Pin = I2C1_SCL_Bit | I2C1_SDA_Bit; gpio_Init.GPIO_Speed = GPIO_Speed_50MHz; gpio_Init.GPIO_Mode = GPIO_Mode_AF_OD; / 復(fù)用功能開漏輸出模式 GPIO_Init(I2C1_Port, &gpio_Init); gpio_Init.GPIO_Pin = I2C1_WP_Bit; gpio_Init.GPIO_Speed = GPIO_Speed_10MHz; gpio_I
8、nit.GPIO_Mode = GPIO_Mode_Out_OD; / 開漏輸出模式 GPIO_Init(I2C1_WP_Port, &gpio_Init); /- I2C1 configuration - i2c_Init.I2C_Mode = I2C_Mode_I2C; i2c_Init.I2C_DutyCycle = I2C_DutyCycle_2; i2c_Init.I2C_OwnAddress1 = I2C_EE_24C256_PARA; i2c_Init.I2C_Ack = I2C_Ack_Enable; i2c_Init.I2C_AcknowledgedAddress =
9、 I2C_AcknowledgedAddress_7bit; i2c_Init.I2C_ClockSpeed = xI2C_EE_Speed; I2C_Init(I2C1, &i2c_Init); BSP_IntDis(BSP_INT_ID_I2C1_EV); / 失能事件中斷 BSP_IntDis(BSP_INT_ID_I2C1_ER); / 失能錯(cuò)誤中斷 I2C_EE_Drv_BusDis(); /- / 超時(shí)時(shí)間計(jì)算(5ms 超時(shí)) /- RCC_GetClocksFreq(&rcc_clocks); ulTimeOut_Time = (rcc_clocks.SYSCLK
10、_Frequency /10 *5 /1000); / 等待程序的執(zhí)行時(shí)間:10 個(gè)指令周期/* I2C_EE_Drv_WriteByte()* Description : 將一個(gè)字節(jié)的數(shù)據(jù)寫入EEPROM 的指定的地址* 字節(jié)寫模式:* 起始信號(hào) * -> 從器件地址( 包括寫命令 ) * a-> EEPROM存儲(chǔ)空間地址高字節(jié) * a-> EEPROM存儲(chǔ)空間地址低字節(jié) * a-> 數(shù)據(jù) * a-> 停止信號(hào) * 共4次a (注:a - Ack 應(yīng)答信號(hào) )* * Argument(s) : xChip - 從器件地址* xAddr - EEPROM存儲(chǔ)空間地
11、址 * xDat - 數(shù)據(jù)* Return(s) : errcnt - 操作的結(jié)果 >0 : 操作出現(xiàn)錯(cuò)誤* Caller(s) : Application.* Note(s) : (1) *-* Modified by : * Modified date : * Description :*-*/ u8 I2C_EE_Drv_WriteByte(u8 xChip, u16 xAddr, u8 xDat) u32 tmr; u8 errcnt;/ _WriteEn(); / 寫使能/ I2C_Cmd(I2C1, ENABLE); / 使能總線 errcnt = 0; while(I2C_
12、GetFlagStatus(I2C1, I2C_FLAG_BUSY); I2C_GenerateSTART(I2C1, ENABLE); / 發(fā)送I2C的START信號(hào),接口自動(dòng)從從設(shè)備編程主設(shè)備 tmr = ulTimeOut_Time; while(tmr-)&&(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT); / 檢查I2C的EV5狀態(tài)并清除 if(tmr =0) errcnt+; I2C_Send7bitAddress(I2C1, xChip, I2C_Direction_Transmitter); / 發(fā)送從地
13、址(EEPROM設(shè)備地址) tmr = ulTimeOut_Time; while(tmr-)&&(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED);/ 檢查I2C的EV6狀態(tài)并清除 if(tmr =0) errcnt+; I2C_SendData(I2C1, (u8)(xAddr >>8)&0x00ff); / 發(fā)送 EEPROM 的存儲(chǔ)空間地址(高字節(jié)) tmr = ulTimeOut_Time; while(tmr-)&&(!I2C_CheckEvent(
14、I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED); / 檢查I2C的EV8狀態(tài)并清除 if(tmr =0) errcnt+; I2C_SendData(I2C1, (u8)(xAddr&0x00ff); / 發(fā)送 EEPROM 的存儲(chǔ)空間地址(低字節(jié)) tmr = ulTimeOut_Time; while(tmr-)&&(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED); / 檢查I2C的EV8狀態(tài)并清除 if(tmr =0) errcnt+; I2C_SendData(I
15、2C1, xDat); / 發(fā)送數(shù)據(jù) tmr = ulTimeOut_Time; while(tmr-)&&(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED); / 檢查I2C的EV8狀態(tài)并清除 if(tmr =0) errcnt+; I2C_GenerateSTOP(I2C1, ENABLE); / 發(fā)送I2C的STOP信號(hào),接口自動(dòng)從主設(shè)備編程從設(shè)備/ _WriteDis(); / 寫失能/ I2C_Cmd(I2C1, DISABLE); / 失能總線 return(errcnt); /* I2C_EE_Drv
16、_ReadByte()* Description : 從EEPROM 的指定的地址讀出一個(gè)字節(jié)的數(shù)據(jù)* 選擇/隨機(jī)讀操作:允許主器件對(duì)寄存器的任意字節(jié)進(jìn)行讀操作* 起始信號(hào) * -> 從器件地址( 包括寫命令 )* a-> EEPROM存儲(chǔ)空間地址高字節(jié) * a-> EEPROM存儲(chǔ)空間地址低字節(jié) * a-> 起始信號(hào) * -> 從器件地址( 包括讀命令 ) * a-> 得到數(shù)據(jù) * -> 停止信號(hào) * 共4次a (注:a - Ack 應(yīng)答信號(hào) )* Argument(s) : xChip - 從器件地址* xAddr - EEPROM存儲(chǔ)空間地址 *
17、 xpErr - 用于返回操作結(jié)果 >0 : 操作出現(xiàn)錯(cuò)誤* Return(s) : 讀到的數(shù)據(jù).* Caller(s) : Application.* Note(s) : (1) *-* Modified by : * Modified date : * Description :*-*/ u8 I2C_EE_Drv_ReadByte(u8 xChip, u16 xAddr, u8 *xpErr) u8 dat; u8 errcnt; u32 tmr; / _WriteEn(); / 寫使能/ I2C_Cmd(I2C1, ENABLE); / 使能總線 errcnt = 0; whil
18、e(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY); I2C_GenerateSTART(I2C1, ENABLE); / 發(fā)送I2C的START信號(hào),接口自動(dòng)從從設(shè)備編程主設(shè)備 tmr = ulTimeOut_Time; while(tmr-)&&(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT); / 檢查I2C的EV5狀態(tài)并清除 if(tmr =0) errcnt+; I2C_Send7bitAddress(I2C1, xChip, I2C_Direction_Transmitter);
19、/ 發(fā)送從地址(EEPROM設(shè)備地址)和寫命令 tmr = ulTimeOut_Time; while(tmr-)&&(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED);/ 檢查I2C的EV6狀態(tài)并清除 if(tmr =0) errcnt+; I2C_SendData(I2C1, (u8)(xAddr >>8)&0x00ff); / 發(fā)送 EEPROM 的存儲(chǔ)空間地址(高字節(jié)) tmr = ulTimeOut_Time; while(tmr-)&&(!I2C_C
20、heckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED); / 檢查I2C的EV8狀態(tài)并清除 if(tmr =0) errcnt+; I2C_SendData(I2C1, (u8)(xAddr&0x00ff); / 發(fā)送 EEPROM 的存儲(chǔ)空間地址(低字節(jié)) tmr = ulTimeOut_Time; while(tmr-)&&(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED); / 檢查I2C的EV8狀態(tài)并清除 if(tmr =0) errcnt+; I2C_
21、GenerateSTART(I2C1, ENABLE); / 發(fā)送I2C的START信號(hào),接口自動(dòng)從從設(shè)備編程主設(shè)備 tmr = ulTimeOut_Time; while(tmr-)&&(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT); / 檢查I2C的EV5狀態(tài)并清除 if(tmr =0) errcnt+; I2C_Send7bitAddress(I2C1, xChip, I2C_Direction_Receiver); / 發(fā)送從地址(EEPROM設(shè)備地址)和讀命令 tmr = ulTimeOut_Time; while(tmr-)&&(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED); / 檢查I2C的EV6狀態(tài)并清除 if(tmr =0) errcnt+; tmr = ulTimeOut_Time; while(tmr-)&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育機(jī)器人技術(shù)在特殊教育中的運(yùn)用
- 教育技術(shù)中的交互設(shè)計(jì)-以包容性為核心
- 公交優(yōu)先戰(zhàn)略下2025年城市交通擁堵治理成本效益分析報(bào)告
- 福建省泉州市2024-2025學(xué)年九上化學(xué)期末經(jīng)典模擬試題含解析
- 嵩山少林武術(shù)職業(yè)學(xué)院《企業(yè)文化建設(shè)》2023-2024學(xué)年第一學(xué)期期末試卷
- 承德護(hù)理職業(yè)學(xué)院《汽車造型設(shè)計(jì)2》2023-2024學(xué)年第一學(xué)期期末試卷
- 宿遷職業(yè)技術(shù)學(xué)院《網(wǎng)頁(yè)設(shè)計(jì)與制作實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 陜西科技大學(xué)鎬京學(xué)院《建筑火災(zāi)防治與風(fēng)險(xiǎn)評(píng)估》2023-2024學(xué)年第一學(xué)期期末試卷
- 云南彌勒市2024年化學(xué)九上期末綜合測(cè)試模擬試題含解析
- 藁城舒卿培訓(xùn)課件
- WST821-2023托育機(jī)構(gòu)質(zhì)量評(píng)估標(biāo)準(zhǔn)
- 2025至2030中國(guó)循環(huán)腫瘤細(xì)胞(CTC)行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢研究報(bào)告
- 2025至2030中國(guó)大型連鎖超市行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢研究報(bào)告
- T-GDMDMA 0044-2025 一次性使用血液灌流器的臨床使用指南
- 2025-2030年中國(guó)鱈魚腸行業(yè)市場(chǎng)發(fā)展分析及發(fā)展前景與投資策略研究報(bào)告
- 2025-2030年中國(guó)智慧應(yīng)急行業(yè)市場(chǎng)深度調(diào)研及市場(chǎng)前瞻與投資策略研究報(bào)告
- 2025年全國(guó)統(tǒng)一高考語(yǔ)文試卷(全國(guó)一卷)含答案
- 2025年調(diào)解員職業(yè)技能考試試卷及答案
- 噴粉技術(shù)質(zhì)量協(xié)議書
- 2025年自考有效溝通技巧試題及答案
- 商場(chǎng)物業(yè)外包合同協(xié)議
評(píng)論
0/150
提交評(píng)論