1. 硬件I2C与AT24C02基础认知
第一次接触STM32的硬件I2C时,我和大多数初学者一样充满疑惑——为什么网上流传着"STM32硬件I2C有缺陷"的说法?实测后发现,问题的根源往往在于时序控制不当。以AT24C02这款常见的EEPROM为例,它虽然只有256字节存储空间,但在智能手表、温控器等小型设备中应用广泛,关键在于掌握其"脾气秉性"。
I2C总线就像城市公交系统:SCL时钟线是公交车时刻表,SDA数据线是乘客通道。作为主控的STM32是调度中心,AT24C02则是沿途车站。当我们要往车站(EEPROM)存放物品(数据)时,必须严格遵守发车时间(时序)。硬件I2C的优势在于,HAL库已经帮我们处理了大部分底层信号,就像自动化的公交调度系统。
AT24C02有三个关键特性需要特别注意:
- 页写入限制:每次最多连续写入8字节(相当于公交车载客量限制)
- 写入周期:每次写操作后需要5ms等待时间(类似车站货物装卸时间)
- 地址编排:0xA0是写地址,0xA1是读地址(就像不同的进站和出站口)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. CubeMX工程配置实战
打开CubeMX新建工程时,我建议优先选择HSE外部时钟源,就像给项目找个精准的计时器。配置I2C1时遇到过典型坑点:时钟速度设为100kHz后,某些开发板需要手动调整GPIO模式。
关键配置步骤分解:
- 在Connectivity标签页启用I2C1
- 模式选择"I2C"(注意不是"SMBus")
- 时钟速度保持默认100kHz(AT24C02最高支持400kHz)
- GPIO自动配置为PB6(SCL)/PB7(SDA),检查是否已设为开漏输出
时钟树配置有个实用技巧:先设置HCLK为72MHz,然后回车让软件自动计算分频系数。这样能避免手动计算错误导致I2C时钟偏差。
提示:务必在SYS调试选项里勾选Serial Wire,否则第一次下载后可能无法再次连接调试器。这个坑我踩过三次!
3. HAL库函数深度解析
HAL库提供了两种核心操作函数,就像快递服务的两种配送方式:
c复制// 普通包裹派送(适合简单设备)
HAL_I2C_Master_Transmit(&hi2c1, 0xA0, data, 1, 100);
// 精准快
