File indexing completed on 2025-05-11 08:23:35
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #ifndef STM32H7xx_HAL_I2C_H
0021 #define STM32H7xx_HAL_I2C_H
0022
0023 #ifdef __cplusplus
0024 extern "C" {
0025 #endif
0026
0027
0028 #include "stm32h7xx_hal_def.h"
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049 typedef struct
0050 {
0051 uint32_t Timing;
0052
0053
0054
0055 uint32_t OwnAddress1;
0056
0057
0058 uint32_t AddressingMode;
0059
0060
0061 uint32_t DualAddressMode;
0062
0063
0064 uint32_t OwnAddress2;
0065
0066
0067 uint32_t OwnAddress2Masks;
0068
0069
0070
0071 uint32_t GeneralCallMode;
0072
0073
0074 uint32_t NoStretchMode;
0075
0076
0077 } I2C_InitTypeDef;
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111 typedef enum
0112 {
0113 HAL_I2C_STATE_RESET = 0x00U,
0114 HAL_I2C_STATE_READY = 0x20U,
0115 HAL_I2C_STATE_BUSY = 0x24U,
0116 HAL_I2C_STATE_BUSY_TX = 0x21U,
0117 HAL_I2C_STATE_BUSY_RX = 0x22U,
0118 HAL_I2C_STATE_LISTEN = 0x28U,
0119 HAL_I2C_STATE_BUSY_TX_LISTEN = 0x29U,
0120
0121 HAL_I2C_STATE_BUSY_RX_LISTEN = 0x2AU,
0122
0123 HAL_I2C_STATE_ABORT = 0x60U,
0124
0125 } HAL_I2C_StateTypeDef;
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150 typedef enum
0151 {
0152 HAL_I2C_MODE_NONE = 0x00U,
0153 HAL_I2C_MODE_MASTER = 0x10U,
0154 HAL_I2C_MODE_SLAVE = 0x20U,
0155 HAL_I2C_MODE_MEM = 0x40U
0156
0157 } HAL_I2C_ModeTypeDef;
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168 #define HAL_I2C_ERROR_NONE (0x00000000U)
0169 #define HAL_I2C_ERROR_BERR (0x00000001U)
0170 #define HAL_I2C_ERROR_ARLO (0x00000002U)
0171 #define HAL_I2C_ERROR_AF (0x00000004U)
0172 #define HAL_I2C_ERROR_OVR (0x00000008U)
0173 #define HAL_I2C_ERROR_DMA (0x00000010U)
0174 #define HAL_I2C_ERROR_TIMEOUT (0x00000020U)
0175 #define HAL_I2C_ERROR_SIZE (0x00000040U)
0176 #define HAL_I2C_ERROR_DMA_PARAM (0x00000080U)
0177 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
0178 #define HAL_I2C_ERROR_INVALID_CALLBACK (0x00000100U)
0179 #endif
0180 #define HAL_I2C_ERROR_INVALID_PARAM (0x00000200U)
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190 typedef struct __I2C_HandleTypeDef
0191 {
0192 I2C_TypeDef *Instance;
0193
0194 I2C_InitTypeDef Init;
0195
0196 uint8_t *pBuffPtr;
0197
0198 uint16_t XferSize;
0199
0200 __IO uint16_t XferCount;
0201
0202 __IO uint32_t XferOptions;
0203
0204
0205 __IO uint32_t PreviousState;
0206
0207 HAL_StatusTypeDef(*XferISR)(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources);
0208
0209
0210 DMA_HandleTypeDef *hdmatx;
0211
0212 DMA_HandleTypeDef *hdmarx;
0213
0214
0215 HAL_LockTypeDef Lock;
0216
0217 __IO HAL_I2C_StateTypeDef State;
0218
0219 __IO HAL_I2C_ModeTypeDef Mode;
0220
0221 __IO uint32_t ErrorCode;
0222
0223 __IO uint32_t AddrEventCount;
0224
0225 __IO uint32_t Devaddress;
0226
0227 __IO uint32_t Memaddress;
0228
0229 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
0230 void (* MasterTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c);
0231
0232 void (* MasterRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c);
0233
0234 void (* SlaveTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c);
0235
0236 void (* SlaveRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c);
0237
0238 void (* ListenCpltCallback)(struct __I2C_HandleTypeDef *hi2c);
0239
0240 void (* MemTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c);
0241
0242 void (* MemRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c);
0243
0244 void (* ErrorCallback)(struct __I2C_HandleTypeDef *hi2c);
0245
0246 void (* AbortCpltCallback)(struct __I2C_HandleTypeDef *hi2c);
0247
0248
0249 void (* AddrCallback)(struct __I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode);
0250
0251
0252 void (* MspInitCallback)(struct __I2C_HandleTypeDef *hi2c);
0253
0254 void (* MspDeInitCallback)(struct __I2C_HandleTypeDef *hi2c);
0255
0256
0257 #endif
0258 } I2C_HandleTypeDef;
0259
0260 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
0261
0262
0263
0264 typedef enum
0265 {
0266 HAL_I2C_MASTER_TX_COMPLETE_CB_ID = 0x00U,
0267 HAL_I2C_MASTER_RX_COMPLETE_CB_ID = 0x01U,
0268 HAL_I2C_SLAVE_TX_COMPLETE_CB_ID = 0x02U,
0269 HAL_I2C_SLAVE_RX_COMPLETE_CB_ID = 0x03U,
0270 HAL_I2C_LISTEN_COMPLETE_CB_ID = 0x04U,
0271 HAL_I2C_MEM_TX_COMPLETE_CB_ID = 0x05U,
0272 HAL_I2C_MEM_RX_COMPLETE_CB_ID = 0x06U,
0273 HAL_I2C_ERROR_CB_ID = 0x07U,
0274 HAL_I2C_ABORT_CB_ID = 0x08U,
0275
0276 HAL_I2C_MSPINIT_CB_ID = 0x09U,
0277 HAL_I2C_MSPDEINIT_CB_ID = 0x0AU
0278
0279 } HAL_I2C_CallbackIDTypeDef;
0280
0281
0282
0283
0284 typedef void (*pI2C_CallbackTypeDef)(I2C_HandleTypeDef *hi2c);
0285
0286 typedef void (*pI2C_AddrCallbackTypeDef)(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection,
0287 uint16_t AddrMatchCode);
0288
0289
0290 #endif
0291
0292
0293
0294
0295
0296
0297
0298
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309 #define I2C_FIRST_FRAME ((uint32_t)I2C_SOFTEND_MODE)
0310 #define I2C_FIRST_AND_NEXT_FRAME ((uint32_t)(I2C_RELOAD_MODE | I2C_SOFTEND_MODE))
0311 #define I2C_NEXT_FRAME ((uint32_t)(I2C_RELOAD_MODE | I2C_SOFTEND_MODE))
0312 #define I2C_FIRST_AND_LAST_FRAME ((uint32_t)I2C_AUTOEND_MODE)
0313 #define I2C_LAST_FRAME ((uint32_t)I2C_AUTOEND_MODE)
0314 #define I2C_LAST_FRAME_NO_STOP ((uint32_t)I2C_SOFTEND_MODE)
0315
0316
0317
0318
0319 #define I2C_OTHER_FRAME (0x000000AAU)
0320 #define I2C_OTHER_AND_LAST_FRAME (0x0000AA00U)
0321
0322
0323
0324
0325
0326
0327
0328
0329 #define I2C_ADDRESSINGMODE_7BIT (0x00000001U)
0330 #define I2C_ADDRESSINGMODE_10BIT (0x00000002U)
0331
0332
0333
0334
0335
0336
0337
0338
0339 #define I2C_DUALADDRESS_DISABLE (0x00000000U)
0340 #define I2C_DUALADDRESS_ENABLE I2C_OAR2_OA2EN
0341
0342
0343
0344
0345
0346
0347
0348
0349 #define I2C_OA2_NOMASK ((uint8_t)0x00U)
0350 #define I2C_OA2_MASK01 ((uint8_t)0x01U)
0351 #define I2C_OA2_MASK02 ((uint8_t)0x02U)
0352 #define I2C_OA2_MASK03 ((uint8_t)0x03U)
0353 #define I2C_OA2_MASK04 ((uint8_t)0x04U)
0354 #define I2C_OA2_MASK05 ((uint8_t)0x05U)
0355 #define I2C_OA2_MASK06 ((uint8_t)0x06U)
0356 #define I2C_OA2_MASK07 ((uint8_t)0x07U)
0357
0358
0359
0360
0361
0362
0363
0364
0365 #define I2C_GENERALCALL_DISABLE (0x00000000U)
0366 #define I2C_GENERALCALL_ENABLE I2C_CR1_GCEN
0367
0368
0369
0370
0371
0372
0373
0374
0375 #define I2C_NOSTRETCH_DISABLE (0x00000000U)
0376 #define I2C_NOSTRETCH_ENABLE I2C_CR1_NOSTRETCH
0377
0378
0379
0380
0381
0382
0383
0384
0385 #define I2C_MEMADD_SIZE_8BIT (0x00000001U)
0386 #define I2C_MEMADD_SIZE_16BIT (0x00000002U)
0387
0388
0389
0390
0391
0392
0393
0394
0395 #define I2C_DIRECTION_TRANSMIT (0x00000000U)
0396 #define I2C_DIRECTION_RECEIVE (0x00000001U)
0397
0398
0399
0400
0401
0402
0403
0404
0405 #define I2C_RELOAD_MODE I2C_CR2_RELOAD
0406 #define I2C_AUTOEND_MODE I2C_CR2_AUTOEND
0407 #define I2C_SOFTEND_MODE (0x00000000U)
0408
0409
0410
0411
0412
0413
0414
0415
0416 #define I2C_NO_STARTSTOP (0x00000000U)
0417 #define I2C_GENERATE_STOP (uint32_t)(0x80000000U | I2C_CR2_STOP)
0418 #define I2C_GENERATE_START_READ (uint32_t)(0x80000000U | I2C_CR2_START | I2C_CR2_RD_WRN)
0419 #define I2C_GENERATE_START_WRITE (uint32_t)(0x80000000U | I2C_CR2_START)
0420
0421
0422
0423
0424
0425
0426
0427
0428
0429
0430
0431 #define I2C_IT_ERRI I2C_CR1_ERRIE
0432 #define I2C_IT_TCI I2C_CR1_TCIE
0433 #define I2C_IT_STOPI I2C_CR1_STOPIE
0434 #define I2C_IT_NACKI I2C_CR1_NACKIE
0435 #define I2C_IT_ADDRI I2C_CR1_ADDRIE
0436 #define I2C_IT_RXI I2C_CR1_RXIE
0437 #define I2C_IT_TXI I2C_CR1_TXIE
0438
0439
0440
0441
0442
0443
0444
0445
0446 #define I2C_FLAG_TXE I2C_ISR_TXE
0447 #define I2C_FLAG_TXIS I2C_ISR_TXIS
0448 #define I2C_FLAG_RXNE I2C_ISR_RXNE
0449 #define I2C_FLAG_ADDR I2C_ISR_ADDR
0450 #define I2C_FLAG_AF I2C_ISR_NACKF
0451 #define I2C_FLAG_STOPF I2C_ISR_STOPF
0452 #define I2C_FLAG_TC I2C_ISR_TC
0453 #define I2C_FLAG_TCR I2C_ISR_TCR
0454 #define I2C_FLAG_BERR I2C_ISR_BERR
0455 #define I2C_FLAG_ARLO I2C_ISR_ARLO
0456 #define I2C_FLAG_OVR I2C_ISR_OVR
0457 #define I2C_FLAG_PECERR I2C_ISR_PECERR
0458 #define I2C_FLAG_TIMEOUT I2C_ISR_TIMEOUT
0459 #define I2C_FLAG_ALERT I2C_ISR_ALERT
0460 #define I2C_FLAG_BUSY I2C_ISR_BUSY
0461 #define I2C_FLAG_DIR I2C_ISR_DIR
0462
0463
0464
0465
0466
0467
0468
0469
0470
0471
0472
0473
0474
0475
0476
0477
0478
0479
0480
0481 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
0482 #define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__) do{ \
0483 (__HANDLE__)->State = HAL_I2C_STATE_RESET; \
0484 (__HANDLE__)->MspInitCallback = NULL; \
0485 (__HANDLE__)->MspDeInitCallback = NULL; \
0486 } while(0)
0487 #else
0488 #define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_I2C_STATE_RESET)
0489 #endif
0490
0491
0492
0493
0494
0495
0496
0497
0498
0499
0500
0501
0502
0503
0504
0505 #define __HAL_I2C_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR1 |= (__INTERRUPT__))
0506
0507
0508
0509
0510
0511
0512
0513
0514
0515
0516
0517
0518
0519
0520
0521 #define __HAL_I2C_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR1 &= (~(__INTERRUPT__)))
0522
0523
0524
0525
0526
0527
0528
0529
0530
0531
0532
0533
0534
0535
0536
0537 #define __HAL_I2C_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR1 & \
0538 (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
0539
0540
0541
0542
0543
0544
0545
0546
0547
0548
0549
0550
0551
0552
0553
0554
0555
0556
0557
0558
0559
0560
0561
0562
0563 #define I2C_FLAG_MASK (0x0001FFFFU)
0564 #define __HAL_I2C_GET_FLAG(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->ISR) & \
0565 (__FLAG__)) == (__FLAG__)) ? SET : RESET)
0566
0567
0568
0569
0570
0571
0572
0573
0574
0575
0576
0577
0578
0579
0580
0581
0582
0583
0584 #define __HAL_I2C_CLEAR_FLAG(__HANDLE__, __FLAG__) (((__FLAG__) == I2C_FLAG_TXE) ? \
0585 ((__HANDLE__)->Instance->ISR |= (__FLAG__)) : \
0586 ((__HANDLE__)->Instance->ICR = (__FLAG__)))
0587
0588
0589
0590
0591
0592 #define __HAL_I2C_ENABLE(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE))
0593
0594
0595
0596
0597
0598 #define __HAL_I2C_DISABLE(__HANDLE__) (CLEAR_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE))
0599
0600
0601
0602
0603
0604 #define __HAL_I2C_GENERATE_NACK(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR2, I2C_CR2_NACK))
0605
0606
0607
0608
0609
0610 #include "stm32h7xx_hal_i2c_ex.h"
0611
0612
0613
0614
0615
0616
0617
0618
0619
0620
0621 HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c);
0622 HAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c);
0623 void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c);
0624 void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c);
0625
0626
0627 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
0628 HAL_StatusTypeDef HAL_I2C_RegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID,
0629 pI2C_CallbackTypeDef pCallback);
0630 HAL_StatusTypeDef HAL_I2C_UnRegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID);
0631
0632 HAL_StatusTypeDef HAL_I2C_RegisterAddrCallback(I2C_HandleTypeDef *hi2c, pI2C_AddrCallbackTypeDef pCallback);
0633 HAL_StatusTypeDef HAL_I2C_UnRegisterAddrCallback(I2C_HandleTypeDef *hi2c);
0634 #endif
0635
0636
0637
0638
0639
0640
0641
0642
0643
0644 HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData,
0645 uint16_t Size, uint32_t Timeout);
0646 HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData,
0647 uint16_t Size, uint32_t Timeout);
0648 HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size,
0649 uint32_t Timeout);
0650 HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size,
0651 uint32_t Timeout);
0652 HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress,
0653 uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
0654 HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress,
0655 uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
0656 HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials,
0657 uint32_t Timeout);
0658
0659
0660 HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData,
0661 uint16_t Size);
0662 HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData,
0663 uint16_t Size);
0664 HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
0665 HAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
0666 HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress,
0667 uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
0668 HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress,
0669 uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
0670
0671 HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData,
0672 uint16_t Size, uint32_t XferOptions);
0673 HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData,
0674 uint16_t Size, uint32_t XferOptions);
0675 HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size,
0676 uint32_t XferOptions);
0677 HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size,
0678 uint32_t XferOptions);
0679 HAL_StatusTypeDef HAL_I2C_EnableListen_IT(I2C_HandleTypeDef *hi2c);
0680 HAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c);
0681 HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress);
0682
0683
0684 HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData,
0685 uint16_t Size);
0686 HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData,
0687 uint16_t Size);
0688 HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
0689 HAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
0690 HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress,
0691 uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
0692 HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress,
0693 uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
0694
0695 HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData,
0696 uint16_t Size, uint32_t XferOptions);
0697 HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData,
0698 uint16_t Size, uint32_t XferOptions);
0699 HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size,
0700 uint32_t XferOptions);
0701 HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size,
0702 uint32_t XferOptions);
0703
0704
0705
0706
0707
0708
0709
0710
0711 void HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c);
0712 void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c);
0713 void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c);
0714 void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c);
0715 void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c);
0716 void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c);
0717 void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode);
0718 void HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c);
0719 void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c);
0720 void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c);
0721 void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c);
0722 void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c);
0723
0724
0725
0726
0727
0728
0729
0730
0731 HAL_I2C_StateTypeDef HAL_I2C_GetState(const I2C_HandleTypeDef *hi2c);
0732 HAL_I2C_ModeTypeDef HAL_I2C_GetMode(const I2C_HandleTypeDef *hi2c);
0733 uint32_t HAL_I2C_GetError(const I2C_HandleTypeDef *hi2c);
0734
0735
0736
0737
0738
0739
0740
0741
0742
0743
0744
0745
0746
0747
0748
0749
0750
0751
0752
0753
0754
0755
0756
0757
0758
0759 #define IS_I2C_ADDRESSING_MODE(MODE) (((MODE) == I2C_ADDRESSINGMODE_7BIT) || \
0760 ((MODE) == I2C_ADDRESSINGMODE_10BIT))
0761
0762 #define IS_I2C_DUAL_ADDRESS(ADDRESS) (((ADDRESS) == I2C_DUALADDRESS_DISABLE) || \
0763 ((ADDRESS) == I2C_DUALADDRESS_ENABLE))
0764
0765 #define IS_I2C_OWN_ADDRESS2_MASK(MASK) (((MASK) == I2C_OA2_NOMASK) || \
0766 ((MASK) == I2C_OA2_MASK01) || \
0767 ((MASK) == I2C_OA2_MASK02) || \
0768 ((MASK) == I2C_OA2_MASK03) || \
0769 ((MASK) == I2C_OA2_MASK04) || \
0770 ((MASK) == I2C_OA2_MASK05) || \
0771 ((MASK) == I2C_OA2_MASK06) || \
0772 ((MASK) == I2C_OA2_MASK07))
0773
0774 #define IS_I2C_GENERAL_CALL(CALL) (((CALL) == I2C_GENERALCALL_DISABLE) || \
0775 ((CALL) == I2C_GENERALCALL_ENABLE))
0776
0777 #define IS_I2C_NO_STRETCH(STRETCH) (((STRETCH) == I2C_NOSTRETCH_DISABLE) || \
0778 ((STRETCH) == I2C_NOSTRETCH_ENABLE))
0779
0780 #define IS_I2C_MEMADD_SIZE(SIZE) (((SIZE) == I2C_MEMADD_SIZE_8BIT) || \
0781 ((SIZE) == I2C_MEMADD_SIZE_16BIT))
0782
0783 #define IS_TRANSFER_MODE(MODE) (((MODE) == I2C_RELOAD_MODE) || \
0784 ((MODE) == I2C_AUTOEND_MODE) || \
0785 ((MODE) == I2C_SOFTEND_MODE))
0786
0787 #define IS_TRANSFER_REQUEST(REQUEST) (((REQUEST) == I2C_GENERATE_STOP) || \
0788 ((REQUEST) == I2C_GENERATE_START_READ) || \
0789 ((REQUEST) == I2C_GENERATE_START_WRITE) || \
0790 ((REQUEST) == I2C_NO_STARTSTOP))
0791
0792 #define IS_I2C_TRANSFER_OPTIONS_REQUEST(REQUEST) (((REQUEST) == I2C_FIRST_FRAME) || \
0793 ((REQUEST) == I2C_FIRST_AND_NEXT_FRAME) || \
0794 ((REQUEST) == I2C_NEXT_FRAME) || \
0795 ((REQUEST) == I2C_FIRST_AND_LAST_FRAME) || \
0796 ((REQUEST) == I2C_LAST_FRAME) || \
0797 ((REQUEST) == I2C_LAST_FRAME_NO_STOP) || \
0798 IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(REQUEST))
0799
0800 #define IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(REQUEST) (((REQUEST) == I2C_OTHER_FRAME) || \
0801 ((REQUEST) == I2C_OTHER_AND_LAST_FRAME))
0802
0803 #define I2C_RESET_CR2(__HANDLE__) ((__HANDLE__)->Instance->CR2 &= \
0804 (uint32_t)~((uint32_t)(I2C_CR2_SADD | I2C_CR2_HEAD10R | \
0805 I2C_CR2_NBYTES | I2C_CR2_RELOAD | \
0806 I2C_CR2_RD_WRN)))
0807
0808 #define I2C_GET_ADDR_MATCH(__HANDLE__) ((uint16_t)(((__HANDLE__)->Instance->ISR & I2C_ISR_ADDCODE) \
0809 >> 16U))
0810 #define I2C_GET_DIR(__HANDLE__) ((uint8_t)(((__HANDLE__)->Instance->ISR & I2C_ISR_DIR) \
0811 >> 16U))
0812 #define I2C_GET_STOP_MODE(__HANDLE__) ((__HANDLE__)->Instance->CR2 & I2C_CR2_AUTOEND)
0813 #define I2C_GET_OWN_ADDRESS1(__HANDLE__) ((uint16_t)((__HANDLE__)->Instance->OAR1 & I2C_OAR1_OA1))
0814 #define I2C_GET_OWN_ADDRESS2(__HANDLE__) ((uint16_t)((__HANDLE__)->Instance->OAR2 & I2C_OAR2_OA2))
0815
0816 #define IS_I2C_OWN_ADDRESS1(ADDRESS1) ((ADDRESS1) <= 0x000003FFU)
0817 #define IS_I2C_OWN_ADDRESS2(ADDRESS2) ((ADDRESS2) <= (uint16_t)0x00FFU)
0818
0819 #define I2C_MEM_ADD_MSB(__ADDRESS__) ((uint8_t)((uint16_t)(((uint16_t)((__ADDRESS__) & \
0820 (uint16_t)(0xFF00U))) >> 8U)))
0821 #define I2C_MEM_ADD_LSB(__ADDRESS__) ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FFU))))
0822
0823 #define I2C_GENERATE_START(__ADDMODE__,__ADDRESS__) (((__ADDMODE__) == I2C_ADDRESSINGMODE_7BIT) ? \
0824 (uint32_t)((((uint32_t)(__ADDRESS__) & (I2C_CR2_SADD)) | \
0825 (I2C_CR2_START) | (I2C_CR2_AUTOEND)) & \
0826 (~I2C_CR2_RD_WRN)) : \
0827 (uint32_t)((((uint32_t)(__ADDRESS__) & (I2C_CR2_SADD)) | \
0828 (I2C_CR2_ADD10) | (I2C_CR2_START) | \
0829 (I2C_CR2_AUTOEND)) & (~I2C_CR2_RD_WRN)))
0830
0831 #define I2C_CHECK_FLAG(__ISR__, __FLAG__) ((((__ISR__) & ((__FLAG__) & I2C_FLAG_MASK)) == \
0832 ((__FLAG__) & I2C_FLAG_MASK)) ? SET : RESET)
0833 #define I2C_CHECK_IT_SOURCE(__CR1__, __IT__) ((((__CR1__) & (__IT__)) == (__IT__)) ? SET : RESET)
0834
0835
0836
0837
0838
0839
0840
0841
0842
0843
0844
0845
0846
0847
0848
0849
0850
0851
0852
0853
0854
0855
0856 #ifdef __cplusplus
0857 }
0858 #endif
0859
0860
0861 #endif