[学习日记]STM32驱动AT24C02

AT24C02引脚图

在这里插入图片描述

引脚功能

A2-A0:用于IIC地址选择,其地址组成是A7 A6 A5 A4 A3 A2 A1 A0 W/R,其中A7-A3固定为1010,通常情况下 A2-A0都接地,所以写地址为0xA0 读地址为0xA1;
WP:写保护引脚,接高电平无法写入,默认情况都接低电平(本来就是EEPROM为的就是读写方便,用flash芯片可以关注一下写保护);
SCL/SDA:分别为IIC的时钟线和数据线;
VCC:支持1.8至5.5V(非常人性化)。

其他

AT24C02能够存储256字节的数据,而且支持最快400KHz的IIC读写速度。

代码

// 函数功能 :初始化AT24C02(引脚、时钟)
void AT24C02_Init(void)
{
	//DEV_IIC_Init(0x00,400000);		//已经在OLED.C初始化完成
	
}

//函数功能 : 往AT24C02的一个地址写入一个数据
void AT24C02_Write(unsigned char addr,unsigned char dat)
{
  IIC_SendData(AT24C02_ADDR, addr, dat);
}

// 函数功能 :读取AT24C02的一个地址的一个数据
void AT24C02_Read(unsigned char addr,unsigned char *dat)
{
  *dat = IIC_ReadData(AT24C02_ADDR, addr);
}

//函数功能 : 往AT24C02的一个地址写入多个数据
void AT24C02_WriteDatas(unsigned char addr,unsigned char *dat,unsigned char len)
{
  IIC_SendDatas(AT24C02_ADDR, addr, dat, len);
}

// 函数功能 :读取AT24C02的多个数据
void AT24C02_ReadDatas(unsigned char addr, unsigned char *dat, unsigned char len)
{
  IIC_ReadDatas(AT24C02_ADDR, addr, dat, len);
}

下面补充一下 IIC的读写函数

void IIC_SendData(uint8_t dev_addr, uint8_t reg_addr, uint8_t data)
{
	IIC_Start();
	
	IIC_Send_Byte(dev_addr&0xfe);
	if(IIC_Wait_Ack()) return;//发送失败
	
	IIC_Send_Byte(reg_addr);
	if(IIC_Wait_Ack()) return;//发送失败
	
	IIC_Send_Byte(data);
	if(IIC_Wait_Ack()) return;//发送失败

	IIC_Stop();
}

uint8_t IIC_ReadData(uint8_t dev_addr, uint8_t reg_addr)
{
	uint8_t data;
	IIC_Start();
	
	IIC_Send_Byte(dev_addr&0xfe);
	if(IIC_Wait_Ack()) return 0xff;//发送失败
	
	IIC_Send_Byte(reg_addr);
	if(IIC_Wait_Ack()) return 0xff;//发送失败
	
	IIC_Start();
	
	IIC_Send_Byte(dev_addr|0x01);
	if(IIC_Wait_Ack()) return 0xff;//发送失败
	
	data = IIC_Read_Byte(1);
	
	IIC_Stop();
	return data;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

余十三_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值