STM32单片机基础13——使用硬件I2C读写EEPROM(AT24C02)

本教程详细介绍了如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C与AT24C02 EEPROM进行通信。从准备工作、MDK工程生成、代码编写到驱动程序测试,涵盖硬件配置、时钟源设定、串口和I2C接口配置,以及AT24C02的地址确定和读写函数实现。
摘要由CSDN通过智能技术生成

本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C外设读取EEPROM数据(以AT24C02为例)。

1. 准备工作

硬件准备

mark

  • EEPROM

小熊派开发板左边的接口是E53接口,用来连接E53接口的扩展板,每个扩展板都板载了一块EEPROM用来保存信息,如图:

mark

AT24C02的原理图如下(该原理图中有bug,A0的上拉电阻无效,实际A0为低电平):

mark

软件准备

  • 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码;

Keil MDK和串口助手的安装包都可以关注“小熊派开源社区”微信公众号,在资料教程一栏中可获取安装包。

2.生成MDK工程

选择芯片型号

打开STM32CubeMX,打开MCU选择器:
mark

搜索并选中芯片STM32L431RCT6:
mark

配置时钟源

  • 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC;
  • 如果使用默认内部时钟(HSI),这一步可以略过;

这里我都使用外部时钟:
mark

配置串口

小熊派开发板板载ST-Link并且虚拟了一个串口,原理图如下:

mark

这里我将开关拨到AT-MCU模式,使PC的串口与USART1之间连接。

接下来开始配置USART1

mark

配置硬件I2C

首先查看小熊派开发板的原理图,确定EEPROM接在哪个I2C接口上,如图:

mark

接下来开始配置I2C接口1:

mark

配置时钟树

STM32L4的最高主频到80M,所以配置PLL,最后使HCLK = 80Mhz即可:

mark

生成工程设置

mark

代码生成设置

最后设置生成独立的初始化文件:

mark

生成代码

点击GENERATE CODE即可生成MDK-V5工程:

mark

3. 在MDK中编写、编译、下载用户代码

修改I2C初始化代码的小BUG

mark

重定向printf( )函数

参考:重定向printf函数到串口输出的多种方法

编写EEPROM驱动程序

EEPROM的驱动编写篇幅过多,单独分出来一节讲述。

4. AT24C02驱动的编写

确定IIC器件地址

根据AT24C02的 Datasheet 可知AT24C02有2K bit,即256B,分为32页,每页8个字节,结合数据手册和原理图可以得知,板载AT24C02的读地址为0xA2,写地址为0xA3

mark

首先在at24c02_i2c_drv.h中编写AT24C02相关的宏定义:

#define	AT24C02_ADDR_WRITE	0xA0
#define	AT24C02_ADDR_READ	0xA1

然后在at24c02_i2c_drv.c中引入i2c.h,基于HAL提供的硬件IIC操作函数,编写AT24C02的一些底层函数,如下。

任意地址写一个字节

根据AT24C02的数据手册可知,AT24C02写一个字节的格式如下:

mark

编写的函数如下:

/**
 * @brief		AT24C02任意地址写一个字节数据
 * @param		addr —— 写数据的地址(0-255)
 * @param		dat  —— 存放写入数据的地址
 * @retval		成功 —— HAL_OK
*/
uint8_t At24c02_Write_Byte(uint16_t addr, uint8_t* dat)
{
   
	return HAL_I2C_Mem_Write(&hi2c1, AT24C02_ADDR_WRITE, addr, I2C_MEMADD_SIZE_8BIT, dat, 1, 0xFFFF);
}

任意地址读一个字节

根据AT24C02的数据手册可知,AT24C02读一个字节的格式如下:

mark

编写的函数如下:

/**
 * @brief		AT24C02任意地址读一个字节数据
 * @param		addr —— 读数据的地址(0-255)
 * @param		read_buf —— 存放读取数据的地址
 * @retval		成功 —— HAL_OK
*/
uint8_t At24c02_Read_Byte(uint16_t ad
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值