8#ifdef HAL_I2C_MODULE_ENABLED
15#include "libxr_assert.hpp"
47stm32_i2c_id_t STM32_I2C_GetID(I2C_TypeDef* hi2c);
60 STM32I2C(I2C_HandleTypeDef* hi2c,
RawData dma_buff, uint32_t dma_enable_min_size = 3);
63 bool in_isr)
override;
66 bool in_isr)
override;
69 ReadOperation& op, MemAddrLength mem_addr_size,
bool in_isr)
override;
73 bool in_isr)
override;
75 template <
typename,
typename =
void>
81 struct HasTiming<T, std::void_t<decltype(std::declval<T>()->Init.Timing)>>
86 template <
typename,
typename =
void>
92 struct HasClockSpeed<T, std::void_t<decltype(std::declval<T>()->Init.ClockSpeed)>>
98 typename std::enable_if<!HasClockSpeed<T>::value>::type SetClockSpeed(
103 template <
typename T>
104 typename std::enable_if<HasClockSpeed<T>::value>::type SetClockSpeed(
105 T& i2c_handle,
const Configuration& config)
107 i2c_handle->Init.ClockSpeed = config.clock_speed;
110 template <
typename T>
111 typename std::enable_if<HasTiming<T>::value>::type SetTiming(T& i2c_handle,
114 i2c_handle->Init.Timing = timing;
117 template <
typename T>
118 typename std::enable_if<!HasTiming<T>::value>::type SetTiming(T&, uint32_t)
125 I2C_HandleTypeDef* i2c_handle_;
126 uint32_t dma_enable_min_size_;
135 bool recovering_ =
false;
136 AsyncBlockWait block_wait_{};
138 static STM32I2C* map[STM32_I2C_NUMBER];
只读原始数据视图 / Immutable raw data view
I2C(Inter-Integrated Circuit)接口类。 I2C (Inter-Integrated Circuit) interface class.
可写原始数据视图 / Mutable raw data view
STM32 I2C 驱动实现 / STM32 I2C driver implementation.
ErrorCode SetConfig(Configuration config) override
配置 I2C 设备参数。 Configures the I2C device settings.
ErrorCode MemRead(uint16_t slave_addr, uint16_t mem_addr, RawData read_data, ReadOperation &op, MemAddrLength mem_addr_size, bool in_isr) override
从 I2C 设备指定寄存器读取数据。 Reads data from a specific register of an I2C device.
ErrorCode MemWrite(uint16_t slave_addr, uint16_t mem_addr, ConstRawData write_data, WriteOperation &op, MemAddrLength mem_addr_size, bool in_isr) override
向 I2C 设备指定寄存器写入数据。 Writes data to a specific register of an I2C device.
ErrorCode Write(uint16_t slave_addr, ConstRawData write_data, WriteOperation &op, bool in_isr) override
向 I2C 设备写入数据。 Writes data to an I2C device.
ErrorCode Read(uint16_t slave_addr, RawData read_data, ReadOperation &op, bool in_isr) override
读取 I2C 设备的数据。 Reads data from an I2C device.
STM32I2C(I2C_HandleTypeDef *hi2c, RawData dma_buff, uint32_t dma_enable_min_size=3)
构造 I2C 对象 / Construct I2C object
LibXR 命名空间 / LibXR namespace.
ErrorCode
定义错误码枚举 / Defines an enumeration for error codes
Operation< ErrorCode > ReadOperation
读操作的完成通知描述符 / Read completion descriptor.
Operation< ErrorCode > WriteOperation
写操作的完成通知描述符 / Write completion descriptor.
I2C 设备的配置信息结构体。 Configuration structure for an I2C device.