基于STM32的AT24C08数据读写

有关AT24C02/04/08的区别:02有2k的空间,04有4k,08有8k,每2k作为一个page;

        器件地址的区别:

                                

 根据芯片手册:

                        

         可以看到:对于2k的器件,A2,A1,A0均作为地址位;对于4k的器件,A2和A1作为地址位,而A0位则作为寻页位,也就是A0为0时,选定第一页,A0为1时,选定第二页;而对于8k的器件,仅有A2位作为地址位,而A1和A0均作为寻页位,当A1A0为:00,01,10,11时,依次对应第1,2,3,4页。

而最低位为确定读还是写操作,为0时表示写操作,1表示读操作。

所以对于本次使用的AT24C08,进行写操作时,其器件地址可以为 0xA0 | XX(XX为00,01,10,11);进行读操作时,其器件地址可以为 0xA1 | XX(XX为00,01,10,11).

对应写操作的时序图:

                

/*
  *@breif	指定地址写入一个字节
  *@param	器件地址(写):0xA0|XX,XX可以为00,01,10,11,表示不同页(总共1024k)
			数据所在地址:0x00~0xFF
			要写入的一个字节:Data
  *@retval 	无
*/
void AT24C08_WriteByte(uint8_t DeviceAdd_W,uint8_t DataAdd,uint8_t Data)
{
	IIC_Start();
	IIC_Send_Byte(DeviceAdd_W);
	IIC_Wait_Ack();
	IIC_Send_Byte(DataAdd);
	IIC_Wait_Ack();
	IIC_Send_Byte(Data);
	IIC_Wait_Ack();
	IIC_Stop();
	Delay_ms(2);
}

 值得注意的是:进行EEPROM写操作是需要一定的写入时间,否则数据会产生混乱。

对应读操作的时序图:

                        

/*
  *@breif	指定地址读取一个字节
  *@param	器件地址(写和读):0xA0|XX,XX可以为00,01,10,11,表示不同页(总共1024k)
			数据所在地址:0x00~0xFF
  *@retval	读取到的数据:Data
*/

uint8_t AT24C08_ReadByte(uint8_t DeviceAdd_W,uint8_t DeviceAdd_R,uint8_t DataAdd)
{
	uint8_t Data;
	
	IIC_Start();
	IIC_Send_Byte(DeviceAdd_W);
	IIC_Wait_Ack();
	IIC_Send_Byte(DataAdd);
	IIC_Wait_Ack();
	
	IIC_Start();
	IIC_Send_Byte(DeviceAdd_R);
	IIC_Wait_Ack();
	
	Data = IIC_Read_Byte(0);//No Ack
	IIC_Stop();
	return Data;
}

         而进行EEPROM读操作连续读是没有问题的。

主函数进行验证:

#include "stm32f10x.h"                  // Device header
#include "I2C.h"
#include "AT24C08.h"
#include "OLED.h"
#include "Delay.h"

int main(void)
{
	uint8_t Num1 = 0,Num2 = 0,Num3 = 0,Num4 = 0;
	OLED_Init();
	IIC_Init();
	AT24C08_WriteByte(0xA0,0x00,11);//在第1页的0x00写11
	AT24C08_WriteByte(0xA2,0x00,22);//在第2页的0x00写22
	AT24C08_WriteByte(0xA4,0x00,33);//在第3页的0x00写33
	AT24C08_WriteByte(0xA6,0x00,44);//在第4页的0x00写44
	Num1 = AT24C08_ReadByte(0xA0,0xA1,0x00);
	Num2 = AT24C08_ReadByte(0xA2,0xA3,0x00);
	Num3 = AT24C08_ReadByte(0xA4,0xA5,0x00);
	Num4 = AT24C08_ReadByte(0xA6,0xA7,0x00);//逐个读取
	OLED_ShowString(2,1,"Read Num:");
	while(1)
	{
		OLED_ShowNum(2,10,Num1,3);
		Delay_s(1);
		OLED_ShowNum(2,10,Num2,3);
		Delay_s(1);
		OLED_ShowNum(2,10,Num3,3);
		Delay_s(1);
		OLED_ShowNum(2,10,Num4,3);
		Delay_s(1);
	}
}

 最终结果:

 

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: STM32是一种常用的微控制器芯片,而AT24C08是一种存储芯片。我们可以通过I2C总线来连接STM32和AT24C08,实现操作。 首先,我们需要在STM32上初始化I2C模块。通过设置I2C的时钟频率、模式等参数,使得STM32能够通过I2C总线与AT24C08进行通信。 在AT24C08之前,我们需要知道它的I2C地址。AT24C08的地址由三个硬件可编程引脚(A0、A1和A2)决定。根据这三个引脚的连接方式,确定AT24C08的I2C地址,例如0xA0。 对于操作,首先我们需要发送AT24C08的起始地址,也就是要数据的地址。然后,我们可以通过I2C从AT24C08数据,并将数据存储在STM32的内存中。 对于操作,首先我们需要发送AT24C08的起始地址,也就是要数据的地址。然后,我们可以通过I2C向AT24C08数据数据可以是单个字节,也可以是一段连续的数据操作都需要等待一段时间,以确保I2C总线上的数据传输完成。在数据数据后,可以根据需要继续进行其他操作,如取更多的数据入更多的数据。 总结起来,通过初始化I2C模块,连接STM32和AT24C08,并通过I2C总线进行操作,可以实现STM32对AT24C08的。 ### 回答2: AT24C08是一种常见的串行EEPROM芯片,而STM32系列微控制器是一种基于ARM Cortex-M内核的高性能微控制器。下面是一种可能的方法来AT24C08芯片与STM32进行通信: 首先,需要将AT24C08的SDA引脚和SCL引脚接到STM32的相应口线上,同时给AT24C08提供合适的供电电压。 接下来,为了在STM32上进行AT24C08芯片,需要初始化I2C总线,并设置合适的时钟速度。可以使用STM32提供的I2C库函数进行初始化和配置。 接着,可以使用STM32提供的库函数来编AT24C08芯片的功能代码。例如,可以使用HAL库函数来发送起始信号,选择AT24C08的设备地址,指定操作,以及指定要数据地址。 对于操作,可以使用HAL库函数发送命令到AT24C08芯片,并将取到的数据存储在STM32的缓冲区中。 对于操作,可以使用HAL库函数发送命令和要入的数据AT24C08芯片。 最后,记得在操作完成后,释放I2C总线资源。 需要注意的是,在编代码时,要根据AT24C08的规格书和STM32的技术手册来设置合适的时序和数据格式。 总之,通过初始化I2C总线、使用STM32提供的库函数,可以实现对AT24C08芯片的操作。这种方法简单、可靠,并且可以适用于多种不同的芯片和微控制器。 ### 回答3: STM32是一款功能强大的微控制器,可以与AT24C08 EEPROM芯片进行操作。 首先,为了与AT24C08通信,需要通过I2C总线连接STM32和AT24C08。I2C总线有两根线,分别是SCL和SDA线。SCL线用于时钟信号的传输,SDA线用于数据的传输。确保这两根线正确连接。 接下来,需要在STM32上配置I2C外设,并初始化相关寄存器。在初始化过程中,需要设置I2C的时钟速率、模式等参数。 在AT24C08中的数据时,可以按照以下步骤操作: 1.发送开始信号:在I2C总线上发送开始信号,通知AT24C08准备接收命令或地址。 2.发送设备地址和命令:将AT24C08的设备地址和取命令发送到I2C总线上,以通知AT24C08即将进行取操作。 3.接收数据AT24C08开始从存储器中数据,并通过I2C总线传输给STM32。在接收数据之前,需要等待AT24C08的响应。 4.发送停止信号:取完数据后,发送停止信号给AT24C08和STM32,表示取操作的结束。 当需要数据AT24C08时,可以按照以下步骤操作: 1.发送开始信号:在I2C总线上发送开始信号,通知AT24C08准备接收命令或地址。 2.发送设备地址和命令:将AT24C08的设备地址和入命令发送到I2C总线上,以通知AT24C08即将进行入操作。 3.发送数据:将要入的数据发送给AT24C08,通过I2C总线传输给AT24C08。 4.发送停止信号:数据入完成后,发送停止信号给AT24C08和STM32,表示入操作的结束。 总之,通过配置和操作STM32的I2C外设,可以实现与AT24C08的操作。该过程需谨慎进行,确保正确的通信和数据传输。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值