蓝桥杯嵌入式外设开发记录 - I2C通信(eeprom读写)
本文记录了学习蓝桥杯嵌入式开发过程中的I2C通信(eeprom读写)的记录
蓝桥杯嵌入式外设开发记录 - I2C通信(eeprom读写)
蓝桥杯嵌入式外设开发记录 - I2C通信
基本信息
| 项目 | 内容 |
|---|---|
| 开发板型号 | CT117E(STM32G431RBT6) |
| 开发环境 | STM32CubeMX 6.6.1, Keil uVision5 MDK 5.38 |
| 记录日期 | 2025-3-4 |
1.CubeMX 配置
2.相关代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/* EEPROM读取函数
* @param addr - 要读取的EEPROM内部地址
* @return 读取到的数据(1字节)
*/
uint8_t eeprom_read(uint8_t addr)
{
/* 第一阶段:发送要读取的目标地址 */
I2CStart(); // 发起I2C起始信号
I2CSendByte(0xa0); // 发送设备地址 + 写模式(0xA0 = 10100000b)
I2CWaitAck(); // 等待从设备应答
I2CSendByte(addr); // 发送要读取的内存地址
I2CWaitAck(); // 等待从设备应答
I2CStop(); // 发送停止信号,结束本次操作
/* 第二阶段:读取数据 */
I2CStart(); // 再次发起I2C起始信号
I2CSendByte(0xa1); // 发送设备地址 + 读模式(0xA1 = 10100001b)
I2CWaitAck(); // 等待从设备应答
uint8_t re_dat = I2CReceiveByte(); // 接收数据字节
I2CSendNotAck(); // 发送非应答信号(NACK),表示读取结束
I2CStop(); // 发送停止信号
return re_dat; // 返回读取到的数据
}
/* EEPROM写入函数
* @param addr - 要写入的EEPROM内部地址
* @param dat - 要写入的数据(1字节)
*/
void eeprom_write(uint8_t addr, uint8_t dat)
{
/* 单次写入流程 */
I2CStart(); // 发起I2C起始信号
I2CSendByte(0xa0); // 发送设备地址 + 写模式(0xA0)
I2CWaitAck(); // 等待从设备应答
I2CSendByte(addr); // 发送目标内存地址
I2CWaitAck(); // 等待从设备应答
I2CSendByte(dat); // 发送要写入的数据
I2CWaitAck(); // 等待从设备应答
I2CStop(); // 发送停止信号,结束传输
/* 注意:实际EEPROM写入需要约5-10ms的存储时间
后续操作建议添加适当延迟或轮询设备就绪状态 */
}
本文由作者按照
CC BY 4.0
进行授权
