您现在的位置: 主页 > MCU > 单片机技术应用 > STM32模拟IIC读写AT24CXX -
本文所属标签:
为本文创立个标签吧:

STM32模拟IIC读写AT24CXX -

来源: 网络用户发布,如有版权联系网管删除 2018-09-06 

[导读]以前只用51做过AT24C02,后来才接触到容量更大的型号,发现了很多和以前的不一致的东西,现总结如下。在上一篇博客中已经写好了STM32用IO口模拟IIC的基本驱动代码,下面结合数据手册用上一篇博客提到的函数编写AT24C

以前只用51做过AT24C02,后来才接触到容量更大的型号,发现了很多和以前的不一致的东西,现总结如下。

本文引用地址: http://www.21ic.com/app/mcu/201808/779153.htm

在上一篇博客中已经写好了STM32用IO口模拟IIC的基本驱动代码,下面结合数据手册用上一篇博客提到的函数编写AT24CXX全系列通用的驱动代码。

我们先来看AT24CXX的中文手册。

这是写操作的步骤。

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

不同的容量的AT24CXX的从器件地址位是不同的。这在后面的基本的读写函数的关于器件的不同就有所体现。

下面先初始化AT24CXX:

void AT24CXX_Init()

{

IIC_Init();

}

这里只需要初始化IIC总线即可。

下面写出AT24CXX基本的读写函数

/*在AT24CXX的指定地址读出一个数据*/

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);//发送高地址
IIC_Wait_Ack();
}else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1)); //此处需重点理解

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

需要重点理解处通过对于EE_TYPE宏定义的判断,也就是对于型号的选择,来实现了对于不同型号的驱动。

同理,往指定地址写入一个数据的函数如下:

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的延时
}

至此,就完成了基本驱动代码的编写。




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > STM32模拟IIC读写AT24CXX -
 

"STM32模拟IIC读写AT24CXX -"的相关文章

网站地图

围观()