STM32-CubuMX-HAL库学习(七)-- I2C实现EEPROM读取

硬件平台:正点原子STM32MINI开发板(STM32RCT6)
软件平台:STM32CubeMX
KEIL5
实现功能:用硬件IIC1读取板载EEPROM,用杜邦线连接
硬件连接: PB6->IIC1_SCL
PB7->IIC1_SDA
PC12->EEPROM_SCL
PC11->EEPROM_SDA
说明:有时候程序下载后不实现,可试着复位一下,也可在魔术棒配置中打开下载后复位。
(仅仅写了IIC配置部分,其余初始化以及工程配置未做说明)
在这里插入图片描述
1、在I2C1中,打开I2C模式,
在这里插入图片描述
2、可根据需求选择I2C速度,此处选择快速模式
在这里插入图片描述
3、查看想要引脚代码和实际是否对的上,然后生成代码。

HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c,
                 uint16_t DevAddress, uint16_t MemAddress,
                 uint16_t MemAddSize, uint8_t *pData, 
                 uint16_t Size, uint32_t Timeout)
读取函数 
例:
HAL_I2C_Mem_Read(&hi2c2, DevAddress, reg,I2C_MEMADD_SIZE_8BIT,&res,1,10);
HAL_I2C_Mem_Read(&hi2c2, DevAddress, reg,I2C_MEMADD_SIZE_8BIT,buf,len,10);
I2C_HandleTypeDef *hi2c   选择是哪个i2c
uint16_t DevAddress      器件地址
uint16_t MemAddress      寄存器地址
uint16_t MemAddSize      读取单个数据字节长度
uint8_t *pData           读取数据保存地址
uint16_t Size            读取数据长度
uint32_t Timeout         超时报错时间

HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, 
                uint16_t DevAddress, uint16_t MemAddress, 
                uint16_t MemAddSize, uint8_t *pData, 
                uint16_t Size, uint32_t Timeout)
写入函数
例: 
HAL_I2C_Mem_Write(&hi2c2, DevAddress, reg,I2C_MEMADD_SIZE_8BIT,&data,1,10);
HAL_I2C_Mem_Write(&hi2c2, DevAddress, reg,I2C_MEMADD_SIZE_8BIT,data,len,10);
I2C_HandleTypeDef *hi2c   选择是哪个i2c
uint16_t DevAddress      器件地址
uint16_t MemAddress      寄存器地址
uint16_t MemAddSize      写入单个数据字节长度
uint8_t *pData           写入数据地址
uint16_t Size            写入数据长度
uint32_t Timeout         超时报错时间                

4、以上是IIC常用函数相关解释
在这里插入图片描述
5、将函数做简单封装,这里只测试单个字节的写入和读取

uint8_t IIC_read_single_reg(uint16_t DevAddress,uint8_t reg)
{
    uint8_t res = 0;
    HAL_I2C_Mem_Read(&hi2c1, DevAddress, reg,I2C_MEMADD_SIZE_8BIT,&res,1,10);
    return res;
}

void IIC_write_single_reg(uint16_t DevAddress,uint8_t reg, uint8_t data)
{
    HAL_I2C_Mem_Write(&hi2c1, DevAddress, reg,I2C_MEMADD_SIZE_8BIT,&data,1,10);
}

在这里插入图片描述
6、测试往0X01地址写数据0X07,用data读出来,用DEBUG查看,查看结果满足

IIC_write_single_reg(0XA0,0X01,0X07);
data = IIC_read_single_reg(0XA0,0X01);
  • 5
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以使用STM32HAL库实现I2C读写EEPROM。首先,确保已经正确配置了I2C外设和相关引脚。然后,按照以下步骤进行操作: 1. 初始化I2C外设:使用`HAL_I2C_Init()`函数初始化I2C外设。 2. 配置EEPROM地址:在发送I2C读写请求之前,需要设置EEPROM的地址。这可以通过向I2C外设发送一个写入EEPROM地址的I2C Start信号,然后发送EEPROM地址字节来实现。 3. 发送数据:如果要向EEPROM写入数据,可以使用`HAL_I2C_Master_Transmit()`函数发送数据。如果要从EEPROM读取数据,可以使用`HAL_I2C_Master_Receive()`函数接收数据。 下面是一个示例代码,演示如何使用HAL库进行I2C读写EEPROM: ```c #include "stm32xxxx.h" // 根据具体的芯片型号选择头文件 #define EEPROM_ADDRESS 0xA0 // EEPROM的I2C地址 // 初始化I2C外设 void I2C_Init(void) { // I2C外设初始化代码 // ... } // 向EEPROM写入数据 void EEPROM_Write(uint16_t address, uint8_t* data, uint16_t size) { // 发送I2C Start信号和EEPROM地址 HAL_I2C_Master_Transmit(&hi2c1, EEPROM_ADDRESS, (uint8_t*)&address, 2, HAL_MAX_DELAY); // 发送数据到EEPROM HAL_I2C_Master_Transmit(&hi2c1, EEPROM_ADDRESS, data, size, HAL_MAX_DELAY); } // 从EEPROM读取数据 void EEPROM_Read(uint16_t address, uint8_t* data, uint16_t size) { // 发送I2C Start信号和EEPROM地址 HAL_I2C_Master_Transmit(&hi2c1, EEPROM_ADDRESS, (uint8_t*)&address, 2, HAL_MAX_DELAY); // 从EEPROM接收数据 HAL_I2C_Master_Receive(&hi2c1, EEPROM_ADDRESS, data, size, HAL_MAX_DELAY); } ``` 请注意,上述代码中的`hi2c1`是I2C外设的句柄,具体根据你的芯片型号和使用的外设进行修改。此外,还需要根据EEPROM的具体规格和通信协议进行相应的配置。 希望以上信息对你有所帮助!如有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少年、潜行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值