文章目录
- 一、软件准备
- 配置I2C接口:
- 生成工程代码:
- 二、编写驱动程序
- 初始化I2C接口:
- 编写读写函数:
- 三、调试与测试
前面讲到使用软件模拟i2c读写AT24C02,这篇文章使用stm32 提供的硬件i2c读写,看看怎么回事
一、软件准备
配置I2C接口:
打开STM32CubeMX,选择STM32系列的芯片型号。
在“Pinout & Configuration”选项卡中,选择一个可用的I2C接口,并配置相应的SDA和SCL引脚。
在“Configuration”选项卡中,设置I2C的工作模式、时钟源和时钟速率等参数。
生成工程代码:
配置完成后,生成MDK-ARM工程。
二、编写驱动程序
初始化I2C接口:
在STM32CubeMX生成的初始化代码中,已经包含了I2C接口的初始化代码。可以通过调用HAL_I2C_Init
函数来初始化I2C接口。
编写读写函数:
写数据:使用HAL_I2C_Mem_Write
函数向AT24C02写入数据。需要指定EEPROM的设备地址、寄存器地址(即存储单元地址)、数据长度和数据内容。
读数据:使用HAL_I2C_Mem_Read
函数从AT24C02读取数据。同样需要指定设备地址、寄存器地址和数据长度,函数会返回读取到的数据。
以下是一个简单的读写示例代码:
// AT24C02的写地址和读地址(根据数据手册和原理图确定)
#define AT24C02_ADDR_WRITE 0xA0
#define AT24C02_ADDR_READ 0xA1
// 向AT24C02写入一个字节数据
uint8_t AT24C02_Write_Byte(uint16_t addr, uint8_t data)
{
return HAL_I2C_Mem_Write(&hi2c2, AT24C02_ADDR_WRITE, addr, I2C_MEMADD_SIZE_8BIT, &data, 1, HAL_MAX_DELAY);
}
// 从AT24C02读取一个字节数据
uint8_t AT24C02_Read_Byte(uint16_t addr, uint8_t *data)
{
return HAL_I2C_Mem_Read(&hi2c2, AT24C02_ADDR_READ, addr, I2C_MEMADD_SIZE_8BIT, data, 1, HAL_MAX_DELAY);
}
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_I2C1_Init();
uint8_t write_data = 0xAB;
uint8_t read_data = 0;
uint16_t eeprom_address = 0x00; // EEPROM中的存储单元地址
// 向EEPROM写入数据
if (AT24C02_Write_Byte(eeprom_address, write_data) == HAL_OK)
{
printf(“Write ok\n”);
}
else
{
printf(“Write fail\n”);
}
// 延时,确保EEPROM完成写入操作
HAL_Delay(10);
// 从EEPROM读取数据
if (AT24C02_Read_Byte(eeprom_address, &read_data) == HAL_OK)
{
printf(“Read ok, read_data = 0x%02X\n”, read_data);
}
else
{
printf(“Read fail\n”);
}
while (1)
{
// 主循环,可以添加其他操作
}
}