diff --git a/common/iic/Base_I2C.c b/common/iic/Base_I2C.c new file mode 100644 index 0000000000000000000000000000000000000000..0f6368678fe65dc053e3a55f8e8e28c7f05910e9 --- /dev/null +++ b/common/iic/Base_I2C.c @@ -0,0 +1,12 @@ +#include "Base_I2C.h" +#include "i2c.h" + +HAL_StatusTypeDef Base_I2C_WriteCmd(uint8_t* hi2cx, uint16_t adr, uint8_t* TxData, uint8_t len, uint16_t timeout) +{ + return HAL_I2C_Master_Transmit((I2C_HandleTypeDef*)hi2cx, adr, (uint8_t*)TxData, len, timeout); +} + +HAL_StatusTypeDef Base_I2C_ReadCmd(uint8_t* hi2cx, uint16_t adr, uint8_t* RxData, uint8_t len, uint16_t timeout) +{ + return HAL_I2C_Master_Receive((I2C_HandleTypeDef*)hi2cx, adr, (uint8_t*)RxData, len, timeout); +} diff --git a/common/iic/Base_I2C.h b/common/iic/Base_I2C.h new file mode 100644 index 0000000000000000000000000000000000000000..07c574f9224991e9ff12d953e36557b1f3193437 --- /dev/null +++ b/common/iic/Base_I2C.h @@ -0,0 +1,36 @@ +#ifndef __Base_I2C_H +#define __Base_I2C_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "stm32f1xx_hal.h" + +/** + * @brief 通过 I2C 接口写入命令数据 + * @param hi2cx: 指向 I2C 句柄的指针,用于指定使用的 I2C 总线实例 + * @param adr: 目标设备的 I2C 地址,标识要与之通信的从设备 + * @param TxData: 指向待发送数据的指针,包含了要写入 I2C 设备的命令或数据内容 + * @param len: 要发送数据的长度,即 TxData 中数据的字节数 + * @param timeout: 操作超时时间,若在该时间内操作未完成,则操作失败,单位取决于具体实现 + * @retval HAL_StatusTypeDef: 操作状态,如 HAL_OK 表示成功,其他值表示失败 + */ +HAL_StatusTypeDef Base_I2C_WriteCmd(uint8_t* hi2cx, uint16_t adr, uint8_t* TxData, uint8_t len, uint16_t timeout); + +/** + * @brief 通过 I2C 接口读取命令响应数据 + * @param hi2cx: 指向 I2C 句柄的指针,用于指定使用的 I2C 总线实例 + * @param adr: 目标设备的 I2C 地址,标识要与之通信的从设备 + * @param RxData: 指向用于存储接收到数据的缓冲区的指针,读取到的数据会存于此 + * @param len: 要读取数据的长度,即期望从 I2C 设备读取的字节数 + * @param timeout: 操作超时时间,若在该时间内操作未完成,则操作失败,单位取决于具体实现 + * @retval HAL_StatusTypeDef: 操作状态,如 HAL_OK 表示成功,其他值表示失败 + */ +HAL_StatusTypeDef Base_I2C_ReadCmd(uint8_t* hi2cx, uint16_t adr, uint8_t* RxData, uint8_t len, uint16_t timeout); + +#ifdef __cplusplus +} +#endif + +#endif /* __Base_I2C_H */