STM32硬件IIC读写24C02-EEPROM(HAL库)

最近看蓝桥杯的程序,对24C02读写采用的是软件IIC,使用软件IIC读写可以更好的了解IIC时序。今天查看了库函数使用硬件IIC进行读写。首先打开cubemx进行基本配置。

开启硬件I2C2,为了方便观察再驱动一个OLED,oled采用模拟I2C时序驱动。引脚配置如下,接着就可以点击生成代码。

 

 新建两个文件24c02.c和24c02.h代码如下

#include "24c02.h"

#define eeprom_add 0xA0

HAL_StatusTypeDef EEPROM_Writebyte(I2C_HandleTypeDef *hi2c,uint16_t add,uint8_t data)
{
	return HAL_I2C_Mem_Write(hi2c,eeprom_add,add,I2C_MEMADD_SIZE_8BIT,&data,1,HAL_MAX_DELAY);
}

HAL_StatusTypeDef EEPROM_readbyte(I2C_HandleTypeDef *hi2c,uint16_t add,uint8_t *data)
{
	return HAL_I2C_Mem_Read(hi2c,eeprom_add,add,add,data,I2C_MEMADD_SIZE_8BIT,HAL_MAX_DELAY);
}

24c02.h

#ifndef __24C02_H__
#define __24C02_H__

#include "main.h"

HAL_StatusTypeDef EEPROM_Writebyte(I2C_HandleTypeDef *hi2c,uint16_t add,uint8_t data);
HAL_StatusTypeDef EEPROM_readbyte(I2C_HandleTypeDef *hi2c,uint16_t add,uint8_t *data);
#endif

对于HAL_I2C_Mem_Write我们需要传入的是需要写入的地址和数据 还有我们主机地址。我们查看下表可以知道24c02的8位地址,高位为1010,低位的b3、b2、b1我们买的模块默认均接地,最低位默认为0。所以我们的设备地址是0x50

 

在主函数中调用写好的读写函数,只需要定义一个变量来判断是不是返回HAL_OK即可。以下是一个简单的读写main函数并且用OLED显示的程序。

int main(void)
{
  /* USER CODE BEGIN 1 */
	uint16_t datawrite=0x1728;
	uint8_t readdata;
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */
	Delay_Init(72);
  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C2_Init();
  /* USER CODE BEGIN 2 */
	OLED_Init();
	HAL_StatusTypeDef status = EEPROM_Writebyte(&hi2c2,0x00,datawrite);
	if(status!=HAL_OK)
	{
		EEPROM_readbyte(&hi2c2,0x00,&readdata);
	}
	OLED_ShowHexNum(2, 1,datawrite,8);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

可以看到我们对0x00地址写入的数据成功读出并且通过OLED显示。 

完整的代码和工程附在下面 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小白研究僧学习嵌入式

谢谢您的鼓励,会持续努力滴!

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

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

打赏作者

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

抵扣说明:

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

余额充值