蓝桥杯嵌入式--E2PROM读写异常解决

前言

这几天在使用E2PROM时出现了一些小问题,导致E2PROM不工作,历经9981难终于解决了问题,现记录如下:

问题

一、未正确编写E2PROM读写代码

这个问题只能通过多阅读理解EEPROM读写时序图来解决。

E2PROM写操作:

void E2prom_write(uint8_t addr,uint8_t data)//写代码
{
    I2CStart();
    I2CSendByte(0xa0);
    I2CWaitAck();
    I2CSendByte(addr);
    I2CWaitAck();
    I2CSendByte(data);
    I2CWaitAck();
    I2CStop();
    
}

I2C读操作:

uint8_t E2prom_read(uint8_t addr)
{
    uint8_t data =0;
    I2CStart();
    I2CSendByte(0xa0);
    I2CWaitAck();
    I2CSendByte(addr);
    I2CWaitAck();
    I2CStart();
    I2CSendByte(0xa1);
    I2CWaitAck();
    data = I2CReceiveByte();
    I2CStop();
    return data;
}

二、忘记初始化

在使用I2C总线时,需要先进行初始化,即执行:

I2CInit();

三、未初始化时钟

I2C的使用理论上来说是不需要我们在CubeMX中进行配置的,只需要包括头文件,然后初始化使用即可,但是通过阅读初始化代码可知:

初始化代码并未使能时钟,如果没有使用GPIOB的情况下CubeMX并不会使能GPIOB的时钟,因此需要注意GPIO初始化中是否有使能时钟,如果没有的话需要添加:

 __HAL_RCC_GPIOB_CLK_ENABLE();

四、读取间隔太短

相邻两次的读写操作的间隔应该在5ms以上,以保证数据正确。

五、错误使用HAL_DELAY

前面提到,相邻两次读写操作的间隔应该在5ms以上,因此可以使用延时的方法保证时间。我们延时一般采用HAL库的Delay函数,或者使用for循环进行,当读写操作在中断中进行时,如果使用HAL_Delay函数,会造成程序卡死的现象

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要读取 EEPROM 中的数据,您需要连接 EEPROM 到计算机上,并使用适当的接口进行通信。通常,这涉及到使用专门的硬件设备(如 EEPROM 编程器)或使用特定的软件驱动程序(如 USB 到 I2C 转换器)。 一旦您成功地建立了与 EEPROM 的连接,您可以使用 MATLAB 的 Instrument Control Toolbox 来读取 EEPROM 中的数据。以下是一个可能的步骤: 1. 首先,使用 Instrument Control Toolbox 中的适当函数创建一个 I2C 对象,以便与 EEPROM 进行通信。例如,如果您使用的是 USB 到 I2C 转换器,则可以使用 i2c函数创建一个 I2C 对象。 2. 设置 I2C 对象的属性,包括 EEPROM 的地址和要读取的数据的地址和长度。 3. 使用 read函数从 EEPROM 中读取数据。read函数将返回一个 uint8 数组,其中包含从 EEPROM 中读取的数据。 4. 将 uint8 数组转换为 MATLAB 中的其他数据类型,例如 double、int16 或 char。 以下是一个示例 MATLAB 代码,将读取与 EEPROM 中的地址 0x50 中的 16 个字节的数据: ```matlab % 创建 I2C 对象 i2cobj = i2c('usb', 0, 0x50); % 设置要读取的数据的地址和长度 addr = 0; len = 16; % 从 EEPROM 中读取数据 data = read(i2cobj, addr, len, 'uint8'); % 将 uint8 数组转换为 char 数组 str = char(data); % 显示读取的数据 disp(str); ``` 请注意,以上代码仅提供了一个示例。具体的代码实现将取决于您使用的硬件设备和 EEPROM 的规格。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值