Subversion Repositories DashDisplay

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
/**
2
  ******************************************************************************
3
  * @file    stm32f1xx_hal_i2c.h
4
  * @author  MCD Application Team
5
  * @version V1.0.1
6
  * @date    31-July-2015
7
  * @brief   Header file of I2C HAL module.
8
  ******************************************************************************
9
  * @attention
10
  *
11
  * <h2><center>&copy; COPYRIGHT(c) 2015 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 __STM32F1xx_HAL_I2C_H
40
#define __STM32F1xx_HAL_I2C_H
41
 
42
#ifdef __cplusplus
43
 extern "C" {
44
#endif
45
 
46
/* Includes ------------------------------------------------------------------*/
47
#include "stm32f1xx_hal_def.h"
48
 
49
/** @addtogroup STM32F1xx_HAL_Driver
50
  * @{
51
  */
52
 
53
/** @addtogroup I2C
54
  * @{
55
  */
56
 
57
/* Exported types ------------------------------------------------------------*/
58
/** @defgroup I2C_Exported_Types I2C Exported Types
59
  * @{
60
  */
61
 
62
/** @defgroup I2C_Configuration_Structure_definition I2C Configuration Structure definition
63
  * @brief  I2C Configuration Structure definition
64
  * @{
65
  */
66
typedef struct
67
{
68
  uint32_t ClockSpeed;       /*!< Specifies the clock frequency.
69
                                  This parameter must be set to a value lower than 400kHz */
70
 
71
  uint32_t DutyCycle;        /*!< Specifies the I2C fast mode duty cycle.
72
                                  This parameter can be a value of @ref I2C_duty_cycle_in_fast_mode */
73
 
74
  uint32_t OwnAddress1;      /*!< Specifies the first device own address.
75
                                  This parameter can be a 7-bit or 10-bit address. */
76
 
77
  uint32_t AddressingMode;   /*!< Specifies if 7-bit or 10-bit addressing mode is selected.
78
                                  This parameter can be a value of @ref I2C_addressing_mode */
79
 
80
  uint32_t DualAddressMode;  /*!< Specifies if dual addressing mode is selected.
81
                                  This parameter can be a value of @ref I2C_dual_addressing_mode */
82
 
83
  uint32_t OwnAddress2;      /*!< Specifies the second device own address if dual addressing mode is selected
84
                                  This parameter can be a 7-bit address. */
85
 
86
  uint32_t GeneralCallMode;  /*!< Specifies if general call mode is selected.
87
                                  This parameter can be a value of @ref I2C_general_call_addressing_mode */
88
 
89
  uint32_t NoStretchMode;    /*!< Specifies if nostretch mode is selected.
90
                                  This parameter can be a value of @ref I2C_nostretch_mode */
91
 
92
}I2C_InitTypeDef;
93
 
94
/**
95
  * @}
96
  */
97
 
98
/** @defgroup HAL_state_structure_definition HAL state structure definition
99
  * @brief  HAL State structure definition  
100
  * @{
101
  */
102
 
103
typedef enum
104
{
105
  HAL_I2C_STATE_RESET             = 0x00,  /*!< I2C not yet initialized or disabled         */
106
  HAL_I2C_STATE_READY             = 0x01,  /*!< I2C initialized and ready for use           */
107
  HAL_I2C_STATE_BUSY              = 0x02,  /*!< I2C internal process is ongoing             */
108
  HAL_I2C_STATE_BUSY_TX           = 0x12,  /*!< Data Transmission process is ongoing        */
109
  HAL_I2C_STATE_BUSY_RX           = 0x22,  /*!< Data Reception process is ongoing           */
110
  HAL_I2C_STATE_MEM_BUSY_TX       = 0x32,  /*!< Memory Data Transmission process is ongoing */
111
  HAL_I2C_STATE_MEM_BUSY_RX       = 0x42,  /*!< Memory Data Reception process is ongoing    */
112
  HAL_I2C_STATE_TIMEOUT           = 0x03,  /*!< I2C timeout state                           */
113
  HAL_I2C_STATE_ERROR             = 0x04   /*!< I2C error state                             */
114
 
115
}HAL_I2C_StateTypeDef;
116
 
117
/**
118
  * @}
119
  */
120
 
121
/** @defgroup I2C_handle_Structure_definition I2C handle Structure definition
122
  * @brief  I2C handle Structure definition  
123
  * @{
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 uint32_t              ErrorCode;  /* I2C Error code                   */
146
 
147
}I2C_HandleTypeDef;
148
/**
149
  * @}
150
  */
151
 
152
/**
153
  * @}
154
  */  
155
/* Exported constants --------------------------------------------------------*/
156
 
157
/** @defgroup I2C_Exported_Constants I2C Exported Constants
158
  * @{
159
  */
160
 
161
/** @defgroup I2C_Error_Codes I2C Error Codes  
162
  * @{
163
  */
164
 
165
#define HAL_I2C_ERROR_NONE      ((uint32_t)0x00)    /*!< No error             */
166
#define HAL_I2C_ERROR_BERR      ((uint32_t)0x01)    /*!< BERR error           */
167
#define HAL_I2C_ERROR_ARLO      ((uint32_t)0x02)    /*!< ARLO error           */
168
#define HAL_I2C_ERROR_AF        ((uint32_t)0x04)    /*!< AF error             */
169
#define HAL_I2C_ERROR_OVR       ((uint32_t)0x08)    /*!< OVR error            */
170
#define HAL_I2C_ERROR_DMA       ((uint32_t)0x10)    /*!< DMA transfer error   */
171
#define HAL_I2C_ERROR_TIMEOUT   ((uint32_t)0x20)     /*!< Timeout error        */
172
 
173
/**
174
  * @}
175
  */
176
 
177
 
178
 
179
/** @defgroup I2C_duty_cycle_in_fast_mode I2C Duty Cycle
180
  * @{
181
  */
182
#define I2C_DUTYCYCLE_2                 ((uint32_t)0x00000000)
183
#define I2C_DUTYCYCLE_16_9              I2C_CCR_DUTY
184
/**
185
  * @}
186
  */
187
 
188
/** @defgroup I2C_addressing_mode I2C addressing mode
189
  * @{
190
  */
191
#define I2C_ADDRESSINGMODE_7BIT         ((uint32_t)0x00004000)
192
#define I2C_ADDRESSINGMODE_10BIT        (I2C_OAR1_ADDMODE | ((uint32_t)0x00004000))
193
/**
194
  * @}
195
  */
196
 
197
/** @defgroup I2C_dual_addressing_mode I2C dual addressing mode
198
  * @{
199
  */
200
#define I2C_DUALADDRESS_DISABLE         ((uint32_t)0x00000000)
201
#define I2C_DUALADDRESS_ENABLE          I2C_OAR2_ENDUAL
202
/**
203
  * @}
204
  */
205
 
206
/** @defgroup I2C_general_call_addressing_mode I2C general call addressing mode
207
  * @{
208
  */
209
#define I2C_GENERALCALL_DISABLE         ((uint32_t)0x00000000)
210
#define I2C_GENERALCALL_ENABLE          I2C_CR1_ENGC
211
/**
212
  * @}
213
  */
214
 
215
/** @defgroup I2C_nostretch_mode I2C nostretch mode
216
  * @{
217
  */
218
#define I2C_NOSTRETCH_DISABLE           ((uint32_t)0x00000000)
219
#define I2C_NOSTRETCH_ENABLE            I2C_CR1_NOSTRETCH
220
/**
221
  * @}
222
  */
223
 
224
/** @defgroup I2C_Memory_Address_Size I2C Memory Address Size
225
  * @{
226
  */
227
#define I2C_MEMADD_SIZE_8BIT            ((uint32_t)0x00000001)
228
#define I2C_MEMADD_SIZE_16BIT           ((uint32_t)0x00000010)
229
/**
230
  * @}
231
  */
232
 
233
/** @defgroup I2C_Interrupt_configuration_definition I2C Interrupt configuration definition
234
  * @{
235
  */
236
#define I2C_IT_BUF                      I2C_CR2_ITBUFEN
237
#define I2C_IT_EVT                      I2C_CR2_ITEVTEN
238
#define I2C_IT_ERR                      I2C_CR2_ITERREN
239
/**
240
  * @}
241
  */
242
 
243
/** @defgroup I2C_Flag_definition I2C Flag definition
244
  * @brief I2C Interrupt definition
245
  *           - 0001XXXX  : Flag control mask for SR1 Register
246
  *           - 0010XXXX  : Flag control mask for SR2 Register
247
  * @{
248
  */
249
#define I2C_FLAG_SMBALERT               ((uint32_t)0x00018000)
250
#define I2C_FLAG_TIMEOUT                ((uint32_t)0x00014000)
251
#define I2C_FLAG_PECERR                 ((uint32_t)0x00011000)
252
#define I2C_FLAG_OVR                    ((uint32_t)0x00010800)
253
#define I2C_FLAG_AF                     ((uint32_t)0x00010400)
254
#define I2C_FLAG_ARLO                   ((uint32_t)0x00010200)
255
#define I2C_FLAG_BERR                   ((uint32_t)0x00010100)
256
#define I2C_FLAG_TXE                    ((uint32_t)0x00010080)
257
#define I2C_FLAG_RXNE                   ((uint32_t)0x00010040)
258
#define I2C_FLAG_STOPF                  ((uint32_t)0x00010010)
259
#define I2C_FLAG_ADD10                  ((uint32_t)0x00010008)
260
#define I2C_FLAG_BTF                    ((uint32_t)0x00010004)
261
#define I2C_FLAG_ADDR                   ((uint32_t)0x00010002)
262
#define I2C_FLAG_SB                     ((uint32_t)0x00010001)
263
#define I2C_FLAG_DUALF                  ((uint32_t)0x00100080)
264
#define I2C_FLAG_SMBHOST                ((uint32_t)0x00100040)
265
#define I2C_FLAG_SMBDEFAULT             ((uint32_t)0x00100020)
266
#define I2C_FLAG_GENCALL                ((uint32_t)0x00100010)
267
#define I2C_FLAG_TRA                    ((uint32_t)0x00100004)
268
#define I2C_FLAG_BUSY                   ((uint32_t)0x00100002)
269
#define I2C_FLAG_MSL                    ((uint32_t)0x00100001)
270
#define I2C_FLAG_MASK                   ((uint32_t)0x0000FFFF)
271
/**
272
  * @}
273
  */
274
 
275
/**
276
  * @}
277
  */
278
 
279
/* Exported macros -----------------------------------------------------------*/
280
 
281
/** @defgroup I2C_Exported_Macros I2C Exported Macros
282
  * @{
283
  */
284
 
285
/** @brief Reset I2C handle state
286
  * @param  __HANDLE__: specifies the I2C Handle.
287
  * @retval None
288
  */
289
#define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_I2C_STATE_RESET)
290
 
291
/** @brief  Enable the specified I2C interrupts.
292
  * @param  __HANDLE__: specifies the I2C Handle.
293
  * @param  __INTERRUPT__: specifies the interrupt source to enable.
294
  *         This parameter can be one of the following values:
295
  *            @arg I2C_IT_BUF: Buffer interrupt enable
296
  *            @arg I2C_IT_EVT: Event interrupt enable
297
  *            @arg I2C_IT_ERR: Error interrupt enable
298
  * @retval None
299
  */
300
#define __HAL_I2C_ENABLE_IT(__HANDLE__, __INTERRUPT__)   (SET_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__)))
301
 
302
/** @brief  Disable the specified I2C interrupts.
303
  * @param  __HANDLE__: specifies the I2C Handle.
304
  * @param  __INTERRUPT__: specifies the interrupt source to disable.
305
  *         This parameter can be one of the following values:
306
  *            @arg I2C_IT_BUF: Buffer interrupt enable
307
  *            @arg I2C_IT_EVT: Event interrupt enable
308
  *            @arg I2C_IT_ERR: Error interrupt enable
309
  * @retval None
310
  */
311
#define __HAL_I2C_DISABLE_IT(__HANDLE__, __INTERRUPT__)  (CLEAR_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__)))
312
 
313
/** @brief  Checks if the specified I2C interrupt source is enabled or disabled.
314
  * @param  __HANDLE__: specifies the I2C Handle.
315
  * @param  __INTERRUPT__: specifies the I2C interrupt source to check.
316
  *          This parameter can be one of the following values:
317
  *            @arg I2C_IT_BUF: Buffer interrupt enable
318
  *            @arg I2C_IT_EVT: Event interrupt enable
319
  *            @arg I2C_IT_ERR: Error interrupt enable
320
  * @retval The new state of __INTERRUPT__ (TRUE or FALSE).
321
  */
322
#define __HAL_I2C_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR2 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
323
 
324
/** @brief  Checks whether the specified I2C flag is set or not.
325
  * @param  __HANDLE__: specifies the I2C Handle.
326
  * @param  __FLAG__: specifies the flag to check.
327
  *         This parameter can be one of the following values:
328
  *            @arg I2C_FLAG_SMBALERT: SMBus Alert flag
329
  *            @arg I2C_FLAG_TIMEOUT: Timeout or Tlow error flag
330
  *            @arg I2C_FLAG_PECERR: PEC error in reception flag
331
  *            @arg I2C_FLAG_OVR: Overrun/Underrun flag
332
  *            @arg I2C_FLAG_AF: Acknowledge failure flag
333
  *            @arg I2C_FLAG_ARLO: Arbitration lost flag
334
  *            @arg I2C_FLAG_BERR: Bus error flag
335
  *            @arg I2C_FLAG_TXE: Data register empty flag
336
  *            @arg I2C_FLAG_RXNE: Data register not empty flag
337
  *            @arg I2C_FLAG_STOPF: Stop detection flag
338
  *            @arg I2C_FLAG_ADD10: 10-bit header sent flag
339
  *            @arg I2C_FLAG_BTF: Byte transfer finished flag
340
  *            @arg I2C_FLAG_ADDR: Address sent flag
341
  *                                Address matched flag
342
  *            @arg I2C_FLAG_SB: Start bit flag
343
  *            @arg I2C_FLAG_DUALF: Dual flag
344
  *            @arg I2C_FLAG_SMBHOST: SMBus host header
345
  *            @arg I2C_FLAG_SMBDEFAULT: SMBus default header
346
  *            @arg I2C_FLAG_GENCALL: General call header flag
347
  *            @arg I2C_FLAG_TRA: Transmitter/Receiver flag
348
  *            @arg I2C_FLAG_BUSY: Bus busy flag
349
  *            @arg I2C_FLAG_MSL: Master/Slave flag
350
  * @retval The new state of __FLAG__ (TRUE or FALSE).
351
  */
352
#define __HAL_I2C_GET_FLAG(__HANDLE__, __FLAG__) ((((uint8_t)((__FLAG__) >> 16)) == 0x01)?((((__HANDLE__)->Instance->SR1) & ((__FLAG__) & I2C_FLAG_MASK)) == ((__FLAG__) & I2C_FLAG_MASK)): \
353
                                                 ((((__HANDLE__)->Instance->SR2) & ((__FLAG__) & I2C_FLAG_MASK)) == ((__FLAG__) & I2C_FLAG_MASK)))
354
 
355
/** @brief  Clears the I2C pending flags which are cleared by writing 0 in a specific bit.
356
  * @param  __HANDLE__: specifies the I2C Handle.
357
  * @param  __FLAG__: specifies the flag to clear.
358
  *         This parameter can be any combination of the following values:
359
  *            @arg I2C_FLAG_SMBALERT: SMBus Alert flag
360
  *            @arg I2C_FLAG_TIMEOUT: Timeout or Tlow error flag
361
  *            @arg I2C_FLAG_PECERR: PEC error in reception flag
362
  *            @arg I2C_FLAG_OVR: Overrun/Underrun flag (Slave mode)
363
  *            @arg I2C_FLAG_AF: Acknowledge failure flag
364
  *            @arg I2C_FLAG_ARLO: Arbitration lost flag (Master mode)
365
  *            @arg I2C_FLAG_BERR: Bus error flag
366
  * @retval None
367
  */
368
#define __HAL_I2C_CLEAR_FLAG(__HANDLE__, __FLAG__)  (__HANDLE__)->Instance->SR1 = (((__HANDLE__)->Instance->SR1) & (~((__FLAG__) & I2C_FLAG_MASK)))
369
 
370
/** @brief  Clears the I2C ADDR pending flag.
371
  * @param  __HANDLE__: specifies the I2C Handle.
372
  * @retval None
373
  */
374
#define __HAL_I2C_CLEAR_ADDRFLAG(__HANDLE__) \
375
 do{                                         \
376
    __IO uint32_t tmpreg;                    \
377
    tmpreg = (__HANDLE__)->Instance->SR1;    \
378
    tmpreg = (__HANDLE__)->Instance->SR2;    \
379
    UNUSED(tmpreg);                          \
380
}while(0)
381
 
382
/** @brief  Clears the I2C STOPF pending flag.
383
  * @param  __HANDLE__: specifies the I2C Handle.
384
  * @retval None
385
  */
386
#define __HAL_I2C_CLEAR_STOPFLAG(__HANDLE__)               \
387
do{                                                        \
388
    __IO uint32_t tmpreg;                                  \
389
    tmpreg = (__HANDLE__)->Instance->SR1;                  \
390
    tmpreg = (__HANDLE__)->Instance->CR1 |= I2C_CR1_PE;    \
391
    UNUSED(tmpreg);                                        \
392
}while(0)  
393
 
394
/** @brief  Enable the specified I2C peripheral.
395
  * @param  __HANDLE__: specifies the I2C Handle.
396
  * @retval None
397
  */
398
#define __HAL_I2C_ENABLE(__HANDLE__)                             (SET_BIT((__HANDLE__)->Instance->CR1,  I2C_CR1_PE))
399
 
400
/** @brief  Disable the specified I2C peripheral.
401
  * @param  __HANDLE__: specifies the I2C Handle.
402
  * @retval None
403
  */
404
#define __HAL_I2C_DISABLE(__HANDLE__)                            (CLEAR_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE))
405
 
406
/**
407
  * @}
408
  */
409
 
410
/* Exported functions --------------------------------------------------------*/
411
/** @addtogroup I2C_Exported_Functions
412
  * @{
413
  */
414
 
415
/** @addtogroup I2C_Exported_Functions_Group1 Initialization and de-initialization functions
416
  * @{
417
  */
418
 
419
/* Initialization/de-initialization functions  ********************************/
420
HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c);
421
HAL_StatusTypeDef HAL_I2C_DeInit (I2C_HandleTypeDef *hi2c);
422
void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c);
423
void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c);
424
 
425
/**
426
  * @}
427
  */
428
 
429
/** @addtogroup I2C_Exported_Functions_Group2 Input and Output operation functions
430
  * @{
431
  */
432
 
433
/* IO operation functions  ****************************************************/
434
 
435
 /******* Blocking mode: Polling */
436
HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);
437
HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);
438
HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout);
439
HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout);
440
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);
441
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);
442
HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, uint32_t Timeout);
443
 
444
 /******* Non-Blocking mode: Interrupt */
445
HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
446
HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
447
HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
448
HAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
449
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);
450
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);
451
 
452
 /******* Non-Blocking mode: DMA */
453
HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
454
HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
455
HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
456
HAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
457
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);
458
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);
459
/**
460
  * @}
461
  */
462
 
463
/** @addtogroup I2C_Exported_Functions_Group4 IRQ Handler and Callbacks
464
 * @{
465
 */  
466
/******* I2C IRQHandler and Callbacks used in non blocking modes (Interrupt and DMA) */
467
void HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c);
468
void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c);
469
void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c);
470
void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c);
471
void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c);
472
void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c);
473
void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c);
474
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c);
475
void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c);
476
 
477
/**
478
  * @}
479
  */
480
 
481
 
482
/** @addtogroup I2C_Exported_Functions_Group3 Peripheral State and Errors functions
483
  * @{
484
  */
485
 
486
/* Peripheral State and Errors functions  *************************************/
487
HAL_I2C_StateTypeDef HAL_I2C_GetState(I2C_HandleTypeDef *hi2c);
488
uint32_t             HAL_I2C_GetError(I2C_HandleTypeDef *hi2c);
489
 
490
/**
491
  * @}
492
  */
493
 
494
/**
495
  * @}
496
  */
497
 
498
/* Private constants ---------------------------------------------------------*/
499
/** @defgroup I2C_Private_Constants I2C Private Constants
500
  * @{
501
  */
502
#define I2C_STANDARD_MODE_MAX_CLK ((uint32_t)100000) /* Standard Clock Up to 100kHz */
503
#define I2C_FAST_MODE_MAX_CLK     ((uint32_t)400000) /* Fast Clock up to 400kHz */
504
/**
505
  * @}
506
  */
507
 
508
/* Private macros ------------------------------------------------------------*/
509
/** @defgroup I2C_Private_Macro I2C Private Macros
510
  * @{
511
  */
512
#define IS_I2C_ADDRESSING_MODE(ADDRESS) (((ADDRESS) == I2C_ADDRESSINGMODE_7BIT) || \
513
                                         ((ADDRESS) == I2C_ADDRESSINGMODE_10BIT))
514
 
515
#define IS_I2C_DUAL_ADDRESS(ADDRESS) (((ADDRESS) == I2C_DUALADDRESS_DISABLE) || \
516
                                      ((ADDRESS) == I2C_DUALADDRESS_ENABLE))
517
 
518
#define IS_I2C_GENERAL_CALL(CALL) (((CALL) == I2C_GENERALCALL_DISABLE) || \
519
                                   ((CALL) == I2C_GENERALCALL_ENABLE))
520
 
521
#define IS_I2C_MEMADD_SIZE(SIZE) (((SIZE) == I2C_MEMADD_SIZE_8BIT) || \
522
                                  ((SIZE) == I2C_MEMADD_SIZE_16BIT))
523
 
524
#define IS_I2C_NO_STRETCH(STRETCH) (((STRETCH) == I2C_NOSTRETCH_DISABLE) || \
525
                                    ((STRETCH) == I2C_NOSTRETCH_ENABLE))
526
 
527
#define IS_I2C_OWN_ADDRESS1(ADDRESS1) (((ADDRESS1) & (uint32_t)(0xFFFFFC00)) == 0)
528
 
529
#define IS_I2C_OWN_ADDRESS2(ADDRESS2) (((ADDRESS2) & (uint32_t)(0xFFFFFF01)) == 0)
530
 
531
#define IS_I2C_CLOCK_SPEED(SPEED) (((SPEED) > 0) && ((SPEED) <= I2C_FAST_MODE_MAX_CLK))
532
 
533
#define IS_I2C_DUTY_CYCLE(CYCLE) (((CYCLE) == I2C_DUTYCYCLE_2) || \
534
                                  ((CYCLE) == I2C_DUTYCYCLE_16_9))
535
 
536
#define I2C_FREQ_RANGE(__PCLK__)                 ((__PCLK__)/1000000)
537
#define I2C_RISE_TIME(__FREQRANGE__, __SPEED__)  (((__SPEED__) <= I2C_STANDARD_MODE_MAX_CLK) ? ((__FREQRANGE__) + 1) : ((((__FREQRANGE__) * 300) / 1000) + 1))
538
 
539
#define I2C_SPEED_STANDARD(__PCLK__, __SPEED__)            (((((__PCLK__)/((__SPEED__) << 1)) & I2C_CCR_CCR) < 4)? 4:((__PCLK__) / ((__SPEED__) << 1)))
540
#define I2C_SPEED_FAST(__PCLK__, __SPEED__, __DUTYCYCLE__) (((__DUTYCYCLE__) == I2C_DUTYCYCLE_2)? ((__PCLK__) / ((__SPEED__) * 3)) : (((__PCLK__) / ((__SPEED__) * 25)) | I2C_DUTYCYCLE_16_9))
541
#define I2C_SPEED(__PCLK__, __SPEED__, __DUTYCYCLE__)      (((__SPEED__) <= 100000)? (I2C_SPEED_STANDARD((__PCLK__), (__SPEED__))) : \
542
                                                                  ((I2C_SPEED_FAST((__PCLK__), (__SPEED__), (__DUTYCYCLE__)) & I2C_CCR_CCR) == 0)? 1 : \
543
                                                                  ((I2C_SPEED_FAST((__PCLK__), (__SPEED__), (__DUTYCYCLE__))) | I2C_CCR_FS))
544
 
545
#define I2C_MEM_ADD_MSB(__ADDRESS__)             ((uint8_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0xFF00))) >> 8)))
546
#define I2C_MEM_ADD_LSB(__ADDRESS__)             ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FF))))
547
 
548
#define I2C_7BIT_ADD_WRITE(__ADDRESS__)          ((uint8_t)((__ADDRESS__) & (~I2C_OAR1_ADD0)))
549
#define I2C_7BIT_ADD_READ(__ADDRESS__)           ((uint8_t)((__ADDRESS__) | I2C_OAR1_ADD0))
550
 
551
#define I2C_10BIT_ADDRESS(__ADDRESS__)           ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FF))))
552
#define I2C_10BIT_HEADER_WRITE(__ADDRESS__)      ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0x0300))) >> 7) | (uint16_t)(0xF0))))
553
#define I2C_10BIT_HEADER_READ(__ADDRESS__)       ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0x0300))) >> 7) | (uint16_t)(0xF1))))
554
/**
555
  * @}
556
  */
557
 
558
/* Private Fonctions ---------------------------------------------------------*/
559
/** @defgroup I2C_Private_Functions I2C Private Functions
560
  * @{
561
  */
562
/* Private functions are defined in stm32f1xx_hal_i2c.c file */
563
/**
564
  * @}
565
  */
566
 
567
/**
568
  * @}
569
  */
570
 
571
/**
572
  * @}
573
  */
574
 
575
#ifdef __cplusplus
576
}
577
#endif
578
 
579
 
580
#endif /* __STM32F1xx_HAL_I2C_H */
581
 
582
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/