蓝桥杯嵌入式——I2C协议——eeprom

1.简介用处

EEPROM可以用来存储信息,在重新写入或者reset 后数据仍然存在并可以被我们读取。总的说来,EEPROM是用来写入存储并可以被我们读取到的串口工具。

2.编写代码前的准备工作

首先,EEPROM的使用需要I2C文件,在考试提供的资源库中,我们可以找到i2c.c文件和i2c.h文件,我们需要提前将.c文件转移到Src文件夹中(注意:在移植后,将名字改为i2c.c和i2c.h),将.h文件转移到Inc文件夹中。并在keil中将i2c.c引用到Application/User中,并在代码中包含i2c.h

#include "i2c.h"

 因为我们是直接将iic.c和.h文件移植到项目中的,所以Cubemx并没有帮我们生成初始化代码,所以我们需要在初始化的位置加入初始化代码

I2CInit();

3.代码编写

我们需要在i2c.c中编写函数方便后续调用

向存储器写入数据的“写函数”

void EEPROM_Write(u8 add,u8 dat)
{
    I2CStart();                //开始

    I2CSendByte(0xa0);        //发送0xa0告诉存储器我们要开始写入数据了
    I2CWaitAck();             //等待应答,得到应答后执行下面的

    I2CSendByte(add);        //发送地址信息
    I2CWaitAck();

    I2CSendByte(dat);        //发送想要存储的信息
    I2CWaitAck();

    I2CStop();                //停止

    HAL_Delay(5);
}

从存储器读数据的“读函数”

u8 EEPROM_Read(u8 add)
{
    u8 dat;

    I2CStart();                //开始

    I2CSendByte(0xa0);        //发送0xa0告诉存储器我们要开始写入数据了
    I2CWaitAck();             //等待应答,得到应答后执行下面的

    I2CSendByte(add);        //发送地址信息
    I2CWaitAck();

    I2CStart();                //开始

    I2CSendByte(0xa1);        //发送0xa1告诉存储器我们要开始读取数据了
    I2CWaitAck();             //等待应答,得到应答后执行下面的

    dat = I2CReceiveByte();    //读取信息

    I2CSendNotAck();           //发送一个无需应答的信息

    I2CStop();                //停止

    return (dat);
}

 写完后需要在i2c.h中声明函数

void EEPROM_Write(u8 add,u8 dat);
u8 EEPROM_Read(u8 add);

4.在main.c中进行编程调用函数

//EEPROM
u8 time=0;
void eeprom()
{
    time=EEPROM_Read(0x01);
    time++;
    EEPROM_Write(0x01,time);
}

该函数在main函数中,while(1)前引用,time用于记录 开机次数,按reset可以增加time。用来检验EEPROM功能。

5.注意:

在使用keil编程时,如果读取到的数是255,也就是说time 这个数超出范围了,可以调整keil的优先级后重新写入

点击魔术棒

 

在C/C++栏中我们默认使用的是-O3,调为-O0即可。

6.典型的用法

eeprom处理的是八位数据,若需要储存16位数据,则需要一些变化

例子:

u16 n_change;
eeprom_write(0x20,n_change);    //默认存储低八位
//eeprom_write(0x20,n_change & 0x00ff);    //取低八位数据,与上面作用一样
eeprom_write(0x21,n_change>>8);    //数据右移八位,存储高八位

//读数据
n_change = eeprom_read(0x20) | (eeprom_read(0x21)<<8);

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值