【蓝桥杯嵌入式学习G431】模块七:I2C-EEPROM

本文介绍了如何利用STM32CubeMX和Keil5工具配置I2CHAL库,提供了一个基础的I2C读写函数示例,以及存储数据的注意事项,包括数据类型转换和延时处理。
摘要由CSDN通过智能技术生成

原理图:

时序图:

代码都是根据时序图来编写,具体原理略显复杂,本文章暂时只分享速通技巧,掌握模块化即可。原理可搜索其他人的教程。

STM32CubeMX配置:

【不需要配置】

Keil5配置:

根据官方给出的资源包,在如下路径中:(路径根据自己存放路径略有不同)

D:\STM32\嵌入式资源数据包_STM32G4_2023\嵌入式资源数据包_STM32G4_2023\竞赛平台\3-底层驱动代码参考\I2C_HAL

找到如下两个文件:

将这两个文件拷贝到自己的工程文件夹中,例如我在这个工程中自己编写的代码保存在名字为bsp的文件夹中。

打开软件。

在左侧自己的bsp组中右键添加已经存在的文件:

选择刚刚复制粘贴的.c文件:

打开i2c_hal.c文件,根据时序图,编写如下两个函数:

uint8_t eeprom_read(uint8_t addr)
{
	uint8_t data=0;
	I2CStart();
	I2CSendByte(0xa0);
	I2CWaitAck();
	I2CSendByte(addr);
	I2CWaitAck();
	I2CStop();
	
	I2CStart();
	I2CSendByte(0xa1);
	I2CWaitAck();
	data=I2CReceiveByte();
	I2CSendNotAck();
	I2CStop();
	return data;
}
void eeprom_write (uint8_t addr , uint8_t dat)
{
	I2CStart();
	I2CSendByte(0xa0);
	I2CWaitAck();
	I2CSendByte(addr);
	I2CWaitAck();
	I2CSendByte(dat);
	I2CWaitAck();
	I2CStop();
}

uint8_t eeprom_read(uint8_t addr) 函数可以从指定地址 addr 中读取对应的数据,大小为8位。

void eeprom_write (uint8_t addr , uint8_t dat) 函数可以在指定地址 addr 中写入数据 dat,大小为8位。

注意:

1、存数据不能存小数,如果要存比如说一位小数,就可以将这个数据先 ×10 再进行存储,读取的时候进行 ÷10 即可。

2、存数据如果超过8位大小,就可以将数据进行高八位和低八位的分开,将高八位和低八位分别写入某地址中,然后读取的时候再进行高八位和低八位的整合。

3、连续写入两个数据的时候,需要进行延时,10ms左右即可。

 在main.c引入头文件:i2c_hal.h即可使用。

初始化:

I2CInit();

读取:

num=eeprom_read(8);//从地址8读取

写入:

eeprom_write(8,++num);
//连续写入两个值 之间必须加延迟函数
HAL_Delay(10);
eeprom_write(9,num++);

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值