 |
Arduino Core for STM32
1.0
|
Go to the documentation of this file.
19 #if defined(STM32F103xB)
22 #define IS_I2C_INSTANCE_ON_APB1(_instance_) ((_instance_) == I2C2)
23 #define IS_I2C_INSTANCE_ON_APB2(_instance_) ((_instance_) == I2C1)
25 #elif defined(STM32F031x6) || defined(STM32F070xB) || defined(STM32F070x6) || defined(STM32F030x6)
29 #define IS_I2C_INSTANCE_ON_APB1(_instance_) ((_instance_) == I2C1)
31 #elif defined(STM32L031xx)
35 #define IS_I2C_INSTANCE_ON_APB2(_instance_) ((_instance_) == I2C1)
37 #elif defined(STM32L432xx)
41 #define IS_I2C_INSTANCE_ON_APB1(_instance_) ((_instance_) == I2C3)
42 #define IS_I2C_INSTANCE_ON_APB2(_instance_) ((_instance_) == I2C1)
45 #error "Definitions for your MCU are not defined."
52 #ifndef I2C_BUFFER_LENGTH
54 #define BUFFER_LENGTH 128
55 #define I2C_BUFFER_LENGTH BUFFER_LENGTH
59 #if defined(HAL_I2C_MODULE_ENABLED) || defined(DOXYGEN_FORCED)
64 #define MAX_NBYTE_SIZE 255U
65 #define RX_BUFF_SIZE 64
66 #define I2C_TIMEOUT_STOPF (25U)
67 #define I2C_TIMEOUT_BUSY (25U)
68 //#define I2C_FLAG_BUSY I2C_ISR_BUSY
70 I2C_HandleTypeDef *hi2c;
73 size_t rxBufferIndex = 0;
74 size_t rxBufferLength = 0;
76 HAL_I2C_ModeTypeDef I2CMode = HAL_I2C_MODE_NONE;
79 uint16_t txAddress = 0;
80 bool isBusReleased =
true;
81 uint8_t transmitting = 0;
82 bool anyByteSent=
false;
84 void (*user_onRequest)(void) = NULL;
85 void (*user_onReceive)(size_t) = NULL;
86 void onRequestService(
void);
87 void onReceiveService(uint8_t*,
size_t);
89 size_t writePriv(uint8_t data);
91 HAL_StatusTypeDef I2C_WaitOnTXISFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout,uint32_t Tickstart);
92 HAL_StatusTypeDef I2C_WaitOnSTOPFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart);
95 void I2C_TransferConfig(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t Size, uint32_t Mode,uint32_t Request);
98 HAL_StatusTypeDef I2C_WaitOnFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Flag, FlagStatus Status, uint32_t Timeout, uint32_t Tickstart);
100 HAL_StatusTypeDef I2C_IsErrorOccurred(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart);
102 HAL_StatusTypeDef I2C_WaitOnRXNEFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart);
104 void I2C_Flush_TXDR(I2C_HandleTypeDef *hi2c);
115 return (hi2c != NULL) && (IS_I2C_ALL_INSTANCE(hi2c->Instance));
119 return hi2c->Mode == HAL_I2C_MODE_MASTER || hi2c->Mode == HAL_I2C_MODE_MEM;
127 return hi2c->ErrorCode;
130 bool begin(uint8_t adress1,uint8_t adress2 = 0);
141 uint8_t
requestFrom(uint8_t address,
size_t size,
bool sendStop);
150 size_t write(uint8_t)
override;
151 size_t write(
const uint8_t *,
size_t)
override;
154 int read(
void)
override;
155 int peek(
void)
override;
159 void onReceive(
void (*
function)(
size_t));
168 #endif // HAL_I2C_MODULE_ENABLED || DOXYGEN_FORCED
169 #endif // HARDWAREI2C_h
void onReceive(void(*function)(int))
Definition: HardwareI2C.cpp:539
void onRequest(void(*)(void))
Definition: HardwareI2C.cpp:547
int available(void) override
Checks how many bytes are available in receiving buffer.
Definition: HardwareI2C.cpp:507
uint8_t endTransmission(void)
Definition: HardwareI2C.cpp:411
#define RX_BUFF_SIZE
Definition: HardwareI2C.h:65
uint32_t errorCode(void)
Definition: HardwareI2C.h:126
void setTimeout(uint32_t timeout_)
Definition: HardwareI2C.h:122
int peek(void) override
Reads one byte from receiving buffer and without removing it from buffer.
Definition: HardwareI2C.cpp:523
This class is for receiving and transmitting data.
Definition: Stream.h:56
bool begin()
Definition: HardwareI2C.cpp:13
uint8_t requestFrom(uint8_t address, size_t size, bool sendStop)
Definition: HardwareI2C.cpp:69
Definition: HardwareI2C.h:61
size_t write(uint8_t) override
Writes one unsigned byte (character).
Definition: HardwareI2C.cpp:469
bool isMaster(void)
Definition: HardwareI2C.h:118
This file contains basic (Arduino like) GPIO manipulation functions, delay, random,...
void setClock(uint32_t)
Definition: HardwareI2C.cpp:59
bool instanceExists(void)
Checks if I2C instance exists.
Definition: HardwareI2C.h:114
uint8_t status()
Definition: HardwareI2C.cpp:50
HardwareI2C(I2C_HandleTypeDef &hi2c_)
Definition: HardwareI2C.h:107
void flush(void)
Definition: HardwareI2C.cpp:533
void setClockStretchLimit(uint32_t)
Definition: HardwareI2C.cpp:64
bool beginTransmission(uint16_t address, uint32_t bytesCountToSend)
Definition: HardwareI2C.cpp:261
int read(void) override
Reads one byte from receiving buffer and removes it from buffer.
Definition: HardwareI2C.cpp:512
bool end()
Definition: HardwareI2C.cpp:41
Base class for character-based streams.