I2C的常用接口——HAL库
发布时间:2026/10/26 18:18:21 锦皓数字建站

HAL_I2C_IsDeviceReady()参数介绍hi2cI2C 句柄指针存放对应 I2C 外设的配置信息DevAddress从机目标地址 注意手册上给的 7 位地址调用这个函数前必须左移 1 位Trials通信重试次数Timeout两次通信的时间间隔实际上这个是能允许的最大时间间隔比如说你填的是5ms但是实际上也就可能2ms作用检测 I2C 总线上指定地址的从机设备是否在线、是否就绪本质就是发从机地址等待从机回复 ACK 应答。怎么确定Trials和Timeout在工程中我们一般不会将它设为0或者MAX_Delay这些比较极端的而是根据数据手册和技术经验来确定所以说手册很重要。当然也可以问问AI。返回值这个大家应该都很熟悉不再解释HAL_I2C_MEM_Read()介绍HAL_I2C_Mem_Read()是 STM32 HAL 库提供的 I2C 存储器读取函数专门用来读取 I2C 类存储芯片如 AT24C02 这类 EEPROM区别于通用 I2C 收发函数。 它会自动完成一套流程发送起始信号 → 发送从机地址 (写方向) → 发送芯片内部存储地址 → 重新发起起始信号 → 发送从机地址 (读方向) → 接收指定长度数据 → 发送停止信号。时序图和我们前面所说的I2C的正常时序不一样多了前面写地址这一部分如下图框住的部分为什么有两个起始地址因为第一次是写操作把字地址写进去。第二次是读操作故需要两个起始位。注意中间是没有STOP的如果STOP了就不是应该完整的时序而是两次请求了和HAL_I2C_Master_Receive()的区别HAL_I2C_Master_Receive()的时序和HAL_I2C_MEM_Read()相比缺少了前面部分只有我下面框住的部分。 明显的少了前面的这些就少了字地址就无法准确地读出我们想要地数据。所以一般来说这个函数用的极少95%以上的情况都是用HAL_I2C_MEM_Read()一般来说这个函数用的极少95%以上的情况都是用HAL_I2C_MEM_Read()参数hi2cI2C 外设句柄指针DevAddressI2C 从机地址7 位地址左移 1 位MemAddressEEPROM 内部要读取的存储地址MemAddSize内部地址的字节宽度一般 AT24C02 填I2C_MEMADD_SIZE_8BITpData接收数据缓冲区指针Size需要读取的字节数量Timeout通信超时时间返回值同上面一样很多HAL库的函数都是这个返回值。HAL_I2C_Mem_Write()介绍STM32 HAL 库 I2C 存储写入函数向 I2C 存储类从机比如 AT24C02指定的内存地址写入一段数据。和普通HAL_I2C_Transmit区别这个函数自带发送从机内部存储地址专门给 EEPROM 这类带地址空间的器件用。参数说明hi2cI2C 句柄如hi2c1DevAddressI2C 从机地址需要左移 1 位MemAddress从芯片内部存储地址AT24C02 的存储地址MemAddSize内部地址字节宽度I2C_MEMADD_SIZE_8BIT/I2C_MEMADD_SIZE_16BITAT24C02 用 8bitpData要写入的数据缓冲区指针Size要写入多少字节Timeout超时时间ms时序图和前面的写操作是差不多的只是少了一个起始位因为都是执行的都是写操作。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。