]> git.donarmstrong.com Git - qmk_firmware.git/blob - tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/cmsis/TARGET_STM/TARGET_STM32F4/stm32f4xx_hal_i2c.h
Merge commit '1fe4406f374291ab2e86e95a97341fd9c475fcb8'
[qmk_firmware.git] / tmk_core / tool / mbed / mbed-sdk / libraries / mbed / targets / cmsis / TARGET_STM / TARGET_STM32F4 / stm32f4xx_hal_i2c.h
1 /**
2   ******************************************************************************
3   * @file    stm32f4xx_hal_i2c.h
4   * @author  MCD Application Team
5   * @version V1.1.0
6   * @date    19-June-2014
7   * @brief   Header file of I2C HAL module.
8   ******************************************************************************
9   * @attention
10   *
11   * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
12   *
13   * Redistribution and use in source and binary forms, with or without modification,
14   * are permitted provided that the following conditions are met:
15   *   1. Redistributions of source code must retain the above copyright notice,
16   *      this list of conditions and the following disclaimer.
17   *   2. Redistributions in binary form must reproduce the above copyright notice,
18   *      this list of conditions and the following disclaimer in the documentation
19   *      and/or other materials provided with the distribution.
20   *   3. Neither the name of STMicroelectronics nor the names of its contributors
21   *      may be used to endorse or promote products derived from this software
22   *      without specific prior written permission.
23   *
24   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
28   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
32   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34   *
35   ******************************************************************************
36   */
37
38 /* Define to prevent recursive inclusion -------------------------------------*/
39 #ifndef __STM32F4xx_HAL_I2C_H
40 #define __STM32F4xx_HAL_I2C_H
41
42 #ifdef __cplusplus
43  extern "C" {
44 #endif
45
46 /* Includes ------------------------------------------------------------------*/
47 #include "stm32f4xx_hal_def.h"
48
49 /** @addtogroup STM32F4xx_HAL_Driver
50   * @{
51   */
52
53 /** @addtogroup I2C
54   * @{
55   */
56
57 /* Exported types ------------------------------------------------------------*/
58
59 /**
60   * @brief  I2C Configuration Structure definition
61   */
62 typedef struct
63 {
64   uint32_t ClockSpeed;       /*!< Specifies the clock frequency.
65                                   This parameter must be set to a value lower than 400kHz */
66
67   uint32_t DutyCycle;        /*!< Specifies the I2C fast mode duty cycle.
68                                   This parameter can be a value of @ref I2C_duty_cycle_in_fast_mode */
69
70   uint32_t OwnAddress1;      /*!< Specifies the first device own address.
71                                   This parameter can be a 7-bit or 10-bit address. */
72
73   uint32_t AddressingMode;   /*!< Specifies if 7-bit or 10-bit addressing mode is selected.
74                                   This parameter can be a value of @ref I2C_addressing_mode */
75
76   uint32_t DualAddressMode;  /*!< Specifies if dual addressing mode is selected.
77                                   This parameter can be a value of @ref I2C_dual_addressing_mode */
78
79   uint32_t OwnAddress2;      /*!< Specifies the second device own address if dual addressing mode is selected
80                                   This parameter can be a 7-bit address. */
81
82   uint32_t GeneralCallMode;  /*!< Specifies if general call mode is selected.
83                                   This parameter can be a value of @ref I2C_general_call_addressing_mode */
84
85   uint32_t NoStretchMode;    /*!< Specifies if nostretch mode is selected.
86                                   This parameter can be a value of @ref I2C_nostretch_mode */
87
88 }I2C_InitTypeDef;
89
90 /**
91   * @brief  HAL State structures definition
92   */
93 typedef enum
94 {
95   HAL_I2C_STATE_RESET             = 0x00,  /*!< I2C not yet initialized or disabled         */
96   HAL_I2C_STATE_READY             = 0x01,  /*!< I2C initialized and ready for use           */
97   HAL_I2C_STATE_BUSY              = 0x02,  /*!< I2C internal process is ongoing             */
98   HAL_I2C_STATE_BUSY_TX           = 0x12,  /*!< Data Transmission process is ongoing        */
99   HAL_I2C_STATE_BUSY_RX           = 0x22,  /*!< Data Reception process is ongoing           */
100   HAL_I2C_STATE_MEM_BUSY_TX       = 0x32,  /*!< Memory Data Transmission process is ongoing */
101   HAL_I2C_STATE_MEM_BUSY_RX       = 0x42,  /*!< Memory Data Reception process is ongoing    */
102   HAL_I2C_STATE_TIMEOUT           = 0x03,  /*!< I2C timeout state                           */
103   HAL_I2C_STATE_ERROR             = 0x04   /*!< I2C error state                             */
104
105 }HAL_I2C_StateTypeDef;
106
107 /**
108   * @brief  HAL I2C Error Code structure definition
109   */
110 typedef enum
111 {
112   HAL_I2C_ERROR_NONE      = 0x00,    /*!< No error             */
113   HAL_I2C_ERROR_BERR      = 0x01,    /*!< BERR error           */
114   HAL_I2C_ERROR_ARLO      = 0x02,    /*!< ARLO error           */
115   HAL_I2C_ERROR_AF        = 0x04,    /*!< AF error             */
116   HAL_I2C_ERROR_OVR       = 0x08,    /*!< OVR error            */
117   HAL_I2C_ERROR_DMA       = 0x10,    /*!< DMA transfer error   */
118   HAL_I2C_ERROR_TIMEOUT   = 0x20     /*!< Timeout error        */
119
120 }HAL_I2C_ErrorTypeDef;
121
122 /**
123   * @brief  I2C handle Structure definition
124   */
125 typedef struct
126 {
127   I2C_TypeDef                *Instance;  /*!< I2C registers base address     */
128
129   I2C_InitTypeDef            Init;       /*!< I2C communication parameters   */
130
131   uint8_t                    *pBuffPtr;  /*!< Pointer to I2C transfer buffer */
132
133   uint16_t                   XferSize;   /*!< I2C transfer size              */
134
135   __IO uint16_t              XferCount;  /*!< I2C transfer counter           */
136
137   DMA_HandleTypeDef          *hdmatx;    /*!< I2C Tx DMA handle parameters   */
138
139   DMA_HandleTypeDef          *hdmarx;    /*!< I2C Rx DMA handle parameters   */
140
141   HAL_LockTypeDef            Lock;       /*!< I2C locking object             */
142
143   __IO HAL_I2C_StateTypeDef  State;      /*!< I2C communication state        */
144
145   __IO HAL_I2C_ErrorTypeDef  ErrorCode;         /* I2C Error code                 */
146
147 }I2C_HandleTypeDef;
148
149 /* Exported constants --------------------------------------------------------*/
150
151 /** @defgroup I2C_Exported_Constants
152   * @{
153   */
154
155 /** @defgroup I2C_duty_cycle_in_fast_mode
156   * @{
157   */
158 #define I2C_DUTYCYCLE_2                 ((uint32_t)0x00000000)
159 #define I2C_DUTYCYCLE_16_9              I2C_CCR_DUTY
160
161 #define IS_I2C_DUTY_CYCLE(CYCLE) (((CYCLE) == I2C_DUTYCYCLE_2) || \
162                                   ((CYCLE) == I2C_DUTYCYCLE_16_9))
163 /**
164   * @}
165   */
166
167 /** @defgroup I2C_addressing_mode
168   * @{
169   */
170 #define I2C_ADDRESSINGMODE_7BIT         ((uint32_t)0x00004000)
171 #define I2C_ADDRESSINGMODE_10BIT        (I2C_OAR1_ADDMODE | ((uint32_t)0x00004000))
172
173 #define IS_I2C_ADDRESSING_MODE(ADDRESS) (((ADDRESS) == I2C_ADDRESSINGMODE_7BIT) || \
174                                          ((ADDRESS) == I2C_ADDRESSINGMODE_10BIT))
175 /**
176   * @}
177   */
178
179 /** @defgroup I2C_dual_addressing_mode
180   * @{
181   */
182 #define I2C_DUALADDRESS_DISABLED        ((uint32_t)0x00000000)
183 #define I2C_DUALADDRESS_ENABLED         I2C_OAR2_ENDUAL
184
185 #define IS_I2C_DUAL_ADDRESS(ADDRESS) (((ADDRESS) == I2C_DUALADDRESS_DISABLED) || \
186                                       ((ADDRESS) == I2C_DUALADDRESS_ENABLED))
187 /**
188   * @}
189   */
190
191 /** @defgroup I2C_general_call_addressing_mode
192   * @{
193   */
194 #define I2C_GENERALCALL_DISABLED        ((uint32_t)0x00000000)
195 #define I2C_GENERALCALL_ENABLED         I2C_CR1_ENGC
196
197 #define IS_I2C_GENERAL_CALL(CALL) (((CALL) == I2C_GENERALCALL_DISABLED) || \
198                                    ((CALL) == I2C_GENERALCALL_ENABLED))
199 /**
200   * @}
201   */
202
203 /** @defgroup I2C_nostretch_mode
204   * @{
205   */
206 #define I2C_NOSTRETCH_DISABLED          ((uint32_t)0x00000000)
207 #define I2C_NOSTRETCH_ENABLED           I2C_CR1_NOSTRETCH
208
209 #define IS_I2C_NO_STRETCH(STRETCH) (((STRETCH) == I2C_NOSTRETCH_DISABLED) || \
210                                     ((STRETCH) == I2C_NOSTRETCH_ENABLED))
211 /**
212   * @}
213   */
214
215 /** @defgroup I2C_Memory_Address_Size
216   * @{
217   */
218 #define I2C_MEMADD_SIZE_8BIT            ((uint32_t)0x00000001)
219 #define I2C_MEMADD_SIZE_16BIT           ((uint32_t)0x00000010)
220
221 #define IS_I2C_MEMADD_SIZE(SIZE) (((SIZE) == I2C_MEMADD_SIZE_8BIT) || \
222                                   ((SIZE) == I2C_MEMADD_SIZE_16BIT))
223 /**
224   * @}
225   */
226
227 /** @defgroup I2C_Interrupt_configuration_definition
228   * @{
229   */
230 #define I2C_IT_BUF                      I2C_CR2_ITBUFEN
231 #define I2C_IT_EVT                      I2C_CR2_ITEVTEN
232 #define I2C_IT_ERR                      I2C_CR2_ITERREN
233 /**
234   * @}
235   */
236
237 /** @defgroup I2C_Flag_definition
238   * @{
239   */
240 #define I2C_FLAG_SMBALERT               ((uint32_t)0x00018000)
241 #define I2C_FLAG_TIMEOUT                ((uint32_t)0x00014000)
242 #define I2C_FLAG_PECERR                 ((uint32_t)0x00011000)
243 #define I2C_FLAG_OVR                    ((uint32_t)0x00010800)
244 #define I2C_FLAG_AF                     ((uint32_t)0x00010400)
245 #define I2C_FLAG_ARLO                   ((uint32_t)0x00010200)
246 #define I2C_FLAG_BERR                   ((uint32_t)0x00010100)
247 #define I2C_FLAG_TXE                    ((uint32_t)0x00010080)
248 #define I2C_FLAG_RXNE                   ((uint32_t)0x00010040)
249 #define I2C_FLAG_STOPF                  ((uint32_t)0x00010010)
250 #define I2C_FLAG_ADD10                  ((uint32_t)0x00010008)
251 #define I2C_FLAG_BTF                    ((uint32_t)0x00010004)
252 #define I2C_FLAG_ADDR                   ((uint32_t)0x00010002)
253 #define I2C_FLAG_SB                     ((uint32_t)0x00010001)
254 #define I2C_FLAG_DUALF                  ((uint32_t)0x00100080)
255 #define I2C_FLAG_SMBHOST                ((uint32_t)0x00100040)
256 #define I2C_FLAG_SMBDEFAULT             ((uint32_t)0x00100020)
257 #define I2C_FLAG_GENCALL                ((uint32_t)0x00100010)
258 #define I2C_FLAG_TRA                    ((uint32_t)0x00100004)
259 #define I2C_FLAG_BUSY                   ((uint32_t)0x00100002)
260 #define I2C_FLAG_MSL                    ((uint32_t)0x00100001)
261 /**
262   * @}
263   */
264
265 /**
266   * @}
267   */
268
269 /* Exported macro ------------------------------------------------------------*/
270
271 /** @brief Reset I2C handle state
272   * @param  __HANDLE__: specifies the I2C Handle.
273   *         This parameter can be I2C where x: 1, 2, or 3 to select the I2C peripheral.
274   * @retval None
275   */
276 #define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_I2C_STATE_RESET)
277
278 /** @brief  Enable or disable the specified I2C interrupts.
279   * @param  __HANDLE__: specifies the I2C Handle.
280   *         This parameter can be I2C where x: 1, 2, or 3 to select the I2C peripheral.
281   * @param  __INTERRUPT__: specifies the interrupt source to enable or disable.
282   *         This parameter can be one of the following values:
283   *            @arg I2C_IT_BUF: Buffer interrupt enable
284   *            @arg I2C_IT_EVT: Event interrupt enable
285   *            @arg I2C_IT_ERR: Error interrupt enable
286   * @retval None
287   */
288
289 #define __HAL_I2C_ENABLE_IT(__HANDLE__, __INTERRUPT__)   ((__HANDLE__)->Instance->CR2 |= (__INTERRUPT__))
290 #define __HAL_I2C_DISABLE_IT(__HANDLE__, __INTERRUPT__)  ((__HANDLE__)->Instance->CR2 &= (~(__INTERRUPT__)))
291
292 /** @brief  Checks if the specified I2C interrupt source is enabled or disabled.
293   * @param  __HANDLE__: specifies the I2C Handle.
294   *         This parameter can be I2C where x: 1, 2, or 3 to select the I2C peripheral.
295   * @param  __INTERRUPT__: specifies the I2C interrupt source to check.
296   *          This parameter can be one of the following values:
297   *            @arg I2C_IT_BUF: Buffer interrupt enable
298   *            @arg I2C_IT_EVT: Event interrupt enable
299   *            @arg I2C_IT_ERR: Error interrupt enable
300   * @retval The new state of __INTERRUPT__ (TRUE or FALSE).
301   */
302 #define __HAL_I2C_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR2 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
303
304 /** @brief  Checks whether the specified I2C flag is set or not.
305   * @param  __HANDLE__: specifies the I2C Handle.
306   *         This parameter can be I2C where x: 1, 2, or 3 to select the I2C peripheral.
307   * @param  __FLAG__: specifies the flag to check.
308   *         This parameter can be one of the following values:
309   *            @arg I2C_FLAG_SMBALERT: SMBus Alert flag
310   *            @arg I2C_FLAG_TIMEOUT: Timeout or Tlow error flag
311   *            @arg I2C_FLAG_PECERR: PEC error in reception flag
312   *            @arg I2C_FLAG_OVR: Overrun/Underrun flag
313   *            @arg I2C_FLAG_AF: Acknowledge failure flag
314   *            @arg I2C_FLAG_ARLO: Arbitration lost flag
315   *            @arg I2C_FLAG_BERR: Bus error flag
316   *            @arg I2C_FLAG_TXE: Data register empty flag
317   *            @arg I2C_FLAG_RXNE: Data register not empty flag
318   *            @arg I2C_FLAG_STOPF: Stop detection flag
319   *            @arg I2C_FLAG_ADD10: 10-bit header sent flag
320   *            @arg I2C_FLAG_BTF: Byte transfer finished flag
321   *            @arg I2C_FLAG_ADDR: Address sent flag
322   *                                Address matched flag
323   *            @arg I2C_FLAG_SB: Start bit flag
324   *            @arg I2C_FLAG_DUALF: Dual flag
325   *            @arg I2C_FLAG_SMBHOST: SMBus host header
326   *            @arg I2C_FLAG_SMBDEFAULT: SMBus default header
327   *            @arg I2C_FLAG_GENCALL: General call header flag
328   *            @arg I2C_FLAG_TRA: Transmitter/Receiver flag
329   *            @arg I2C_FLAG_BUSY: Bus busy flag
330   *            @arg I2C_FLAG_MSL: Master/Slave flag
331   * @retval The new state of __FLAG__ (TRUE or FALSE).
332   */
333 #define I2C_FLAG_MASK  ((uint32_t)0x0000FFFF)
334 #define __HAL_I2C_GET_FLAG(__HANDLE__, __FLAG__) ((((uint8_t)((__FLAG__) >> 16)) == 0x01)?((((__HANDLE__)->Instance->SR1) & ((__FLAG__) & I2C_FLAG_MASK)) == ((__FLAG__) & I2C_FLAG_MASK)): \
335                                                  ((((__HANDLE__)->Instance->SR2) & ((__FLAG__) & I2C_FLAG_MASK)) == ((__FLAG__) & I2C_FLAG_MASK)))
336
337 /** @brief  Clears the I2C pending flags which are cleared by writing 0 in a specific bit.
338   * @param  __HANDLE__: specifies the I2C Handle.
339   *         This parameter can be I2C where x: 1, 2, or 3 to select the I2C peripheral.
340   * @param  __FLAG__: specifies the flag to clear.
341   *         This parameter can be any combination of the following values:
342   *            @arg I2C_FLAG_SMBALERT: SMBus Alert flag
343   *            @arg I2C_FLAG_TIMEOUT: Timeout or Tlow error flag
344   *            @arg I2C_FLAG_PECERR: PEC error in reception flag
345   *            @arg I2C_FLAG_OVR: Overrun/Underrun flag (Slave mode)
346   *            @arg I2C_FLAG_AF: Acknowledge failure flag
347   *            @arg I2C_FLAG_ARLO: Arbitration lost flag (Master mode)
348   *            @arg I2C_FLAG_BERR: Bus error flag
349   * @retval None
350   */
351 #define __HAL_I2C_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR1 = ~((__FLAG__) & I2C_FLAG_MASK))
352
353 /** @brief  Clears the I2C ADDR pending flag.
354   * @param  __HANDLE__: specifies the I2C Handle.
355   *         This parameter can be I2C where x: 1, 2, or 3 to select the I2C peripheral.
356   * @retval None
357   */
358
359 #define __HAL_I2C_CLEAR_ADDRFLAG(__HANDLE__) do{(__HANDLE__)->Instance->SR1;\
360                                                 (__HANDLE__)->Instance->SR2;}while(0)
361
362 /** @brief  Clears the I2C STOPF pending flag.
363   * @param  __HANDLE__: specifies the I2C Handle.
364   *         This parameter can be I2C where x: 1, 2, or 3 to select the I2C peripheral.
365   * @retval None
366   */
367 #define __HAL_I2C_CLEAR_STOPFLAG(__HANDLE__) do{(__HANDLE__)->Instance->SR1;\
368                                                 (__HANDLE__)->Instance->CR1 |= I2C_CR1_PE;}while(0)
369
370 #define __HAL_I2C_ENABLE(__HANDLE__)                             ((__HANDLE__)->Instance->CR1 |=  I2C_CR1_PE)
371 #define __HAL_I2C_DISABLE(__HANDLE__)                            ((__HANDLE__)->Instance->CR1 &=  ~I2C_CR1_PE)
372
373 #define __HAL_I2C_FREQRANGE(__PCLK__)                            ((__PCLK__)/1000000)
374 #define __HAL_I2C_RISE_TIME(__FREQRANGE__, __SPEED__)            (((__SPEED__) <= 100000) ? ((__FREQRANGE__) + 1) : ((((__FREQRANGE__) * 300) / 1000) + 1))
375 #define __HAL_I2C_SPEED_STANDARD(__PCLK__, __SPEED__)            (((((__PCLK__)/((__SPEED__) << 1)) & I2C_CCR_CCR) < 4)? 4:((__PCLK__) / ((__SPEED__) << 1)))
376 #define __HAL_I2C_SPEED_FAST(__PCLK__, __SPEED__, __DUTYCYCLE__) (((__DUTYCYCLE__) == I2C_DUTYCYCLE_2)? ((__PCLK__) / ((__SPEED__) * 3)) : (((__PCLK__) / ((__SPEED__) * 25)) | I2C_DUTYCYCLE_16_9))
377 #define __HAL_I2C_SPEED(__PCLK__, __SPEED__, __DUTYCYCLE__)      (((__SPEED__) <= 100000)? (__HAL_I2C_SPEED_STANDARD((__PCLK__), (__SPEED__))) : \
378                                                                   ((__HAL_I2C_SPEED_FAST((__PCLK__), (__SPEED__), (__DUTYCYCLE__)) & I2C_CCR_CCR) == 0)? 1 : \
379                                                                   ((__HAL_I2C_SPEED_FAST((__PCLK__), (__SPEED__), (__DUTYCYCLE__))) | I2C_CCR_FS))
380
381 #define __HAL_I2C_7BIT_ADD_WRITE(__ADDRESS__)                    ((uint8_t)((__ADDRESS__) & (~I2C_OAR1_ADD0)))
382 #define __HAL_I2C_7BIT_ADD_READ(__ADDRESS__)                     ((uint8_t)((__ADDRESS__) | I2C_OAR1_ADD0))
383
384 #define __HAL_I2C_10BIT_ADDRESS(__ADDRESS__)                     ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FF))))
385 #define __HAL_I2C_10BIT_HEADER_WRITE(__ADDRESS__)                ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0x0300))) >> 7) | (uint16_t)(0xF0))))
386 #define __HAL_I2C_10BIT_HEADER_READ(__ADDRESS__)                 ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0x0300))) >> 7) | (uint16_t)(0xF1))))
387
388 #define __HAL_I2C_MEM_ADD_MSB(__ADDRESS__)                       ((uint8_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0xFF00))) >> 8)))
389 #define __HAL_I2C_MEM_ADD_LSB(__ADDRESS__)                       ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FF))))
390
391 #define IS_I2C_CLOCK_SPEED(SPEED) (((SPEED) > 0) && ((SPEED) <= 400000))
392 #define IS_I2C_OWN_ADDRESS1(ADDRESS1) (((ADDRESS1) & (uint32_t)(0xFFFFFC00)) == 0)
393 #define IS_I2C_OWN_ADDRESS2(ADDRESS2) (((ADDRESS2) & (uint32_t)(0xFFFFFF01)) == 0)
394
395 /* Include I2C HAL Extension module */
396 #include "stm32f4xx_hal_i2c_ex.h"
397
398 /* Exported functions --------------------------------------------------------*/
399 /* Initialization/de-initialization functions  **********************************/
400 HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c);
401 HAL_StatusTypeDef HAL_I2C_DeInit (I2C_HandleTypeDef *hi2c);
402 void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c);
403 void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c);
404
405 /* I/O operation functions  *****************************************************/
406 /******* Blocking mode: Polling */
407 HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);
408 HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);
409 HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout);
410 HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout);
411 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);
412 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);
413 HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, uint32_t Timeout);
414
415 /******* Non-Blocking mode: Interrupt */
416 HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
417 HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
418 HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
419 HAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
420 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);
421 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);
422
423 /******* Non-Blocking mode: DMA */
424 HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
425 HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
426 HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
427 HAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
428 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);
429 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);
430
431 /******* I2C IRQHandler and Callbacks used in non blocking modes (Interrupt and DMA) */
432 void HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c);
433 void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c);
434 void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c);
435 void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c);
436 void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c);
437 void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c);
438 void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c);
439 void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c);
440 void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c);
441
442 /* Peripheral Control and State functions  **************************************/
443 HAL_I2C_StateTypeDef HAL_I2C_GetState(I2C_HandleTypeDef *hi2c);
444 uint32_t             HAL_I2C_GetError(I2C_HandleTypeDef *hi2c);
445
446 /**
447   * @}
448   */
449
450 /**
451   * @}
452   */
453
454 #ifdef __cplusplus
455 }
456 #endif
457
458
459 #endif /* __STM32F4xx_HAL_I2C_H */
460
461 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/