日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]以前只用51做過AT24C02,后來才接觸到容量更大的型號,發(fā)現(xiàn)了很多和以前的不一致的東西,現(xiàn)總結(jié)如下。在上一篇博客中已經(jīng)寫好了STM32用IO口模擬IIC的基本驅(qū)動代碼,下面結(jié)合數(shù)據(jù)手冊用上一篇博客提到的函數(shù)編寫AT24C

以前只用51做過AT24C02,后來才接觸到容量更大的型號,發(fā)現(xiàn)了很多和以前的不一致的東西,現(xiàn)總結(jié)如下。

在上一篇博客中已經(jīng)寫好了STM32用IO口模擬IIC的基本驅(qū)動代碼,下面結(jié)合數(shù)據(jù)手冊用上一篇博客提到的函數(shù)編寫AT24CXX全系列通用的驅(qū)動代碼。

我們先來看AT24CXX的中文手冊。

這是寫操作的步驟。

而上面提到的從器件的地址信息由下圖所示。

不同的容量的AT24CXX的從器件地址位是不同的。這在后面的基本的讀寫函數(shù)的關(guān)于器件的不同就有所體現(xiàn)。

下面先初始化AT24CXX:

void AT24CXX_Init()

{

IIC_Init();

}

這里只需要初始化IIC總線即可。

下面寫出AT24CXX基本的讀寫函數(shù)

/*在AT24CXX的指定地址讀出一個數(shù)據(jù)*/

u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{
u8 temp=0;
IIC_Start();
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0);
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr>>8);//發(fā)送高地址
IIC_Wait_Ack();
}else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1)); //此處需重點理解

IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr%256);//發(fā)送低地址
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0XA1);//進入接收模式
IIC_Wait_Ack();
temp=IIC_Read_Byte(0);
IIC_Stop();
return temp;

需要重點理解處通過對于EE_TYPE宏定義的判斷,也就是對于型號的選擇,來實現(xiàn)了對于不同型號的驅(qū)動。

同理,往指定地址寫入一個數(shù)據(jù)的函數(shù)如下:

void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{
IIC_Start();
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0);
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr>>8);
}else
{
IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));
}
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr%256);
IIC_Wait_Ack();
IIC_Send_Byte(DataToWrite);
IIC_Wait_Ack();
IIC_Stop();
delay_ms(10); //需注意,有10ms的延時
}

至此,就完成了基本驅(qū)動代碼的編寫。


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