Functions |
void | I2C_DeInit (I2C_TypeDef *I2Cx) |
| Deinitializes the I2Cx peripheral registers to their default reset values.
|
void | I2C_Init (I2C_TypeDef *I2Cx, I2C_InitTypeDef *I2C_InitStruct) |
| Initializes the I2Cx peripheral according to the specified parameters in the I2C_InitStruct.
|
void | I2C_StructInit (I2C_InitTypeDef *I2C_InitStruct) |
| Fills each I2C_InitStruct member with its default value.
|
void | I2C_Cmd (I2C_TypeDef *I2Cx, FunctionalState NewState) |
| Enables or disables the specified I2C peripheral.
|
void | I2C_DMACmd (I2C_TypeDef *I2Cx, FunctionalState NewState) |
| Enables or disables the specified I2C DMA requests.
|
void | I2C_DMALastTransferCmd (I2C_TypeDef *I2Cx, FunctionalState NewState) |
| Specifies if the next DMA transfer will be the last one.
|
void | I2C_GenerateSTART (I2C_TypeDef *I2Cx, FunctionalState NewState) |
| Generates I2Cx communication START condition.
|
void | I2C_GenerateSTOP (I2C_TypeDef *I2Cx, FunctionalState NewState) |
| Generates I2Cx communication STOP condition.
|
void | I2C_AcknowledgeConfig (I2C_TypeDef *I2Cx, FunctionalState NewState) |
| Enables or disables the specified I2C acknowledge feature.
|
void | I2C_OwnAddress2Config (I2C_TypeDef *I2Cx, uint8_t Address) |
| Configures the specified I2C own address2.
|
void | I2C_DualAddressCmd (I2C_TypeDef *I2Cx, FunctionalState NewState) |
| Enables or disables the specified I2C dual addressing mode.
|
void | I2C_GeneralCallCmd (I2C_TypeDef *I2Cx, FunctionalState NewState) |
| Enables or disables the specified I2C general call feature.
|
void | I2C_ITConfig (I2C_TypeDef *I2Cx, uint16_t I2C_IT, FunctionalState NewState) |
| Enables or disables the specified I2C interrupts.
|
void | I2C_SendData (I2C_TypeDef *I2Cx, uint8_t Data) |
| Sends a data byte through the I2Cx peripheral.
|
uint8_t | I2C_ReceiveData (I2C_TypeDef *I2Cx) |
| Returns the most recent received data by the I2Cx peripheral.
|
void | I2C_Send7bitAddress (I2C_TypeDef *I2Cx, uint8_t Address, uint8_t I2C_Direction) |
| Transmits the address byte to select the slave device.
|
uint16_t | I2C_ReadRegister (I2C_TypeDef *I2Cx, uint8_t I2C_Register) |
| Reads the specified I2C register and returns its value.
|
void | I2C_SoftwareResetCmd (I2C_TypeDef *I2Cx, FunctionalState NewState) |
| Enables or disables the specified I2C software reset.
|
void | I2C_NACKPositionConfig (I2C_TypeDef *I2Cx, uint16_t I2C_NACKPosition) |
| Selects the specified I2C NACK position in master receiver mode. This function is useful in I2C Master Receiver mode when the number of data to be received is equal to 2. In this case, this function should be called (with parameter I2C_NACKPosition_Next) before data reception starts,as described in the 2-byte reception procedure recommended in Reference Manual in Section: Master receiver.
|
void | I2C_SMBusAlertConfig (I2C_TypeDef *I2Cx, uint16_t I2C_SMBusAlert) |
| Drives the SMBusAlert pin high or low for the specified I2C.
|
void | I2C_TransmitPEC (I2C_TypeDef *I2Cx, FunctionalState NewState) |
| Enables or disables the specified I2C PEC transfer.
|
void | I2C_PECPositionConfig (I2C_TypeDef *I2Cx, uint16_t I2C_PECPosition) |
| Selects the specified I2C PEC position.
|
void | I2C_CalculatePEC (I2C_TypeDef *I2Cx, FunctionalState NewState) |
| Enables or disables the PEC value calculation of the transferred bytes.
|
uint8_t | I2C_GetPEC (I2C_TypeDef *I2Cx) |
| Returns the PEC value for the specified I2C.
|
void | I2C_ARPCmd (I2C_TypeDef *I2Cx, FunctionalState NewState) |
| Enables or disables the specified I2C ARP.
|
void | I2C_StretchClockCmd (I2C_TypeDef *I2Cx, FunctionalState NewState) |
| Enables or disables the specified I2C Clock stretching.
|
void | I2C_FastModeDutyCycleConfig (I2C_TypeDef *I2Cx, uint16_t I2C_DutyCycle) |
| Selects the specified I2C fast mode duty cycle.
|
ErrorStatus | I2C_CheckEvent (I2C_TypeDef *I2Cx, uint32_t I2C_EVENT) |
| I2C State Monitoring Functions.
|
uint32_t | I2C_GetLastEvent (I2C_TypeDef *I2Cx) |
| Returns the last I2Cx Event.
|
FlagStatus | I2C_GetFlagStatus (I2C_TypeDef *I2Cx, uint32_t I2C_FLAG) |
| Checks whether the specified I2C flag is set or not.
|
void | I2C_ClearFlag (I2C_TypeDef *I2Cx, uint32_t I2C_FLAG) |
| Clears the I2Cx's pending flags.
|
ITStatus | I2C_GetITStatus (I2C_TypeDef *I2Cx, uint32_t I2C_IT) |
| Checks whether the specified I2C interrupt has occurred or not.
|
void | I2C_ClearITPendingBit (I2C_TypeDef *I2Cx, uint32_t I2C_IT) |
| Clears the I2Cx’s interrupt pending bits.
|
I2C State Monitoring Functions.
This I2C driver provides three different ways for I2C state monitoring depending on the application requirements and constraints:
1) Basic state monitoring: Using I2C_CheckEvent() function: It compares the status registers (SR1 and SR2) content to a given event (can be the combination of one or more flags). It returns SUCCESS if the current status includes the given flags and returns ERROR if one or more flags are missing in the current status.
- When to use:
- This function is suitable for most applications as well as for startup activity since the events are fully described in the product reference manual (RM0008).
- It is also suitable for users who need to define their own events.
- Limitations:
- If an error occurs (ie. error flags are set besides to the monitored flags), the I2C_CheckEvent() function may return SUCCESS despite the communication hold or corrupted real state. In this case, it is advised to use error interrupts to monitor the error events and handle them in the interrupt IRQ handler.
- Note:
- For error management, it is advised to use the following functions:
2) Advanced state monitoring: Using the function I2C_GetLastEvent() which returns the image of both status registers in a single word (uint32_t) (Status Register 2 value is shifted left by 16 bits and concatenated to Status Register 1).
- When to use:
- This function is suitable for the same applications above but it allows to overcome the limitations of I2C_GetFlagStatus() function (see below). The returned value could be compared to events already defined in the library (stm32f10x_i2c.h) or to custom values defined by user.
- This function is suitable when multiple flags are monitored at the same time.
- At the opposite of I2C_CheckEvent() function, this function allows user to choose when an event is accepted (when all events flags are set and no other flags are set or just when the needed flags are set like I2C_CheckEvent() function).
- Limitations:
- User may need to define his own events.
- Same remark concerning the error management is applicable for this function if user decides to check only regular communication flags (and ignores error flags).
3) Flag-based state monitoring: Using the function I2C_GetFlagStatus() which simply returns the status of one single flag (ie. I2C_FLAG_RXNE ...).
- When to use:
- This function could be used for specific applications or in debug phase.
- It is suitable when only one flag checking is needed (most I2C events are monitored through multiple flags).
- Limitations:
- When calling this function, the Status register is accessed. Some flags are cleared when the status register is accessed. So checking the status of one Flag, may clear other ones.
- Function may need to be called twice or more in order to monitor one single event.
1) Basic state monitoring
This I2C driver provides three different ways for I2C state monitoring depending on the application requirements and constraints:
1) Basic state monitoring: Using I2C_CheckEvent() function: It compares the status registers (SR1 and SR2) content to a given event (can be the combination of one or more flags). It returns SUCCESS if the current status includes the given flags and returns ERROR if one or more flags are missing in the current status.
- When to use:
- This function is suitable for most applications as well as for startup activity since the events are fully described in the product reference manual (RM0008).
- It is also suitable for users who need to define their own events.
- Limitations:
- If an error occurs (ie. error flags are set besides to the monitored flags), the I2C_CheckEvent() function may return SUCCESS despite the communication hold or corrupted real state. In this case, it is advised to use error interrupts to monitor the error events and handle them in the interrupt IRQ handler.
- Note:
- For error management, it is advised to use the following functions:
2) Advanced state monitoring: Using the function I2C_GetLastEvent() which returns the image of both status registers in a single word (uint32_t) (Status Register 2 value is shifted left by 16 bits and concatenated to Status Register 1).
- When to use:
- This function is suitable for the same applications above but it allows to overcome the mentioned limitation of I2C_GetFlagStatus() function. The returned value could be compared to events already defined in the library (stm32f10x_i2c.h) or to custom values defined by user.
- This function is suitable when multiple flags are monitored at the same time.
- At the opposite of I2C_CheckEvent() function, this function allows user to choose when an event is accepted (when all events flags are set and no other flags are set or just when the needed flags are set like I2C_CheckEvent() function).
- Limitations:
- User may need to define his own events.
- Same remark concerning the error management is applicable for this function if user decides to check only regular communication flags (and ignores error flags).
3) Flag-based state monitoring: Using the function I2C_GetFlagStatus() which simply returns the status of one single flag (ie. I2C_FLAG_RXNE ...).
- When to use:
- This function could be used for specific applications or in debug phase.
- It is suitable when only one flag checking is needed (most I2C events are monitored through multiple flags).
- Limitations:
- When calling this function, the Status register is accessed. Some flags are cleared when the status register is accessed. So checking the status of one Flag, may clear other ones.
- Function may need to be called twice or more in order to monitor one single event.
For detailed description of Events, please refer to section I2C_Events in stm32f10x_i2c.h file.
1) Basic state monitoring Checks whether the last I2Cx Event is equal to the one passed as parameter.
- Parameters:
-
I2Cx,: | where x can be 1 or 2 to select the I2C peripheral. |
I2C_EVENT,: | specifies the event to be checked. This parameter can be one of the following values:
- I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED : EV1
- I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED : EV1
- I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED : EV1
- I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED : EV1
- I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED : EV1
- I2C_EVENT_SLAVE_BYTE_RECEIVED : EV2
- (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_DUALF) : EV2
- (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_GENCALL) : EV2
- I2C_EVENT_SLAVE_BYTE_TRANSMITTED : EV3
- (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_DUALF) : EV3
- (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_GENCALL) : EV3
- I2C_EVENT_SLAVE_ACK_FAILURE : EV3_2
- I2C_EVENT_SLAVE_STOP_DETECTED : EV4
- I2C_EVENT_MASTER_MODE_SELECT : EV5
- I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED : EV6
- I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED : EV6
- I2C_EVENT_MASTER_BYTE_RECEIVED : EV7
- I2C_EVENT_MASTER_BYTE_TRANSMITTING : EV8
- I2C_EVENT_MASTER_BYTE_TRANSMITTED : EV8_2
- I2C_EVENT_MASTER_MODE_ADDRESS10 : EV9
|
- Note:
- : For detailed description of Events, please refer to section I2C_Events in stm32f10x_i2c.h file.
- Return values:
-
An | ErrorStatus enumeration value:
- SUCCESS: Last event is equal to the I2C_EVENT
- ERROR: Last event is different from the I2C_EVENT
|
Definition at line 1030 of file stm32f10x_i2c.c.