1、 時(shí)鐘和數(shù)據(jù)的傳輸:開始和停止條件,數(shù)據(jù)在SCL的高電平期間有效,在SCL的低電平期間改變。
2、 開始條件:在SCL高電平期間,SDA產(chǎn)生一個(gè)下降沿
3、 停止條件:在SCL高電平期間,SDA產(chǎn)生一個(gè)上升沿
4、 應(yīng)答:成功接收到數(shù)據(jù)(地址和數(shù)據(jù)),產(chǎn)生一個(gè)應(yīng)答位(在第9個(gè)時(shí)鐘周期,將SDA拉低)
下面是源程序:原理上說,下面程序再移植時(shí),只要將數(shù)據(jù)類型變化,可以應(yīng)用到任何處理器
AT24c02.h
#ifndef __24CXX_H
#define __24CXX_H
#include "i2c.h"
/***************************************************************
- 說明:以下參數(shù)是AT24Cxx的尋址空間,C0x ,X 表示XK 如C01表示1K
- 127表示2^7 1Kbit/8=128Byte 128字節(jié)
- 255表示2^8 2Kbit/8=256Byte 256字節(jié)
- 512表示2^9 4Kbit/8=512Byte 512字節(jié)
-
***************************************************************/
#define AT24C01 127
#define AT24C02 255
#define AT24C04 511
#define AT24C08 1023
#define AT24C16 2047
#define AT24C32 4095
#define AT24C64 8191
#define AT24C128 16383
#define AT24C256 32767
/**************************************************************
--板子使用的是24c02,所以定義EE_TYPE為AT24C02
**************************************************************/
#define EE_TYPE AT24C02
/**************************************************************
--EEPROM的操作函數(shù)
--24CXX驅(qū)動(dòng)函數(shù)
**************************************************************/
u8 AT24CXX_ReadOneByte(u16 ReadAddr); //指定地址讀取一個(gè)字節(jié)
void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite); //指定地址寫入一個(gè)字節(jié)
void AT24CXX_WriteLenByte(u16 WriteAddr,u32 DataToWrite,u8 Len);//指定地址開始寫入指定長度的數(shù)據(jù)
u32 AT24CXX_ReadLenByte(u16 ReadAddr,u8 Len); //指定地址開始讀取指定長度數(shù)據(jù)
void AT24CXX_Write(u16 WriteAddr,u8 *pBuffer,u16 NumToWrite); //從指定地址開始寫入指定長度的數(shù)據(jù)
void AT24CXX_Read(u16 ReadAddr,u8 *pBuffer,u16 NumToRead); //從指定地址開始讀出指定長度的數(shù)據(jù)
u8 AT24CXX_Check(void); //檢查器件
void AT24CXX_Init(void); //初始化IIC
#endif
-----------------------------------------------------------------------------------------------------------------------------------------
AT24c02.c
#include "at24cxx.h"
#include "delay.h"
/***************************************************************************
- 功能描述:STM32f103 EEPORM初始化函數(shù)
- 隸屬模塊:STM32 EEPROM操作
- 函數(shù)屬性:外部,使用戶使用
- 參數(shù)說明:無
- 返回說明:無
- 函數(shù)功能:實(shí)現(xiàn)I2C的初始化。
***************************************************************************/
void AT24CXX_Init(void)
{
IIC_Init();
}
/***************************************************************************
- 功能描述:STM32f103 任意讀取EEPORM一個(gè)字節(jié)的函數(shù)
- 隸屬模塊:STM32 EEPROM操作
- 函數(shù)屬性:外部,使用戶使用
- 參數(shù)說明:ReadAddr為所讀取EEPROM字節(jié)的地址
- 返回說明:無
- 函數(shù)功能:返回所要讀取的地址的數(shù)據(jù)
- 函數(shù)說明:要任意讀取EEPROM地址中的一個(gè)字節(jié)的步驟為:
(1)發(fā)送開始START信號(hào)
(2)發(fā)送器件器件地址,最后一位為0
(3)從機(jī)檢測(cè)到主機(jī)發(fā)送的地址與自己的地址相同時(shí)發(fā)送一個(gè)應(yīng)答信號(hào)ACK,而主機(jī)等待ACK
(4)發(fā)送待操作的字節(jié)地址
(5)等待一個(gè)ACK
(6)重新發(fā)送START起始信號(hào)
(7)發(fā)送7位器件地址,最后一位為1,表示讀EEPROM。
(8)等待ACK,讀取一個(gè)字節(jié)。
(9)I2C停止,返回讀取的數(shù)據(jù)。
這里注意AT24C0x系列的地址有兩字節(jié)和一字節(jié)之分,這里把兩種情況都包含了
***************************************************************************/
u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{
u8 temp=0;
IIC_Start();
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0); //發(fā)送寫命令
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr>>8);//發(fā)送高地址
IIC_Wait_Ack();
}
else
IIC_Send_Byte(0XA0+((ReadAddr/256)<<1)); //發(fā)送器件地址0XA0,寫數(shù)據(jù)
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr%256); //發(fā)送低地址
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0XA1); //進(jìn)入接收模式
IIC_Wait_Ack();
temp=IIC_Read_Byte(0);
IIC_Stop();//產(chǎn)生一個(gè)停止條件
return temp;
}
/***************************************************************************
- 功能描述:STM32f103 任意寫EEPORM一個(gè)字節(jié)的函數(shù)
- 隸屬模塊:STM32 EEPROM操作
- 函數(shù)屬性:外部,使用戶使用
- 參數(shù)說明:WriteAddr :寫入數(shù)據(jù)的目的地址 ,DataToWrite:要寫入的數(shù)據(jù)
- 返回說明:無
- 函數(shù)功能:返回所要讀取的地址的數(shù)據(jù)
- 函數(shù)說明:要任意讀取EEPROM地址中的一個(gè)字節(jié)的步驟為:
(1)發(fā)送開始START信號(hào)
(2)發(fā)送器件器件地址,最后一位為0
(3)從機(jī)檢測(cè)到主機(jī)發(fā)送的地址與自己的地址相同時(shí)發(fā)送一個(gè)應(yīng)答信號(hào)ACK
(4)發(fā)送待操作的字節(jié)地址
(5)等待一個(gè)ACK
(6)發(fā)送字節(jié)數(shù)據(jù)
(7)等待一個(gè)ACK
(8)I2C停止,返回讀取的數(shù)據(jù)。
***************************************************************************/
void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{
IIC_Start();
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0); //發(fā)送寫命令
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr>>8);//發(fā)送高地址
IIC_Wait_Ack();
}
else
{
IIC_Send_Byte(0XA0+((WriteAddr/256)<<1)); //發(fā)送器件地址0XA0,寫數(shù)據(jù)
}
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr%256); //發(fā)送低地址
IIC_Wait_Ack();
IIC_Send_Byte(DataToWrite); //發(fā)送字節(jié)
IIC_Wait_Ack();
IIC_Stop();//產(chǎn)生一個(gè)停止條件
delay_ms(10);
}
/***************************************************************************
- 功能描述:STM32f103 任意寫EEPORM指定地址開始寫入長度為Len的數(shù)據(jù)
- 隸屬模塊:STM32 EEPROM操作
- 函數(shù)屬性:外部,使用戶使用
- 參數(shù)說明:WriteAddr :寫入數(shù)據(jù)的目的地址 ,DataToWrite:數(shù)據(jù)數(shù)組首地址
Len:要寫入數(shù)據(jù)的長度2,4
- 返回說明:無
- 函數(shù)功能:無
- 函數(shù)說明:就是調(diào)用len次 AT24CXX_WriteOneByte函數(shù),該函數(shù)用于寫入16bit或者32bit的數(shù)據(jù).
***************************************************************************/
void AT24CXX_WriteLenByte(u16 WriteAddr,u32 DataToWrite,u8 Len)
{
u8 t;
for(t=0;t
AT24CXX_WriteOneByte(WriteAddr+t,(DataToWrite>>(8*t))&0xff);
}
}
/***************************************************************************
- 功能描述:STM32f103 任意寫EEPORM指定地址開始讀出長度為Len的數(shù)據(jù)
- 隸屬模塊:STM32 EEPROM操作
- 函數(shù)屬性:外部,使用戶使用
- 參數(shù)說明:ReadAddr :開始讀出的地址
Len:要寫入數(shù)據(jù)的長度2,4
- 返回說明:無
- 函數(shù)功能:無
- 函數(shù)說明:就是調(diào)用len次AT24CXX_ReadOneByte函數(shù),該函數(shù)用于讀出16bit或者32bit的數(shù)據(jù).
***************************************************************************/
u32 AT24CXX_ReadLenByte(u16 ReadAddr,u8 Len)
{
u8 t;
u32 temp=0;
for(t=0;t
temp<<=8;
temp+=AT24CXX_ReadOneByte(ReadAddr+Len-t-1);
}
return temp;
}
/***************************************************************************
- 功能描述:STM32f103檢查AT24CXX是否正常
- 隸屬模塊:STM32 EEPROM操作
- 函數(shù)屬性:外部,使用戶使用
- 參數(shù)說明:無
- 返回說明:返回1:檢測(cè)失敗 返回0:檢測(cè)成功
- 函數(shù)功能:無
- 函數(shù)說明:這里用了24XX的最后一個(gè)地址(255)來存儲(chǔ)標(biāo)志字. 返回0表示正常、返回1錯(cuò)誤
***************************************************************************/
u8 AT24CXX_Check(void)
{
u8 temp;
temp=AT24CXX_ReadOneByte(255);//避免每次開機(jī)都寫AT24CXX
if(temp==0X55)
return 0;
else//排除第一次初始化的情況
{
AT24CXX_WriteOneByte(255,0X55);
temp=AT24CXX_ReadOneByte(255);
if(temp==0X55)
return 0;
}
return 1;
}
/***************************************************************************
- 功能描述:STM32f103在AT24CXX里面的指定地址開始讀出指定個(gè)數(shù)的數(shù)據(jù)
- 隸屬模塊:STM32 EEPROM操作
- 函數(shù)屬性:外部,使用戶使用
- 參數(shù)說明:ReadAddr :開始讀出的地址 對(duì)24c02為0~255
pBuffer :數(shù)據(jù)數(shù)組首地址
NumToRead:要讀出數(shù)據(jù)的個(gè)數(shù)
- 返回說明:無
- 函數(shù)功能:無
***************************************************************************/
void AT24CXX_Read(u16 ReadAddr,u8 *pBuffer,u16 NumToRead)
{
while(NumToRead)
{
*pBuffer++=AT24CXX_ReadOneByte(ReadAddr++);
NumToRead--;
}
}
/***************************************************************************
- 功能描述:STM32f103在AT24CXX里面的指定地址開始寫入指定個(gè)數(shù)的數(shù)據(jù)
- 隸屬模塊:STM32 EEPROM操作
- 函數(shù)屬性:外部,使用戶使用
- 參數(shù)說明:ReadAddr :開始讀出的地址 對(duì)24c02為0~255
pBuffer :數(shù)據(jù)數(shù)組首地址,所讀到的數(shù)據(jù)存儲(chǔ)在了pBuffer中
NumToRead:要讀出數(shù)據(jù)的個(gè)數(shù)
- 返回說明:無
- 函數(shù)功能:無
***************************************************************************/
void AT24CXX_Write(u16 WriteAddr,u8 *pBuffer,u16 NumToWrite)
{
while(NumToWrite--)
{
AT24CXX_WriteOneByte(WriteAddr,*pBuffer);
WriteAddr++;
pBuffer++;
}
}
有了STM32 I2C的配置,以及AT24C02的驅(qū)動(dòng)函數(shù),我們就可以對(duì)AT24C02EEPROM 進(jìn)行讀寫操作了,如果是其他的I2C器件,則只需寫出其驅(qū)動(dòng)就OK了。
為什么用STM32模擬呢,因?yàn)镾TM32的硬件I2C確實(shí)比較復(fù)雜~~~~~~
上一篇:STM32一個(gè)Timer輸出4路不同頻率、可調(diào)占空比的PWM
下一篇:STM32 24C02函數(shù) I2C例程 非STM32庫方式
推薦閱讀
史海拾趣
AVG Semiconductors自創(chuàng)立之初,就始終堅(jiān)持以技術(shù)創(chuàng)新為核心競(jìng)爭(zhēng)力。公司不斷投入研發(fā)資源,推出了一系列具有劃時(shí)代意義的半導(dǎo)體產(chǎn)品。其中,AVG的某款高效能低功耗芯片在市場(chǎng)上引起了廣泛關(guān)注,其獨(dú)特的節(jié)能設(shè)計(jì)和卓越的性能使得AVG在激烈的市場(chǎng)競(jìng)爭(zhēng)中脫穎而出。這款芯片的成功不僅提升了AVG的品牌形象,也為公司帶來了可觀的收益,進(jìn)一步推動(dòng)了公司的研發(fā)創(chuàng)新步伐。
酷宅科技在智能家居市場(chǎng)的發(fā)展中,選擇了電子電工和照明類市場(chǎng)作為切入點(diǎn)。這個(gè)市場(chǎng)具有巨大的智能化需求,但生產(chǎn)廠家眾多,壟斷程度低,利潤率也相對(duì)較低。酷宅憑借其在物聯(lián)網(wǎng)技術(shù)方面的優(yōu)勢(shì),迅速滿足了這一市場(chǎng)的迫切需求,并獲得了巨大的出貨量。隨著市場(chǎng)的不斷擴(kuò)大,酷宅科技又進(jìn)一步進(jìn)入小家電市場(chǎng),瞄準(zhǔn)了加濕器、香薰機(jī)等長尾品類,繼續(xù)擴(kuò)大其市場(chǎng)份額。
在成為全球領(lǐng)先的電子企業(yè)之后,富士通并沒有停下腳步。公司開始積極拓展海外市場(chǎng),將先進(jìn)的技術(shù)和產(chǎn)品帶到世界各地。通過在全球各地設(shè)立分支機(jī)構(gòu)、與當(dāng)?shù)仄髽I(yè)建立合作關(guān)系等方式,富士通成功地將自己的業(yè)務(wù)版圖擴(kuò)展到了全球60多個(gè)國家和地區(qū)。這一過程中,富士通不僅為當(dāng)?shù)厥袌?chǎng)帶來了先進(jìn)的技術(shù)和產(chǎn)品,也促進(jìn)了全球電子產(chǎn)業(yè)的交流與合作。
隨著Avalon Photonics的不斷發(fā)展壯大,公司開始更加關(guān)注社會(huì)責(zé)任和可持續(xù)發(fā)展。公司積極參與公益活動(dòng),支持教育事業(yè)和科技創(chuàng)新。同時(shí),Avalon也致力于研發(fā)更加環(huán)保、節(jié)能的產(chǎn)品,為推動(dòng)電子行業(yè)的可持續(xù)發(fā)展貢獻(xiàn)力量。通過積極履行社會(huì)責(zé)任,Avalon Photonics不僅贏得了社會(huì)各界的認(rèn)可,也為公司的長遠(yuǎn)發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
以上五個(gè)故事均基于虛構(gòu)的Avalon Photonics公司背景創(chuàng)作,旨在展示一個(gè)電子行業(yè)公司在發(fā)展過程中可能遇到的挑戰(zhàn)和機(jī)遇,以及如何通過技術(shù)創(chuàng)新、國際合作、產(chǎn)品創(chuàng)新、研發(fā)投入和社會(huì)責(zé)任等途徑實(shí)現(xiàn)快速發(fā)展。這些故事均遵循了只描述事實(shí)、不做褒貶的原則。
在技術(shù)創(chuàng)新和品質(zhì)保證的基礎(chǔ)上,Easy Braid開始積極拓展市場(chǎng)。公司不僅在國內(nèi)市場(chǎng)取得了良好的業(yè)績,還逐步將目光投向了國際市場(chǎng)。通過與國外知名企業(yè)的合作,Easy Braid成功地將自己的產(chǎn)品打入國際市場(chǎng),實(shí)現(xiàn)了品牌的全球化布局。這一過程中,Easy Braid展現(xiàn)出了強(qiáng)大的市場(chǎng)競(jìng)爭(zhēng)力和適應(yīng)能力。
導(dǎo)體二極管及其應(yīng)用 1.本征半導(dǎo)體中的自由電子濃度______空穴濃度 大于 小于 等于 2.在摻雜半導(dǎo)體中,多子的濃度主要取決于______ 溫度 材料 摻雜工藝 摻雜濃度 3.在摻雜半導(dǎo)體中,少子的濃度受______的影響很大 溫度 ...… 查看全部問答∨ |
|
多線程技術(shù)在數(shù)據(jù)實(shí)時(shí)采集分析中的應(yīng)用 引言 數(shù)字接口設(shè)備是實(shí)現(xiàn)標(biāo)準(zhǔn)422串行總線到自定義串行總線轉(zhuǎn)換的專用通信設(shè)備。數(shù)字接口測(cè)試系統(tǒng)根據(jù)數(shù)字接口設(shè)備的工作原理,輸出422串行數(shù)據(jù)和自定義串行總線的控制信號(hào)(YCK,YZM)給數(shù)字接口設(shè)備,并對(duì)其輸出的串行數(shù)據(jù)(YDATA)進(jìn)行采集、 ...… 查看全部問答∨ |
|
不知道大家對(duì)華為成都研究所有什么了解呢,它主要是搞那些方向的,好像是有微波方向的,不知道是研究生,需要什么方向的專業(yè)與其對(duì)口,希望知情的給我答案,謝謝了!… 查看全部問答∨ |
winCE下進(jìn)行FTP傳輸文件編程的曠世難題!!!高手一進(jìn)便知 try { //新建連接對(duì)象 m_pFTPConnection=m_pIntSession->GetFtpConnection(m_ServerIp,m_UserName,m_UserPwd); } catch(CInternetException *pEx) { //獲取錯(cuò)誤信息 TCHAR szError[1024]; if(pEx->GetErrorMessage(szError,1 ...… 查看全部問答∨ |
不知道是什么原因, 我可以通過網(wǎng)線下載鏡像到目標(biāo)板并啟動(dòng)操作系統(tǒng),然而在EVC里無法通過KITL和CESH來下載調(diào)試應(yīng)用程序,連接不上目標(biāo)板。 有人建議我使用ActiveSync和USB調(diào)試,但也宣告失敗。 我想問一下,能否通過網(wǎng)線和ActiveSync來實(shí)現(xiàn)下載 ...… 查看全部問答∨ |
|
北京大揚(yáng)科技提供 wince 6.0和 mobile 6.0兩套操作系統(tǒng)的 PXA310開發(fā)板 硬件技術(shù)指標(biāo) Hardware Feature ◆CPU:Marvell PXA310,運(yùn)行頻率624MHz ◆內(nèi)存:128MB DDR+1GB NandFlash ◆LCD:WinCE:4.3” TFT(480X272);WinMobile:3.5” TFT(320X240),均帶電 阻式觸摸屏 ◆Audio Codec:Wolfson WM9713,AC’97 接 ...… 查看全部問答∨ |
對(duì)‘操作系統(tǒng)’技術(shù)癡迷的朋友請(qǐng)進(jìn) 我也是對(duì)計(jì)算機(jī)操作系統(tǒng)有濃厚的興趣,可是操作系統(tǒng)這個(gè)高難度科目不是想象的那么簡(jiǎn)單,盡管我們勇氣十足。我真希望能和志同道合的朋友一起交流,一起進(jìn)步,這樣我們?cè)谘芯坎僮飨到y(tǒng)的時(shí)候才不寂寞和枯燥。 盡管現(xiàn)在各種操作系統(tǒng)已經(jīng)很成熟了,但是 ...… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- STM32一文通(6) 外部中斷
- ESP32玩轉(zhuǎn)MicroPython(一) 燒入固件, 初識(shí)
- ESP32玩轉(zhuǎn)MicroPython(二) 連接WIFI網(wǎng)絡(luò) webperl文件傳輸
- ESP32玩轉(zhuǎn)MicroPython(三) 延時(shí)、計(jì)時(shí) 和GPIO操作
- 玩轉(zhuǎn) ESP32 + Arduino (一) 開發(fā)環(huán)境搭建
- 玩轉(zhuǎn) ESP32 + Arduino (四) 電容按鍵 霍爾傳感器 外部中斷 延時(shí) 脈沖檢測(cè)
- 玩轉(zhuǎn) ESP32 + Arduino (五) platformIO引入類庫 自開發(fā)庫 串口打印字符串
- 玩轉(zhuǎn) ESP32 + Arduino (六) 硬件定時(shí)器, IIC, SPI
- 玩轉(zhuǎn) ESP32 + Arduino (八) U8G2驅(qū)動(dòng)OLED
- 超快充技術(shù)平權(quán)時(shí)代,要來了
- 智元機(jī)器人與Physical Intelligence(Pi)達(dá)成戰(zhàn)略合作
- 不到10萬塊!特斯拉再次面臨生死狙擊?
- 高階智駕NOA功能解析:技術(shù)架構(gòu)與實(shí)現(xiàn)路徑
- 智能體爆發(fā)元年,誰在“無人區(qū)”繪制地形圖?
- 億緯鋰能大圓柱電池進(jìn)展:良率突破97%
- 500Wh/kg電池競(jìng)速:鋰金屬電池挑戰(zhàn)全固態(tài)共識(shí)?(下)
- 500Wh/kg電池競(jìng)速:鋰金屬電池挑戰(zhàn)全固態(tài)共識(shí)?(上)
- 密歇根大學(xué)突破:低溫充電速度提升500%
- 谷歌發(fā)布Android Auto 14.0更新,界面優(yōu)化并準(zhǔn)備車機(jī)版Gemini AI
- 是德科技白皮書下載:攻克當(dāng)前面臨的毫米波測(cè)試難關(guān)
- 圍讀 《嵌入式軟件的時(shí)間分析》——汽車行業(yè)領(lǐng)域的嵌入式軟件理論、分析及實(shí)踐
- 【看電源研討會(huì) 抽好禮】避免常見的AC-DC設(shè)計(jì)缺陷
- 有獎(jiǎng)?wù)魑模貉痪€汽車VCU/MCU開發(fā)工程師,分享開發(fā)經(jīng)驗(yàn)、難題、成長之路等
- 成都站報(bào)名 | Keysight 高速互聯(lián)技術(shù)研討會(huì)
- 有獎(jiǎng)直播 | “PCIM Asia 2024” ROHM 展位線上直播
- 報(bào)名直播贏【手環(huán)、攝像頭、雨傘、手機(jī)支架】羅德與施瓦茨USB 3.2一致性測(cè)試
- STM8學(xué)習(xí)筆記---讀取STM8S003單片機(jī)序列號(hào)
- 單片機(jī)意外死機(jī),意外復(fù)位,程序跑飛
- 中國聯(lián)通eSIM一號(hào)雙終端業(yè)務(wù)將在全國開通試驗(yàn)
- 6G芯片讓網(wǎng)速飛起來了
- 當(dāng)AI融入到工作中,失業(yè)和就業(yè)哪個(gè)更多?
- keil(MDK-ARM)的調(diào)試使用
- stm32中斷嵌套全攻略
- stm32與HC-SR04超聲波傳感器測(cè)距
- stm32的VCC/VDD/VSS/VEE/VBAT的區(qū)別
- 關(guān)于keil5使用注意事項(xiàng)(預(yù)定義、路徑包含)