libxr
Embedded C++ framework for bare-metal, RTOS and Linux
Loading...
Searching...
No Matches
LibXR::STM32I2C Class Reference

STM32 I2C 驱动实现 / STM32 I2C driver implementation. More...

#include <stm32_i2c.hpp>

Inheritance diagram for LibXR::STM32I2C:
[legend]
Collaboration diagram for LibXR::STM32I2C:
[legend]

Classes

struct  HasClockSpeed
 
struct  HasClockSpeed< T, std::void_t< decltype(std::declval< T >() ->Init.ClockSpeed)> >
 
struct  HasTiming
 
struct  HasTiming< T, std::void_t< decltype(std::declval< T >() ->Init.Timing)> >
 

Public Member Functions

 STM32I2C (I2C_HandleTypeDef *hi2c, RawData dma_buff, uint32_t dma_enable_min_size=3)
 构造 I2C 对象 / Construct I2C object
 
ErrorCode Read (uint16_t slave_addr, RawData read_data, ReadOperation &op, bool in_isr) override
 读取 I2C 设备的数据。 Reads data from 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 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.
 
template<typename T >
std::enable_if<!HasClockSpeed< T >::value >::type SetClockSpeed (T &, const Configuration &)
 
template<typename T >
std::enable_if< HasClockSpeed< T >::value >::type SetClockSpeed (T &i2c_handle, const Configuration &config)
 
template<typename T >
std::enable_if< HasTiming< T >::value >::type SetTiming (T &i2c_handle, uint32_t timing)
 
template<typename T >
std::enable_if<!HasTiming< T >::value >::type SetTiming (T &, uint32_t)
 
ErrorCode SetConfig (Configuration config) override
 配置 I2C 设备参数。 Configures the I2C device settings.
 
- Public Member Functions inherited from LibXR::I2C
 I2C ()
 默认构造函数。 Default constructor.
 

Public Attributes

stm32_i2c_id_t id_
 
I2C_HandleTypeDef * i2c_handle_
 
uint32_t dma_enable_min_size_
 
RawData dma_buff_
 
ReadOperation read_op_
 
WriteOperation write_op_
 
RawData read_buff_
 
bool read_ = false
 
bool recovering_ = false
 
AsyncBlockWait block_wait_ {}
 

Static Public Attributes

static STM32I2C * map [STM32_I2C_NUMBER] = {nullptr}
 

Additional Inherited Members

- Public Types inherited from LibXR::I2C
enum class  MemAddrLength : uint8_t { BYTE_8 , BYTE_16 }
 

Detailed Description

STM32 I2C 驱动实现 / STM32 I2C driver implementation.

Definition at line 54 of file stm32_i2c.hpp.

Constructor & Destructor Documentation

◆ STM32I2C()

STM32I2C::STM32I2C ( I2C_HandleTypeDef * hi2c,
RawData dma_buff,
uint32_t dma_enable_min_size = 3 )

构造 I2C 对象 / Construct I2C object

Definition at line 639 of file stm32_i2c.cpp.

641 : I2C(),
642 id_(hi2c == nullptr ? STM32_I2C_ID_ERROR : STM32_I2C_GetID(hi2c->Instance)),
643 i2c_handle_(hi2c),
644 dma_enable_min_size_(dma_enable_min_size),
645 dma_buff_(dma_buff)
646{
647 ASSERT(id_ != STM32_I2C_ID_ERROR);
648 ASSERT(id_ < STM32_I2C_NUMBER);
649 map[id_] = this;
650}
I2C()
默认构造函数。 Default constructor.
Definition i2c.hpp:39

Member Function Documentation

◆ MemRead()

ErrorCode STM32I2C::MemRead ( uint16_t slave_addr,
uint16_t mem_addr,
RawData read_data,
ReadOperation & op,
MemAddrLength mem_addr_size,
bool in_isr )
overridevirtual

从 I2C 设备指定寄存器读取数据。 Reads data from a specific register of an I2C device.

该函数从指定 I2C 从设备的寄存器地址读取数据,并存储到 read_data 中。 This function reads data from the specified register of the I2C slave and stores it in read_data.

Parameters
slave_addr目标 I2C 从设备地址,不带 R/W 位。 Target I2C slave address, no R/W bit included.
mem_addr寄存器地址(通常为 8 位或 16 位)。 Register address (typically 8-bit or 16-bit).
read_data用于存储读取数据的 RawData 对象。 RawData object to store read data.
op异步或同步的读取操作对象。 Read operation object (sync or async).
mem_addr_size寄存器地址长度。 Size of register address in bytes.
in_isr是否在中断中进行操作 / Whether the operation is performed in an ISR.
Returns
返回 ErrorCode,表示是否读取成功。 Returns ErrorCode indicating success or failure.

Implements LibXR::I2C.

Definition at line 774 of file stm32_i2c.cpp.

776{
777 ASSERT(read_data.size_ <= dma_buff_.size_);
778
779 if (i2c_handle_->State != HAL_I2C_STATE_READY)
780 {
781 return ErrorCode::BUSY;
782 }
783
784 read_ = true;
785
786 const uint16_t dev_addr = EncodeHalDevAddress(i2c_handle_, slave_addr);
787
788 if (read_data.size_ > dma_enable_min_size_)
789 {
790 read_op_ = op;
791 read_buff_ = read_data;
792 if (op.type == ReadOperation::OperationType::BLOCK)
793 {
794 // Arm the BLOCK waiter before HAL exposes completion to IRQ context.
795 block_wait_.Start(*op.data.sem_info.sem);
796 }
797 op.MarkAsRunning();
798 const HAL_StatusTypeDef st = HAL_I2C_Mem_Read_DMA(
799 i2c_handle_, dev_addr, mem_addr,
800 mem_addr_size == MemAddrLength::BYTE_8 ? I2C_MEMADD_SIZE_8BIT
801 : I2C_MEMADD_SIZE_16BIT,
802 reinterpret_cast<uint8_t*>(dma_buff_.addr_), read_data.size_);
803 if (st != HAL_OK)
804 {
805 if (op.type == ReadOperation::OperationType::BLOCK)
806 {
807 block_wait_.Cancel();
808 return MapHalStartFailure(i2c_handle_, st);
809 }
810 if (op.type == ReadOperation::OperationType::POLLING)
811 {
812 op.UpdateStatus(in_isr, ErrorCode::BUSY);
813 }
814 return ErrorCode::BUSY;
815 }
816 if (op.type == ReadOperation::OperationType::BLOCK)
817 {
818 return WaitBlockResultAndRecoverTimeout(this, op.data.sem_info.timeout);
819 }
820 return ErrorCode::OK;
821 }
822 else
823 {
824 auto ans =
825 HAL_I2C_Mem_Read(i2c_handle_, dev_addr, mem_addr,
826 mem_addr_size == MemAddrLength::BYTE_8 ? I2C_MEMADD_SIZE_8BIT
827 : I2C_MEMADD_SIZE_16BIT,
828 reinterpret_cast<uint8_t*>(read_data.addr_), read_data.size_,
829 20) == HAL_OK
832
833 if (op.type != ReadOperation::OperationType::BLOCK)
834 {
835 op.UpdateStatus(in_isr, ans);
836 }
837 return ans;
838 }
839}
void Start(Semaphore &sem)
绑定信号量并开始等待 / Bind a semaphore and start waiting.
void Cancel()
清除等待状态,不发送通知 / Clear the wait state without posting.
uint32_t timeout
等待超时值 / Wait timeout.
void UpdateStatus(bool in_isr, Status &&status)
按通知方式报告完成结果 / Report completion using the selected mode.
union LibXR::Operation::@6 data
完成通知对象,由 type 选择有效成员 / Notification target selected by type.
void MarkAsRunning()
标记轮询操作正在执行 / Mark a polling operation as running.
Semaphore * sem
借用的信号量 / Borrowed semaphore.
OperationType type
当前通知方式 / Current notification mode.
size_t size_
数据字节数 / Data size in bytes
void * addr_
数据起始地址 / Data start address
@ BUSY
忙碌 / Busy
@ OK
操作成功 / Operation successful

◆ MemWrite()

ErrorCode STM32I2C::MemWrite ( uint16_t slave_addr,
uint16_t mem_addr,
ConstRawData write_data,
WriteOperation & op,
MemAddrLength mem_addr_size,
bool in_isr )
overridevirtual

向 I2C 设备指定寄存器写入数据。 Writes data to a specific register of an I2C device.

该函数将 write_data 写入指定 I2C 从设备的寄存器地址。 This function writes write_data to the specified register of the I2C slave.

Parameters
slave_addr目标 I2C 从设备地址,不带 R/W 位。 Target I2C slave address, no R/W bit included.
mem_addr寄存器地址(通常为 8 位或 16 位)。 Register address (typically 8-bit or 16-bit).
write_data要写入的数据,ConstRawData 类型。 Data to be written, of type ConstRawData.
op异步或同步的写入操作对象。 Write operation object (sync or async).
mem_addr_size寄存器地址长度。 Size of register address in bytes.
in_isr是否在中断中进行操作 / Whether the operation is performed in an ISR.
Returns
返回 ErrorCode,表示是否写入成功。 Returns ErrorCode indicating success or failure.

Implements LibXR::I2C.

Definition at line 841 of file stm32_i2c.cpp.

844{
845 ASSERT(write_data.size_ <= dma_buff_.size_);
846
847 if (i2c_handle_->State != HAL_I2C_STATE_READY)
848 {
849 return ErrorCode::BUSY;
850 }
851
852 read_ = false;
853
854 const uint16_t dev_addr = EncodeHalDevAddress(i2c_handle_, slave_addr);
855
856 Memory::FastCopy(dma_buff_.addr_, write_data.addr_, write_data.size_);
857
858 if (write_data.size_ > dma_enable_min_size_)
859 {
860 write_op_ = op;
861 if (op.type == WriteOperation::OperationType::BLOCK)
862 {
863 // Arm the BLOCK waiter before HAL exposes completion to IRQ context.
864 block_wait_.Start(*op.data.sem_info.sem);
865 }
866 STM32_CleanDCacheByAddr(dma_buff_.addr_, write_data.size_);
867 op.MarkAsRunning();
868 const HAL_StatusTypeDef st = HAL_I2C_Mem_Write_DMA(
869 i2c_handle_, dev_addr, mem_addr,
870 mem_addr_size == MemAddrLength::BYTE_8 ? I2C_MEMADD_SIZE_8BIT
871 : I2C_MEMADD_SIZE_16BIT,
872 reinterpret_cast<uint8_t*>(dma_buff_.addr_), write_data.size_);
873 if (st != HAL_OK)
874 {
875 if (op.type == WriteOperation::OperationType::BLOCK)
876 {
877 block_wait_.Cancel();
878 return MapHalStartFailure(i2c_handle_, st);
879 }
880 if (op.type == WriteOperation::OperationType::POLLING)
881 {
882 op.UpdateStatus(in_isr, ErrorCode::BUSY);
883 }
884 return ErrorCode::BUSY;
885 }
886 if (op.type == WriteOperation::OperationType::BLOCK)
887 {
888 return WaitBlockResultAndRecoverTimeout(this, op.data.sem_info.timeout);
889 }
890 return ErrorCode::OK;
891 }
892 else
893 {
894 auto ans =
895 HAL_I2C_Mem_Write(i2c_handle_, dev_addr, mem_addr,
896 mem_addr_size == MemAddrLength::BYTE_8 ? I2C_MEMADD_SIZE_8BIT
897 : I2C_MEMADD_SIZE_16BIT,
898 reinterpret_cast<uint8_t*>(dma_buff_.addr_), write_data.size_,
899 20) == HAL_OK
902
903 if (op.type != WriteOperation::OperationType::BLOCK)
904 {
905 op.UpdateStatus(in_isr, ans);
906 }
907 return ans;
908 }
909}
size_t size_
数据字节数 / Data size in bytes
const void * addr_
数据起始地址 / Data start address
static void FastCopy(void *dst, const void *src, size_t size)
快速内存拷贝 / Fast memory copy
void STM32_CleanDCacheByAddr(const void *addr, size_t size)
清理指定内存范围覆盖的 D-Cache cache line Cleans D-Cache lines covering the specified memory range

◆ Read()

ErrorCode STM32I2C::Read ( uint16_t slave_addr,
RawData read_data,
ReadOperation & op,
bool in_isr )
overridevirtual

读取 I2C 设备的数据。 Reads data from an I2C device.

该函数从指定的 I2C 从设备地址读取数据,并存储到 read_data 中。 This function reads data from the specified I2C slave address and stores it in read_data.

Parameters
slave_addr目标 I2C 从设备地址,不带 R/W 位。 Target I2C slave address, no R/W bit included.
read_data存储读取数据的 RawData 对象。 A RawData object to store the read data.
op读取操作对象,包含同步或异步操作模式。 Read operation object containing synchronous or asynchronous operation mode.
in_isr是否在中断中进行操作 / Whether the operation is performed in an ISR.
Returns
返回 ErrorCode,指示操作是否成功。 Returns an ErrorCode indicating whether the operation was successful.

Implements LibXR::I2C.

Definition at line 652 of file stm32_i2c.cpp.

654{
655 if (i2c_handle_->State != HAL_I2C_STATE_READY)
656 {
657 return ErrorCode::BUSY;
658 }
659
660 read_ = true;
661
662 const uint16_t dev_addr = EncodeHalDevAddress(i2c_handle_, slave_addr);
663
664 if (read_data.size_ > dma_enable_min_size_)
665 {
666 read_op_ = op;
667 read_buff_ = read_data;
668 if (op.type == ReadOperation::OperationType::BLOCK)
669 {
670 // Arm the BLOCK waiter before HAL exposes completion to IRQ context.
671 block_wait_.Start(*op.data.sem_info.sem);
672 }
673 op.MarkAsRunning();
674 const HAL_StatusTypeDef st = HAL_I2C_Master_Receive_DMA(
675 i2c_handle_, dev_addr, reinterpret_cast<uint8_t*>(dma_buff_.addr_),
676 read_data.size_);
677 if (st != HAL_OK)
678 {
679 if (op.type == ReadOperation::OperationType::BLOCK)
680 {
681 block_wait_.Cancel();
682 return MapHalStartFailure(i2c_handle_, st);
683 }
684 if (op.type == ReadOperation::OperationType::POLLING)
685 {
686 op.UpdateStatus(in_isr, ErrorCode::BUSY);
687 }
688 return ErrorCode::BUSY;
689 }
690 if (op.type == ReadOperation::OperationType::BLOCK)
691 {
692 return WaitBlockResultAndRecoverTimeout(this, op.data.sem_info.timeout);
693 }
694 return ErrorCode::OK;
695 }
696 else
697 {
698 auto ans = HAL_I2C_Master_Receive(i2c_handle_, dev_addr,
699 reinterpret_cast<uint8_t*>(read_data.addr_),
700 read_data.size_, 20) == HAL_OK
703 // BLOCK 模式下沿用统一状态更新路径。
704 // Reuse the same status update path for BLOCK mode.
705 if (op.type != ReadOperation::OperationType::BLOCK)
706 {
707 op.UpdateStatus(in_isr, ans);
708 }
709 return ans;
710 }
711}

◆ SetClockSpeed() [1/2]

template<typename T >
std::enable_if<!HasClockSpeed< T >::value >::type LibXR::STM32I2C::SetClockSpeed ( T & ,
const Configuration &  )
inline

Definition at line 98 of file stm32_i2c.hpp.

100 {
101 }

◆ SetClockSpeed() [2/2]

template<typename T >
std::enable_if< HasClockSpeed< T >::value >::type LibXR::STM32I2C::SetClockSpeed ( T & i2c_handle,
const Configuration & config )
inline

Definition at line 104 of file stm32_i2c.hpp.

106 {
107 i2c_handle->Init.ClockSpeed = config.clock_speed;
108 }

◆ SetConfig()

ErrorCode STM32I2C::SetConfig ( Configuration config)
overridevirtual

配置 I2C 设备参数。 Configures the I2C device settings.

该函数用于设置 I2C 设备的参数,例如通信速率等。 This function sets the parameters of the I2C device, such as the communication speed.

Parameters
config包含 I2C 设置信息的 Configuration 结构体。 A Configuration structure containing I2C settings.
Returns
返回 ErrorCode,指示配置是否成功。 Returns an ErrorCode indicating whether the configuration was successful.

Implements LibXR::I2C.

Definition at line 911 of file stm32_i2c.cpp.

912{
913 if (i2c_handle_ == nullptr ||
914 STM32_I2C_GetID(i2c_handle_->Instance) == STM32_I2C_ID_ERROR ||
915 config.clock_speed == 0U)
916 {
917 return ErrorCode::ARG_ERR;
918 }
919 const auto is_busy = [this]()
920 {
921 return recovering_ || i2c_handle_->State != HAL_I2C_STATE_READY ||
922 i2c_handle_->Lock == HAL_LOCKED ||
923 __HAL_I2C_GET_FLAG(i2c_handle_, I2C_FLAG_BUSY) != RESET;
924 };
925 uint32_t timing = 0U;
926 const auto old_init = i2c_handle_->Init;
927 const I2CFilterState old_filter_state = CaptureI2CFilterState(i2c_handle_);
928 if constexpr (HasClockSpeed<decltype(i2c_handle_)>::value)
929 {
930 if (config.clock_speed > 400000U)
931 {
933 }
934#if defined(I2C_CCR_CCR) && defined(HAL_RCC_MODULE_ENABLED)
935 const uint32_t pclk = HAL_RCC_GetPCLK1Freq();
936 const uint32_t factor =
937 config.clock_speed <= 100000U
938 ? 2U
939 : (i2c_handle_->Init.DutyCycle == I2C_DUTYCYCLE_16_9 ? 25U : 3U);
940 const uint64_t denominator = uint64_t(config.clock_speed) * factor;
941 if (pclk == 0U || (uint64_t(pclk) + denominator - 1U) / denominator > I2C_CCR_CCR)
942 {
944 }
945#endif
946 }
947 else if constexpr (HasTiming<decltype(i2c_handle_)>::value)
948 {
949 if (!STM32I2CTiming::Compute(GetI2CClock(i2c_handle_->Instance), config.clock_speed,
950 old_filter_state.analog_filter,
951 old_filter_state.digital_filter, timing))
952 {
954 }
955 }
956 else
957 {
959 }
960
961 // Report intrinsic configuration errors before transient controller state.
962 // Calculation can be preempted, so re-check immediately before reset.
963 if (is_busy())
964 {
965 return ErrorCode::BUSY;
966 }
967 if constexpr (HasClockSpeed<decltype(i2c_handle_)>::value)
968 {
969 SetClockSpeed(i2c_handle_, config);
970 }
971 else
972 {
973 SetTiming(i2c_handle_, timing);
974 }
975 if (!ResetI2CPeripheral(i2c_handle_->Instance))
976 {
977 i2c_handle_->Init = old_init;
979 }
980 if (HAL_I2C_Init(i2c_handle_) != HAL_OK)
981 {
982 i2c_handle_->Init = old_init;
983 if (ResetI2CPeripheral(i2c_handle_->Instance) && HAL_I2C_Init(i2c_handle_) == HAL_OK)
984 {
985 RestoreI2CFilterState(i2c_handle_, old_filter_state);
986 }
987 return ErrorCode::INIT_ERR;
988 }
989 RestoreI2CFilterState(i2c_handle_, old_filter_state);
990 return ErrorCode::OK;
991}
@ INIT_ERR
初始化错误 / Initialization error
@ NOT_SUPPORT
不支持 / Not supported
@ ARG_ERR
参数错误 / Argument error

◆ SetTiming() [1/2]

template<typename T >
std::enable_if<!HasTiming< T >::value >::type LibXR::STM32I2C::SetTiming ( T & ,
uint32_t  )
inline

Definition at line 118 of file stm32_i2c.hpp.

119 {
120 }

◆ SetTiming() [2/2]

template<typename T >
std::enable_if< HasTiming< T >::value >::type LibXR::STM32I2C::SetTiming ( T & i2c_handle,
uint32_t timing )
inline

Definition at line 111 of file stm32_i2c.hpp.

113 {
114 i2c_handle->Init.Timing = timing;
115 }

◆ Write()

ErrorCode STM32I2C::Write ( uint16_t slave_addr,
ConstRawData write_data,
WriteOperation & op,
bool in_isr )
overridevirtual

向 I2C 设备写入数据。 Writes data to an I2C device.

该函数将 write_data 写入指定的 I2C 从设备地址。 This function writes write_data to the specified I2C slave address.

Parameters
slave_addr目标 I2C 从设备地址,不带 R/W 位。 Target I2C slave address, no R/W bit included.
write_data需要写入的数据,ConstRawData 类型。 The data to be written, of type ConstRawData.
op写入操作对象,包含同步或异步操作模式。 Write operation object containing synchronous or asynchronous operation mode.
in_isr是否在中断中进行操作 / Whether the operation is performed in an ISR.
Returns
返回 ErrorCode,指示操作是否成功。 Returns an ErrorCode indicating whether the operation was successful.

Implements LibXR::I2C.

Definition at line 713 of file stm32_i2c.cpp.

715{
716 if (i2c_handle_->State != HAL_I2C_STATE_READY)
717 {
718 return ErrorCode::BUSY;
719 }
720
721 read_ = false;
722
723 const uint16_t dev_addr = EncodeHalDevAddress(i2c_handle_, slave_addr);
724
725 Memory::FastCopy(dma_buff_.addr_, write_data.addr_, write_data.size_);
726
727 if (write_data.size_ > dma_enable_min_size_)
728 {
729 write_op_ = op;
730 if (op.type == WriteOperation::OperationType::BLOCK)
731 {
732 // Arm the BLOCK waiter before HAL exposes completion to IRQ context.
733 block_wait_.Start(*op.data.sem_info.sem);
734 }
735 STM32_CleanDCacheByAddr(dma_buff_.addr_, write_data.size_);
736 op.MarkAsRunning();
737 const HAL_StatusTypeDef st = HAL_I2C_Master_Transmit_DMA(
738 i2c_handle_, dev_addr, reinterpret_cast<uint8_t*>(dma_buff_.addr_),
739 write_data.size_);
740 if (st != HAL_OK)
741 {
742 if (op.type == WriteOperation::OperationType::BLOCK)
743 {
744 block_wait_.Cancel();
745 return MapHalStartFailure(i2c_handle_, st);
746 }
747 if (op.type == WriteOperation::OperationType::POLLING)
748 {
749 op.UpdateStatus(in_isr, ErrorCode::BUSY);
750 }
751 return ErrorCode::BUSY;
752 }
753 if (op.type == WriteOperation::OperationType::BLOCK)
754 {
755 return WaitBlockResultAndRecoverTimeout(this, op.data.sem_info.timeout);
756 }
757 return ErrorCode::OK;
758 }
759 else
760 {
761 auto ans = HAL_I2C_Master_Transmit(i2c_handle_, dev_addr,
762 reinterpret_cast<uint8_t*>(dma_buff_.addr_),
763 write_data.size_, 20) == HAL_OK
766 if (op.type != WriteOperation::OperationType::BLOCK)
767 {
768 op.UpdateStatus(in_isr, ans);
769 }
770 return ans;
771 }
772}

Member Data Documentation

◆ block_wait_

AsyncBlockWait LibXR::STM32I2C::block_wait_ {}

Definition at line 136 of file stm32_i2c.hpp.

136{};

◆ dma_buff_

RawData LibXR::STM32I2C::dma_buff_

Definition at line 128 of file stm32_i2c.hpp.

◆ dma_enable_min_size_

uint32_t LibXR::STM32I2C::dma_enable_min_size_

Definition at line 126 of file stm32_i2c.hpp.

◆ i2c_handle_

I2C_HandleTypeDef* LibXR::STM32I2C::i2c_handle_

Definition at line 125 of file stm32_i2c.hpp.

◆ id_

stm32_i2c_id_t LibXR::STM32I2C::id_

Definition at line 124 of file stm32_i2c.hpp.

◆ map

STM32I2C * STM32I2C::map = {nullptr}
static

Definition at line 138 of file stm32_i2c.hpp.

◆ read_

bool LibXR::STM32I2C::read_ = false

Definition at line 134 of file stm32_i2c.hpp.

◆ read_buff_

RawData LibXR::STM32I2C::read_buff_

Definition at line 132 of file stm32_i2c.hpp.

◆ read_op_

ReadOperation LibXR::STM32I2C::read_op_

Definition at line 130 of file stm32_i2c.hpp.

◆ recovering_

bool LibXR::STM32I2C::recovering_ = false

Definition at line 135 of file stm32_i2c.hpp.

◆ write_op_

WriteOperation LibXR::STM32I2C::write_op_

Definition at line 131 of file stm32_i2c.hpp.


The documentation for this class was generated from the following files: