334#ifdef HAL_I2C_MODULE_ENABLED
342#define TIMING_CLEAR_MASK (0xF0FFFFFFU)
343#define I2C_TIMEOUT_ADDR (10000U)
344#define I2C_TIMEOUT_BUSY (25U)
345#define I2C_TIMEOUT_DIR (25U)
346#define I2C_TIMEOUT_RXNE (25U)
347#define I2C_TIMEOUT_STOPF (25U)
348#define I2C_TIMEOUT_TC (25U)
349#define I2C_TIMEOUT_TCR (25U)
350#define I2C_TIMEOUT_TXIS (25U)
351#define I2C_TIMEOUT_FLAG (25U)
353#define MAX_NBYTE_SIZE 255U
354#define SLAVE_ADDR_SHIFT 7U
355#define SLAVE_ADDR_MSK 0x06U
358#define I2C_STATE_MSK ((uint32_t)((uint32_t)((uint32_t)HAL_I2C_STATE_BUSY_TX | \
359 (uint32_t)HAL_I2C_STATE_BUSY_RX) & \
360 (uint32_t)(~((uint32_t)HAL_I2C_STATE_READY))))
362#define I2C_STATE_NONE ((uint32_t)(HAL_I2C_MODE_NONE))
364#define I2C_STATE_MASTER_BUSY_TX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_TX & I2C_STATE_MSK) | \
365 (uint32_t)HAL_I2C_MODE_MASTER))
367#define I2C_STATE_MASTER_BUSY_RX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_RX & I2C_STATE_MSK) | \
368 (uint32_t)HAL_I2C_MODE_MASTER))
370#define I2C_STATE_SLAVE_BUSY_TX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_TX & I2C_STATE_MSK) | \
371 (uint32_t)HAL_I2C_MODE_SLAVE))
373#define I2C_STATE_SLAVE_BUSY_RX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_RX & I2C_STATE_MSK) | \
374 (uint32_t)HAL_I2C_MODE_SLAVE))
376#define I2C_STATE_MEM_BUSY_TX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_TX & I2C_STATE_MSK) | \
377 (uint32_t)HAL_I2C_MODE_MEM))
379#define I2C_STATE_MEM_BUSY_RX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_RX & I2C_STATE_MSK) | \
380 (uint32_t)HAL_I2C_MODE_MEM))
385#define I2C_XFER_TX_IT (uint16_t)(0x0001U)
387#define I2C_XFER_RX_IT (uint16_t)(0x0002U)
389#define I2C_XFER_LISTEN_IT (uint16_t)(0x8000U)
392#define I2C_XFER_ERROR_IT (uint16_t)(0x0010U)
394#define I2C_XFER_CPLT_IT (uint16_t)(0x0020U)
395#define I2C_XFER_RELOAD_IT (uint16_t)(0x0040U)
398#define I2C_NO_OPTION_FRAME (0xFFFF0000U)
408#define I2C_GET_DMA_REMAIN_DATA(__HANDLE__) __HAL_DMA_GET_COUNTER(__HANDLE__)
439 uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout,
442 uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout,
461 uint32_t Timeout, uint32_t Tickstart);
482static void I2C_TransferConfig(
I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t Size, uint32_t Mode,
558#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
571 if (hi2c->MspInitCallback ==
NULL)
577 hi2c->MspInitCallback(hi2c);
666#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
667 if (hi2c->MspDeInitCallback ==
NULL)
673 hi2c->MspDeInitCallback(hi2c);
722#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
747 pI2C_CallbackTypeDef pCallback)
751 if (pCallback ==
NULL)
754 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
763 case HAL_I2C_MASTER_TX_COMPLETE_CB_ID :
764 hi2c->MasterTxCpltCallback = pCallback;
767 case HAL_I2C_MASTER_RX_COMPLETE_CB_ID :
768 hi2c->MasterRxCpltCallback = pCallback;
771 case HAL_I2C_SLAVE_TX_COMPLETE_CB_ID :
772 hi2c->SlaveTxCpltCallback = pCallback;
775 case HAL_I2C_SLAVE_RX_COMPLETE_CB_ID :
776 hi2c->SlaveRxCpltCallback = pCallback;
779 case HAL_I2C_LISTEN_COMPLETE_CB_ID :
780 hi2c->ListenCpltCallback = pCallback;
783 case HAL_I2C_MEM_TX_COMPLETE_CB_ID :
784 hi2c->MemTxCpltCallback = pCallback;
787 case HAL_I2C_MEM_RX_COMPLETE_CB_ID :
788 hi2c->MemRxCpltCallback = pCallback;
791 case HAL_I2C_ERROR_CB_ID :
792 hi2c->ErrorCallback = pCallback;
795 case HAL_I2C_ABORT_CB_ID :
796 hi2c->AbortCpltCallback = pCallback;
799 case HAL_I2C_MSPINIT_CB_ID :
800 hi2c->MspInitCallback = pCallback;
803 case HAL_I2C_MSPDEINIT_CB_ID :
804 hi2c->MspDeInitCallback = pCallback;
809 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
820 case HAL_I2C_MSPINIT_CB_ID :
821 hi2c->MspInitCallback = pCallback;
824 case HAL_I2C_MSPDEINIT_CB_ID :
825 hi2c->MspDeInitCallback = pCallback;
830 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
840 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
880 case HAL_I2C_MASTER_TX_COMPLETE_CB_ID :
884 case HAL_I2C_MASTER_RX_COMPLETE_CB_ID :
888 case HAL_I2C_SLAVE_TX_COMPLETE_CB_ID :
892 case HAL_I2C_SLAVE_RX_COMPLETE_CB_ID :
896 case HAL_I2C_LISTEN_COMPLETE_CB_ID :
900 case HAL_I2C_MEM_TX_COMPLETE_CB_ID :
904 case HAL_I2C_MEM_RX_COMPLETE_CB_ID :
908 case HAL_I2C_ERROR_CB_ID :
912 case HAL_I2C_ABORT_CB_ID :
916 case HAL_I2C_MSPINIT_CB_ID :
920 case HAL_I2C_MSPDEINIT_CB_ID :
926 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
937 case HAL_I2C_MSPINIT_CB_ID :
941 case HAL_I2C_MSPDEINIT_CB_ID :
947 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
957 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
978 if (pCallback ==
NULL)
981 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
988 hi2c->AddrCallback = pCallback;
993 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
1020 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
1120 uint16_t Size, uint32_t Timeout)
1172 I2C_TransferConfig(hi2c, DevAddress, (uint8_t)(hi2c->
XferSize + 1U), xfermode,
1179 I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->
XferSize, xfermode,
1186 if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, tickstart) !=
HAL_OK)
1224 if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) !=
HAL_OK)
1261 uint16_t Size, uint32_t Timeout)
1305 if (I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) !=
HAL_OK)
1344 if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) !=
HAL_OK)
1382 uint16_t tmpXferCount;
1387 if ((pData ==
NULL) || (Size == 0U))
1430 I2C_Flush_TXDR(hi2c);
1448 I2C_Flush_TXDR(hi2c);
1464 I2C_Flush_TXDR(hi2c);
1472 if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, tickstart) !=
HAL_OK)
1513 I2C_Flush_TXDR(hi2c);
1519 if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) !=
HAL_OK)
1572 if ((pData ==
NULL) || (Size == 0U))
1618 if (I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) !=
HAL_OK)
1650 if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) !=
HAL_OK)
1718 hi2c->
XferISR = I2C_Master_ISR_IT;
1745 I2C_TransferConfig(hi2c, DevAddress, (uint8_t)(hi2c->
XferSize + 1U), xfermode,
1750 I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->
XferSize, xfermode,
1765 I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT);
1808 hi2c->
XferISR = I2C_Master_ISR_IT;
1836 I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT);
1873 hi2c->
XferISR = I2C_Slave_ISR_IT;
1900 I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT | I2C_XFER_LISTEN_IT);
1937 hi2c->
XferISR = I2C_Slave_ISR_IT;
1950 I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT | I2C_XFER_LISTEN_IT);
1975 uint32_t sizetoxfer = 0U;
1995 hi2c->
XferISR = I2C_Master_ISR_DMA;
2055 if (dmaxferstatus ==
HAL_OK)
2059 I2C_TransferConfig(hi2c, DevAddress, (uint8_t)(hi2c->
XferSize + 1U),
2072 I2C_Enable_IRQ(hi2c, I2C_XFER_ERROR_IT);
2095 hi2c->
XferISR = I2C_Master_ISR_IT;
2099 I2C_TransferConfig(hi2c, DevAddress, (uint8_t)sizetoxfer,
I2C_AUTOEND_MODE,
2112 I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT);
2157 hi2c->
XferISR = I2C_Master_ISR_DMA;
2203 if (dmaxferstatus ==
HAL_OK)
2219 I2C_Enable_IRQ(hi2c, I2C_XFER_ERROR_IT);
2242 hi2c->
XferISR = I2C_Master_ISR_IT;
2259 I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT);
2284 if ((pData ==
NULL) || (Size == 0U))
2301 hi2c->
XferISR = I2C_Slave_ISR_DMA;
2351 if (dmaxferstatus ==
HAL_OK)
2363 I2C_Enable_IRQ(hi2c, I2C_XFER_LISTEN_IT);
2395 I2C_Enable_IRQ(hi2c, I2C_XFER_LISTEN_IT);
2420 if ((pData ==
NULL) || (Size == 0U))
2437 hi2c->
XferISR = I2C_Slave_ISR_DMA;
2470 if (dmaxferstatus ==
HAL_OK)
2482 I2C_Enable_IRQ(hi2c, I2C_XFER_LISTEN_IT);
2524 uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
2533 if ((pData ==
NULL) || (Size == 0U))
2560 if (I2C_RequestMemoryWrite(hi2c, DevAddress, MemAddress, MemAddSize, Timeout, tickstart) !=
HAL_OK)
2582 if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, tickstart) !=
HAL_OK)
2622 if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) !=
HAL_OK)
2661 uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
2670 if ((pData ==
NULL) || (Size == 0U))
2697 if (I2C_RequestMemoryRead(hi2c, DevAddress, MemAddress, MemAddSize, Timeout, tickstart) !=
HAL_OK)
2761 if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) !=
HAL_OK)
2798 uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
2805 if ((pData ==
NULL) || (Size == 0U))
2828 hi2c->
XferISR = I2C_Mem_ISR_IT;
2863 I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT);
2886 uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
2893 if ((pData ==
NULL) || (Size == 0U))
2915 hi2c->
XferISR = I2C_Mem_ISR_IT;
2950 I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT);
2973 uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
2982 if ((pData ==
NULL) || (Size == 0U))
3004 hi2c->
XferISR = I2C_Mem_ISR_DMA;
3066 if (dmaxferstatus ==
HAL_OK)
3081 I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT);
3119 uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
3128 if ((pData ==
NULL) || (Size == 0U))
3150 hi2c->
XferISR = I2C_Mem_ISR_DMA;
3212 if (dmaxferstatus ==
HAL_OK)
3227 I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT);
3268 __IO uint32_t I2C_Trials = 0UL;
3302 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
3371 }
while (I2C_Trials < Trials);
3403 uint16_t Size, uint32_t XferOptions)
3407 uint32_t sizetoxfer = 0U;
3425 hi2c->
XferISR = I2C_Master_ISR_IT;
3465 I2C_ConvertOtherXferOptions(hi2c);
3477 I2C_TransferConfig(hi2c, DevAddress, (uint8_t)sizetoxfer, xfermode, xferrequest);
3481 I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->
XferSize, xfermode, xferrequest);
3494 I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT);
3517 uint16_t Size, uint32_t XferOptions)
3522 uint32_t sizetoxfer = 0U;
3540 hi2c->
XferISR = I2C_Master_ISR_DMA;
3580 I2C_ConvertOtherXferOptions(hi2c);
3622 if (dmaxferstatus ==
HAL_OK)
3627 I2C_TransferConfig(hi2c, DevAddress, (uint8_t)sizetoxfer, xfermode, xferrequest);
3631 I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->
XferSize, xfermode, xferrequest);
3644 I2C_Enable_IRQ(hi2c, I2C_XFER_ERROR_IT);
3667 hi2c->
XferISR = I2C_Master_ISR_IT;
3673 I2C_TransferConfig(hi2c, DevAddress, (uint8_t)sizetoxfer, xfermode, xferrequest);
3677 I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->
XferSize, xfermode, xferrequest);
3690 I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT);
3714 uint16_t Size, uint32_t XferOptions)
3735 hi2c->
XferISR = I2C_Master_ISR_IT;
3760 I2C_ConvertOtherXferOptions(hi2c);
3770 I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->
XferSize, xfermode, xferrequest);
3778 I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT);
3801 uint16_t Size, uint32_t XferOptions)
3823 hi2c->
XferISR = I2C_Master_ISR_DMA;
3848 I2C_ConvertOtherXferOptions(hi2c);
3890 if (dmaxferstatus ==
HAL_OK)
3893 I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->
XferSize, xfermode, xferrequest);
3905 I2C_Enable_IRQ(hi2c, I2C_XFER_ERROR_IT);
3928 hi2c->
XferISR = I2C_Master_ISR_IT;
3945 I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT);
3967 uint32_t XferOptions)
3977 if ((pData ==
NULL) || (Size == 0U))
3984 I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_TX_IT);
3994 I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT);
4029 hi2c->
XferISR = I2C_Slave_ISR_IT;
4046 I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT | I2C_XFER_LISTEN_IT);
4067 uint32_t XferOptions)
4078 if ((pData ==
NULL) || (Size == 0U))
4088 I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_TX_IT);
4095 I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT);
4156 hi2c->
XferISR = I2C_Slave_ISR_DMA;
4189 if (dmaxferstatus ==
HAL_OK)
4230 I2C_Enable_IRQ(hi2c, I2C_XFER_LISTEN_IT);
4251 uint32_t XferOptions)
4261 if ((pData ==
NULL) || (Size == 0U))
4268 I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_RX_IT);
4278 I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT);
4313 hi2c->
XferISR = I2C_Slave_ISR_IT;
4330 I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT | I2C_XFER_LISTEN_IT);
4351 uint32_t XferOptions)
4362 if ((pData ==
NULL) || (Size == 0U))
4369 I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_RX_IT);
4379 I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT);
4440 hi2c->
XferISR = I2C_Slave_ISR_DMA;
4473 if (dmaxferstatus ==
HAL_OK)
4514 I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT | I2C_XFER_LISTEN_IT);
4535 hi2c->
XferISR = I2C_Slave_ISR_IT;
4538 I2C_Enable_IRQ(hi2c, I2C_XFER_LISTEN_IT);
4562 tmp = (uint32_t)(hi2c->
State) & I2C_STATE_MSK;
4569 I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT);
4599 I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT);
4604 I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT);
4625 I2C_Enable_IRQ(hi2c, I2C_XFER_CPLT_IT);
4660 hi2c->
XferISR(hi2c, itflags, itsources);
4712 I2C_ITError(hi2c, tmperror);
4791 UNUSED(TransferDirection);
4955 uint16_t devaddress;
4956 uint32_t tmpITFlags = ITFlags;
4973 I2C_Flush_TXDR(hi2c);
5024 I2C_TransferConfig(hi2c, devaddress, (uint8_t)hi2c->
XferSize,
5029 I2C_TransferConfig(hi2c, devaddress, (uint8_t)hi2c->
XferSize,
5040 I2C_ITMasterSeqCplt(hi2c);
5066 I2C_ITMasterSeqCplt(hi2c);
5086 I2C_ITMasterCplt(hi2c, tmpITFlags);
5107 uint32_t tmpITFlags = ITFlags;
5124 I2C_Flush_TXDR(hi2c);
5193 I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT);
5196 I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT);
5229 I2C_ITMasterCplt(hi2c, tmpITFlags);
5250 uint32_t tmpITFlags = ITFlags;
5260 I2C_ITSlaveCplt(hi2c, tmpITFlags);
5276 I2C_ITListenCplt(hi2c, tmpITFlags);
5284 I2C_Flush_TXDR(hi2c);
5288 I2C_ITSlaveSeqCplt(hi2c);
5328 (tmpoptions != I2C_NO_OPTION_FRAME))
5331 I2C_ITSlaveSeqCplt(hi2c);
5337 I2C_ITAddrCplt(hi2c, tmpITFlags);
5363 I2C_ITSlaveSeqCplt(hi2c);
5389 uint16_t devaddress;
5407 I2C_Enable_IRQ(hi2c, I2C_XFER_CPLT_IT);
5410 I2C_Flush_TXDR(hi2c);
5464 I2C_ITMasterSeqCplt(hi2c);
5490 I2C_ITMasterSeqCplt(hi2c);
5505 I2C_ITMasterCplt(hi2c, ITFlags);
5546 I2C_Enable_IRQ(hi2c, I2C_XFER_CPLT_IT);
5549 I2C_Flush_TXDR(hi2c);
5564 I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT);
5567 I2C_Enable_IRQ(hi2c, I2C_XFER_ERROR_IT);
5609 I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT);
5612 I2C_Enable_IRQ(hi2c, I2C_XFER_ERROR_IT);
5653 I2C_ITMasterCplt(hi2c, ITFlags);
5678 uint32_t treatdmanack = 0U;
5689 I2C_ITSlaveCplt(hi2c, ITFlags);
5706 if (I2C_GET_DMA_REMAIN_DATA(hi2c->
hdmarx) == 0U)
5718 if (I2C_GET_DMA_REMAIN_DATA(hi2c->
hdmatx) == 0U)
5725 if (treatdmanack == 1U)
5732 I2C_ITListenCplt(hi2c, ITFlags);
5740 I2C_Flush_TXDR(hi2c);
5744 I2C_ITSlaveSeqCplt(hi2c);
5762 tmpstate = hi2c->
State;
5793 I2C_ITAddrCplt(hi2c, ITFlags);
5819 uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout,
5825 if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) !=
HAL_OK)
5843 if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) !=
HAL_OK)
5874 uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout,
5880 if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) !=
HAL_OK)
5898 if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) !=
HAL_OK)
5924 uint8_t transferdirection;
5925 uint16_t slaveaddrcode;
5926 uint16_t ownadd1code;
5927 uint16_t ownadd2code;
5943 if ((slaveaddrcode & SLAVE_ADDR_MSK) == ((ownadd1code >> SLAVE_ADDR_SHIFT) & SLAVE_ADDR_MSK))
5945 slaveaddrcode = ownadd1code;
5959#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
5960 hi2c->AddrCallback(hi2c, transferdirection, slaveaddrcode);
5968 slaveaddrcode = ownadd2code;
5971 I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT);
5977#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
5978 hi2c->AddrCallback(hi2c, transferdirection, slaveaddrcode);
5988 I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT);
5994#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
5995 hi2c->AddrCallback(hi2c, transferdirection, slaveaddrcode);
6031 I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT);
6037#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
6038 hi2c->MasterTxCpltCallback(hi2c);
6051 I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT);
6057#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
6058 hi2c->MasterRxCpltCallback(hi2c);
6100 I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT);
6106#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
6107 hi2c->SlaveTxCpltCallback(hi2c);
6120 I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT);
6126#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
6127 hi2c->SlaveRxCpltCallback(hi2c);
6147 uint32_t tmpITFlags = ITFlags;
6148 __IO uint32_t tmpreg;
6156 I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT);
6161 I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT);
6194 I2C_Flush_TXDR(hi2c);
6219#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
6220 hi2c->MemTxCpltCallback(hi2c);
6233#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
6234 hi2c->MasterTxCpltCallback(hi2c);
6254#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
6255 hi2c->MemRxCpltCallback(hi2c);
6268#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
6269 hi2c->MasterRxCpltCallback(hi2c);
6290 uint32_t tmpITFlags = ITFlags;
6300 I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_TX_IT);
6305 I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_RX_IT);
6310 I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_TX_IT | I2C_XFER_RX_IT);
6325 I2C_Flush_TXDR(hi2c);
6393 I2C_ITListenCplt(hi2c, tmpITFlags);
6401 I2C_Flush_TXDR(hi2c);
6405 I2C_ITSlaveSeqCplt(hi2c);
6442 I2C_ITListenCplt(hi2c, tmpITFlags);
6445 else if (hi2c->
XferOptions != I2C_NO_OPTION_FRAME)
6448 I2C_ITSlaveSeqCplt(hi2c);
6458#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
6459 hi2c->ListenCpltCallback(hi2c);
6474#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
6475 hi2c->SlaveRxCpltCallback(hi2c);
6489#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
6490 hi2c->SlaveTxCpltCallback(hi2c);
6532 I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_RX_IT | I2C_XFER_TX_IT);
6541#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
6542 hi2c->ListenCpltCallback(hi2c);
6558 uint32_t tmppreviousstate;
6574 I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT | I2C_XFER_TX_IT);
6578 hi2c->
XferISR = I2C_Slave_ISR_IT;
6583 I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_RX_IT | I2C_XFER_TX_IT);
6586 I2C_Flush_TXDR(hi2c);
6615 if ((hi2c->
hdmatx !=
NULL) && ((tmppreviousstate == I2C_STATE_MASTER_BUSY_TX) || \
6616 (tmppreviousstate == I2C_STATE_SLAVE_BUSY_TX)))
6641 I2C_TreatErrorCallback(hi2c);
6645 else if ((hi2c->
hdmarx !=
NULL) && ((tmppreviousstate == I2C_STATE_MASTER_BUSY_RX) || \
6646 (tmppreviousstate == I2C_STATE_SLAVE_BUSY_RX)))
6671 I2C_TreatErrorCallback(hi2c);
6676 I2C_TreatErrorCallback(hi2c);
6696#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
6697 hi2c->AbortCpltCallback(hi2c);
6710#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
6711 hi2c->ErrorCallback(hi2c);
6756 I2C_Enable_IRQ(hi2c, I2C_XFER_CPLT_IT);
6784 I2C_Enable_IRQ(hi2c, I2C_XFER_RELOAD_IT);
6808 I2C_ITSlaveSeqCplt(hi2c);
6836 I2C_Enable_IRQ(hi2c, I2C_XFER_CPLT_IT);
6864 I2C_Enable_IRQ(hi2c, I2C_XFER_RELOAD_IT);
6881 if ((I2C_GET_DMA_REMAIN_DATA(hi2c->
hdmarx) == 0U) && \
6882 (tmpoptions != I2C_NO_OPTION_FRAME))
6888 I2C_ITSlaveSeqCplt(hi2c);
6906 uint32_t treatdmaerror = 0U;
6912 if (I2C_GET_DMA_REMAIN_DATA(hi2c->
hdmatx) == 0U)
6920 if (I2C_GET_DMA_REMAIN_DATA(hi2c->
hdmarx) == 0U)
6959 I2C_TreatErrorCallback(hi2c);
6975 uint32_t Timeout, uint32_t Tickstart)
6980 if (I2C_IsErrorOccurred(hi2c, Timeout, Tickstart) !=
HAL_OK)
6988 if (((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
7020 if (I2C_IsErrorOccurred(hi2c, Timeout, Tickstart) !=
HAL_OK)
7028 if (((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
7061 if (I2C_IsErrorOccurred(hi2c, Timeout, Tickstart) !=
HAL_OK)
7067 if (((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
7101 if (I2C_IsErrorOccurred(hi2c, Timeout, Tickstart) !=
HAL_OK)
7145 if ((((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) && (status ==
HAL_OK))
7174 uint32_t error_code = 0;
7175 uint32_t tickstart = Tickstart;
7191 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
7211 if ((
HAL_GetTick() - tickstart) > I2C_TIMEOUT_STOPF)
7276 I2C_Flush_TXDR(hi2c);
7311static void I2C_TransferConfig(
I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t Size, uint32_t Mode,
7322 tmp = ((uint32_t)(((uint32_t)DevAddress &
I2C_CR2_SADD) | \
7324 (uint32_t)Mode | (uint32_t)Request) & (~0x80000000U));
7342 uint32_t tmpisr = 0U;
7344 if ((hi2c->
XferISR != I2C_Master_ISR_DMA) && \
7345 (hi2c->
XferISR != I2C_Slave_ISR_DMA) && \
7346 (hi2c->
XferISR != I2C_Mem_ISR_DMA))
7348 if ((InterruptRequest & I2C_XFER_LISTEN_IT) == I2C_XFER_LISTEN_IT)
7354 if ((InterruptRequest & I2C_XFER_TX_IT) == I2C_XFER_TX_IT)
7360 if ((InterruptRequest & I2C_XFER_RX_IT) == I2C_XFER_RX_IT)
7366 if (InterruptRequest == I2C_XFER_ERROR_IT)
7372 if (InterruptRequest == I2C_XFER_CPLT_IT)
7381 if ((InterruptRequest & I2C_XFER_LISTEN_IT) == I2C_XFER_LISTEN_IT)
7387 if ((InterruptRequest & I2C_XFER_TX_IT) == I2C_XFER_TX_IT)
7393 if ((InterruptRequest & I2C_XFER_RX_IT) == I2C_XFER_RX_IT)
7399 if (InterruptRequest == I2C_XFER_ERROR_IT)
7405 if (InterruptRequest == I2C_XFER_CPLT_IT)
7411 if (InterruptRequest == I2C_XFER_RELOAD_IT)
7433 uint32_t tmpisr = 0U;
7435 if ((InterruptRequest & I2C_XFER_TX_IT) == I2C_XFER_TX_IT)
7447 if ((InterruptRequest & I2C_XFER_RX_IT) == I2C_XFER_RX_IT)
7459 if ((InterruptRequest & I2C_XFER_LISTEN_IT) == I2C_XFER_LISTEN_IT)
7465 if (InterruptRequest == I2C_XFER_ERROR_IT)
7471 if (InterruptRequest == I2C_XFER_CPLT_IT)
7477 if (InterruptRequest == I2C_XFER_RELOAD_IT)
#define __IO
Defines 'read / write' permissions.
#define HAL_DMA_ERROR_FE
FIFO error.
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
uint32_t HAL_DMA_GetError(const DMA_HandleTypeDef *hdma)
HAL_DMA_StateTypeDef HAL_DMA_GetState(const DMA_HandleTypeDef *hdma)
struct __DMA_HandleTypeDef DMA_HandleTypeDef
DMA handle Structure definition.
@ HAL_DMA_STATE_READY
DMA initialized and ready for use.
#define CLEAR_BIT(REG, BIT)
#define SET_BIT(REG, BIT)
#define MODIFY_REG(REG, CLEARMASK, SETMASK)
#define IS_I2C_ALL_INSTANCE(INSTANCE)
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
@ HAL_I2C_MODE_MASTER
I2C communication is in Master Mode.
@ HAL_I2C_MODE_MEM
I2C communication is in Memory Mode.
@ HAL_I2C_MODE_SLAVE
I2C communication is in Slave Mode.
@ HAL_I2C_MODE_NONE
No I2C communication on going.
@ HAL_I2C_STATE_BUSY
An internal process is ongoing.
@ HAL_I2C_STATE_LISTEN
Address Listen Mode is ongoing.
@ HAL_I2C_STATE_BUSY_TX_LISTEN
Address Listen Mode and Data Transmission process is ongoing.
@ HAL_I2C_STATE_ABORT
Abort user request ongoing.
@ HAL_I2C_STATE_BUSY_RX
Data Reception process is ongoing.
@ HAL_I2C_STATE_BUSY_RX_LISTEN
Address Listen Mode and Data Reception process is ongoing.
@ HAL_I2C_STATE_RESET
Peripheral is not yet Initialized.
@ HAL_I2C_STATE_BUSY_TX
Data Transmission process is ongoing.
@ HAL_I2C_STATE_READY
Peripheral Initialized and ready for use.
#define I2C_ADDRESSINGMODE_10BIT
#define I2C_ADDRESSINGMODE_7BIT
#define I2C_DUALADDRESS_ENABLE
#define HAL_I2C_ERROR_ARLO
ARLO error.
#define HAL_I2C_ERROR_NONE
No error.
#define HAL_I2C_ERROR_OVR
OVR error.
#define HAL_I2C_ERROR_SIZE
Size Management error.
#define HAL_I2C_ERROR_BERR
BERR error.
#define HAL_I2C_ERROR_INVALID_PARAM
Invalid Parameters error.
#define HAL_I2C_ERROR_DMA_PARAM
DMA Parameter Error.
#define HAL_I2C_ERROR_AF
ACKF error.
#define HAL_I2C_ERROR_DMA
DMA transfer error.
#define HAL_I2C_ERROR_TIMEOUT
Timeout error.
void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c)
I2C MSP De-Initialization This function freeze the hardware resources used in this example.
HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c)
HAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c)
void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c)
I2C MSP Initialization This function configures the hardware resources used in this example.
HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)
HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)
HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size)
HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)
HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size)
HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)
HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size)
HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress)
HAL_StatusTypeDef HAL_I2C_EnableListen_IT(I2C_HandleTypeDef *hi2c)
HAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size)
HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, uint32_t Timeout)
HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
HAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c)
HAL_I2C_ModeTypeDef HAL_I2C_GetMode(const I2C_HandleTypeDef *hi2c)
uint32_t HAL_I2C_GetError(const I2C_HandleTypeDef *hi2c)
HAL_I2C_StateTypeDef HAL_I2C_GetState(const I2C_HandleTypeDef *hi2c)
#define __HAL_I2C_DISABLE_IT(__HANDLE__, __INTERRUPT__)
Disable the specified I2C interrupt.
#define __HAL_I2C_DISABLE(__HANDLE__)
Disable the specified I2C peripheral.
#define __HAL_I2C_CLEAR_FLAG(__HANDLE__, __FLAG__)
Clear the I2C pending flags which are cleared by writing 1 in a specific bit.
#define __HAL_I2C_ENABLE_IT(__HANDLE__, __INTERRUPT__)
Enable the specified I2C interrupt.
#define __HAL_I2C_ENABLE(__HANDLE__)
Enable the specified I2C peripheral.
#define __HAL_I2C_GET_FLAG(__HANDLE__, __FLAG__)
void HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c)
void HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c)
void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode)
void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c)
void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c)
void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c)
void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c)
void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c)
void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c)
void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c)
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c)
void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c)
#define I2C_MEMADD_SIZE_8BIT
#define I2C_NOSTRETCH_ENABLE
#define IS_TRANSFER_REQUEST(REQUEST)
#define I2C_GET_DIR(__HANDLE__)
#define IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(REQUEST)
#define IS_I2C_ADDRESSING_MODE(MODE)
#define I2C_GET_STOP_MODE(__HANDLE__)
#define I2C_MEM_ADD_MSB(__ADDRESS__)
#define I2C_GET_ADDR_MATCH(__HANDLE__)
#define I2C_CHECK_FLAG(__ISR__, __FLAG__)
#define IS_I2C_GENERAL_CALL(CALL)
#define IS_I2C_OWN_ADDRESS2_MASK(MASK)
#define I2C_GENERATE_START(__ADDMODE__, __ADDRESS__)
#define IS_I2C_OWN_ADDRESS2(ADDRESS2)
#define I2C_RESET_CR2(__HANDLE__)
#define IS_I2C_TRANSFER_OPTIONS_REQUEST(REQUEST)
#define I2C_MEM_ADD_LSB(__ADDRESS__)
#define I2C_GET_OWN_ADDRESS1(__HANDLE__)
#define I2C_CHECK_IT_SOURCE(__CR1__, __IT__)
#define IS_I2C_MEMADD_SIZE(SIZE)
#define I2C_GET_OWN_ADDRESS2(__HANDLE__)
#define IS_I2C_OWN_ADDRESS1(ADDRESS1)
#define IS_I2C_DUAL_ADDRESS(ADDRESS)
#define IS_I2C_NO_STRETCH(STRETCH)
#define IS_TRANSFER_MODE(MODE)
#define I2C_GENERATE_START_READ
#define I2C_GENERATE_START_WRITE
#define I2C_GENERATE_STOP
#define I2C_DIRECTION_TRANSMIT
#define I2C_DIRECTION_RECEIVE
#define I2C_OTHER_AND_LAST_FRAME
#define I2C_FIRST_AND_LAST_FRAME
struct __I2C_HandleTypeDef I2C_HandleTypeDef
#define I2C_CR2_RD_WRN_Pos
#define I2C_CR2_SADD
Slave address (master mode).
#define I2C_CR1_TXDMAEN
DMA transmission requests enable.
#define I2C_CR2_RELOAD
NBYTES reload mode.
#define I2C_CR2_NBYTES
Number of bytes.
#define I2C_CR2_RD_WRN
Transfer direction (master mode).
#define I2C_CR2_STOP
STOP generation (master mode).
#define I2C_CR2_NBYTES_Pos
#define I2C_CR2_ADD10
10-bit addressing mode (master mode)
#define I2C_CR2_START
START generation.
#define I2C_OAR1_OA1MODE
Own address 1 10-bit mode.
#define I2C_CR1_RXDMAEN
DMA reception requests enable.
#define I2C_CR2_NACK
NACK generation (slave mode).
#define I2C_OAR1_OA1EN
Own address 1 enable.
#define I2C_CR2_AUTOEND
Automatic end mode (master mode).
@ error
throw a parse_error exception in case of a tag
This file contains all the functions prototypes for the HAL module driver.
#define assert_param(expr)
Uncomment the line below to expanse the "assert_param" macro in the HAL drivers code.
#define HAL_IS_BIT_SET(REG, BIT)
HAL_StatusTypeDef
HAL Status structures definition.
#define __HAL_UNLOCK(__HANDLE__)
#define __HAL_LOCK(__HANDLE__)
uint32_t GeneralCallMode
Specifies if general call mode is selected.
uint32_t NoStretchMode
Specifies if nostretch mode is selected.
uint32_t OwnAddress2Masks
Specifies the acknowledge mask address second device own address if dual addressing mode is selected.
uint32_t AddressingMode
Specifies if 7-bit or 10-bit addressing mode is selected.
uint32_t OwnAddress2
Specifies the second device own address if dual addressing mode is selected This parameter can be a 7...
uint32_t Timing
Specifies the I2C_TIMINGR_register value.
uint32_t OwnAddress1
Specifies the first device own address.
uint32_t DualAddressMode
Specifies if dual addressing mode is selected.
__IO uint32_t ISR
I2C Interrupt and status register, Address offset: 0x18.
__IO uint32_t CR2
I2C Control register 2, Address offset: 0x04.
__IO uint32_t RXDR
I2C Receive data register, Address offset: 0x24.
__IO uint32_t OAR2
I2C Own address 2 register, Address offset: 0x0C.
__IO uint32_t CR1
I2C Control register 1, Address offset: 0x00.
__IO uint32_t TIMINGR
I2C Timing register, Address offset: 0x10.
__IO uint32_t TXDR
I2C Transmit data register, Address offset: 0x28.
__IO uint32_t OAR1
I2C Own address 1 register, Address offset: 0x08.
void(* XferAbortCallback)(struct __DMA_HandleTypeDef *hdma)
DMA transfer Abort callback.
void(* XferCpltCallback)(struct __DMA_HandleTypeDef *hdma)
DMA transfer complete callback.
void(* XferErrorCallback)(struct __DMA_HandleTypeDef *hdma)
DMA transfer error callback.
void(* XferHalfCpltCallback)(struct __DMA_HandleTypeDef *hdma)
DMA Half transfer complete callback.
__IO uint32_t PreviousState
I2C communication Previous state.
I2C_TypeDef * Instance
I2C registers base address.
uint16_t XferSize
I2C transfer size.
HAL_StatusTypeDef(* XferISR)(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources)
I2C transfer IRQ handler function pointer.
__IO uint16_t XferCount
I2C transfer counter.
__IO HAL_I2C_StateTypeDef State
I2C communication state.
__IO uint32_t Memaddress
I2C Target memory address.
DMA_HandleTypeDef * hdmarx
I2C Rx DMA handle parameters.
__IO uint32_t XferOptions
I2C sequantial transfer options, this parameter can be a value of I2C Sequential Transfer Options.
__IO uint32_t Devaddress
I2C Target device address.
__IO uint32_t ErrorCode
I2C Error code.
I2C_InitTypeDef Init
I2C communication parameters.
HAL_LockTypeDef Lock
I2C locking object.
__IO HAL_I2C_ModeTypeDef Mode
I2C communication mode.
__IO uint32_t AddrEventCount
I2C Address Event counter.
DMA_HandleTypeDef * hdmatx
I2C Tx DMA handle parameters.
uint8_t * pBuffPtr
Pointer to I2C transfer buffer.