省一蓝桥杯嵌入式-12IIC-EEPROM实验

IIC-EEPROM实现

蓝桥杯的IIC是通过软件实现的,即用GPIO模拟IIC通信

实验:利用IIC通信与EEPROM模块交互,实现数据的断电存储与读取,主要任务是了解EEPROM模块原理

温馨提示:以下涉及到官方的手册,在比赛时都会提供,且cubemx无需配置,官方提供的资料包中有相应库,只需移植,无需担心

一、IIC简介

IIC:inter intergrated circuit集成电路总线

同步串行:同步指需要一根时钟线,串行指只需要一根数据线,一根数据线代表不能多设备同时进行数据传输

半双工通信:双方设备可收可发,但同一时间只能一方收一方发

由时钟线SCL和数据线SDA两条线组成,接上拉电阻,总线空闲状态处于高电平

为使不同电压输出的器间能够互连,SCL和SDA开漏输出

总线支持多设备连接,允许多主机存在,每个设备都有唯一一个地址

二、IIC接口时序

这是IIC的重要部分,但这里主要以程序实现为主,不详解,网上关于IIC部分很全面,自行学习

在这里插入图片描述

三、手册原理图

在这里插入图片描述

以上是蓝桥杯官方产品手册中的IIC总线下接入的设备,可以看到几点关键信息:

  • 芯片的IIC接口为:PB6(SCL)、PB7(SDA)
  • 接入设备有两个:M24C02-WMN6TP(EEPROM)、MCP4017T-104ELT

在这里插入图片描述

四、AT24C02简介

本次实验的操作对象,通过看模块手册了解具体操作步骤

1.重要信息

在这里插入图片描述

  • 可以看到:自定时写入周期(最大5 ms),说人话就是写入时间间隔要大于5ms,否则会导致下一个数据写入失败,重要!!!

  • AT24C02是2Kb串行EEPROM,内部组织为256*8bit,也就是256Byte

2.设备地址描述

在这里插入图片描述

我们只需要关注第一行即可,这个就是设备地址的8bit数据

后四位我们需要自己指定,其中最低为读写标志位,即这一次的IIC通信是往设备写(0)还是读(1),在发送设备地址时就指定好

其中A0、A1、A2我们可自己指定,换言之,可实现8个器件公用一个接口,因为2^3=8

3.具体时序操作图

3.1.字节写入

在这里插入图片描述

写入操作是从高位到低位进行的

由图可知:

1、开启IIC总线(前提是先初始化IIC)

2、传入设备地址,注意,设备地址的最后一位读写位需要置为0,即接下来是写操作

3、等待应答

4、传入写入设备内具体地址:比方:设备地址是班级,设备内具体地址是具体桌位;即要写入这个设备的具体哪个地方

5、等待应答

6、传入要写的8位数据

7、等待应答

8、IIC停止

以上的所有步骤,均由官方提供的库实现,在下方代码中会提供,只需简单调用即可

3.2.字节读取

在这里插入图片描述

如果上面的图能看懂,这个图也是换汤不换药,但有一点非常重要!

在第二次开启IIC时,传入的设备地址最后一位变为了1(读操作),要非常注意!!

在该模块的手册中还有其他操作,但本次实验只用到了上面说到的几个,也能覆盖大部分场景,其他的自行学习

五、代码实现

1.库移植

在官方资料包中,找到E:\蓝桥杯嵌入式个人笔记\第十六届蓝桥杯大赛省赛资源数据包(嵌入式)(新)\DP2025_ES\DP2025_ES\BSP\GPIO_I2C_HAL

文件i2c_hal.ci2c_hal.h,复制到工程中自己的定义的库目录下,并将.c文件添加到keil中的对应目录即可

2.代码部分

//位于对应工程的i2c_hal.c内,配置好直接在my_main2.c内调用即可
void eeprom_write(uint8_t add, uint8_t dat)
{
	I2CStart();
	I2CSendByte(0xa0);
	I2CWaitAck();
	I2CSendByte(add);
	I2CWaitAck();
	I2CSendByte(dat);
	I2CWaitAck();
	I2CStop();
}

uint8_t eeprom_read(uint8_t add)
{
	uint8_t data;
	I2CStart();
	I2CSendByte(0xa0);
	I2CWaitAck();
	I2CSendByte(add);
	I2CWaitAck();
	
	I2CStart();
	I2CSendByte(0xa1);
	I2CWaitAck();
	data = I2CReceiveByte();
	I2CSendNotAck();
	I2CStop();
	return data;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值