Rev 2 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2 | Rev 5 | ||
|---|---|---|---|
| Line 1... | Line 1... | ||
| 1 | /** |
1 | /** |
| 2 | ****************************************************************************** |
2 | ****************************************************************************** |
| 3 | * @file stm32f1xx_hal_i2c.h |
3 | * @file stm32f1xx_hal_i2c.h |
| 4 | * @author MCD Application Team |
4 | * @author MCD Application Team |
| 5 | * @version V1.0.1 |
5 | * @version V1.0.4 |
| 6 | * @date 31-July-2015 |
6 | * @date 29-April-2016 |
| 7 | * @brief Header file of I2C HAL module. |
7 | * @brief Header file of I2C HAL module. |
| 8 | ****************************************************************************** |
8 | ****************************************************************************** |
| 9 | * @attention |
9 | * @attention |
| 10 | * |
10 | * |
| 11 | * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
11 | * <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> |
| 12 | * |
12 | * |
| 13 | * Redistribution and use in source and binary forms, with or without modification, |
13 | * Redistribution and use in source and binary forms, with or without modification, |
| 14 | * are permitted provided that the following conditions are met: |
14 | * are permitted provided that the following conditions are met: |
| 15 | * 1. Redistributions of source code must retain the above copyright notice, |
15 | * 1. Redistributions of source code must retain the above copyright notice, |
| 16 | * this list of conditions and the following disclaimer. |
16 | * this list of conditions and the following disclaimer. |
| Line 100... | Line 100... | ||
| 100 | * @{ |
100 | * @{ |
| 101 | */ |
101 | */ |
| 102 | 102 | ||
| 103 | typedef enum |
103 | typedef enum |
| 104 | { |
104 | { |
| 105 | HAL_I2C_STATE_RESET = 0x00, /*!< I2C not yet initialized or disabled */ |
105 | HAL_I2C_STATE_RESET = 0x00, /*!< Peripheral is not yet Initialized */ |
| 106 | HAL_I2C_STATE_READY = 0x01, /*!< I2C initialized and ready for use */ |
106 | HAL_I2C_STATE_READY = 0x20, /*!< Peripheral Initialized and ready for use */ |
| 107 | HAL_I2C_STATE_BUSY = 0x02, /*!< I2C internal process is ongoing */ |
107 | HAL_I2C_STATE_BUSY = 0x24, /*!< An internal process is ongoing */ |
| 108 | HAL_I2C_STATE_BUSY_TX = 0x12, /*!< Data Transmission process is ongoing */ |
108 | HAL_I2C_STATE_BUSY_TX = 0x21, /*!< Data Transmission process is ongoing */ |
| 109 | HAL_I2C_STATE_BUSY_RX = 0x22, /*!< Data Reception 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 */ |
110 | HAL_I2C_STATE_TIMEOUT = 0xA0, /*!< Timeout state */ |
| 113 | HAL_I2C_STATE_ERROR = 0x04 /*!< I2C error state */ |
111 | HAL_I2C_STATE_ERROR = 0xE0 /*!< Error */ |
| 114 | 112 | ||
| 115 | }HAL_I2C_StateTypeDef; |
113 | }HAL_I2C_StateTypeDef; |
| 116 | 114 | ||
| 117 | /** |
115 | /** |
| 118 | * @} |
116 | * @} |
| 119 | */ |
117 | */ |
| 120 | 118 | ||
| - | 119 | /** @defgroup HAL_mode_structure_definition HAL mode structure definition |
|
| - | 120 | * @brief HAL Mode structure definition |
|
| - | 121 | * @{ |
|
| - | 122 | */ |
|
| - | 123 | typedef enum |
|
| - | 124 | { |
|
| - | 125 | HAL_I2C_MODE_NONE = 0x00, /*!< No I2C communication on going */ |
|
| - | 126 | HAL_I2C_MODE_MASTER = 0x10, /*!< I2C communication is in Master Mode */ |
|
| - | 127 | HAL_I2C_MODE_SLAVE = 0x20, /*!< I2C communication is in Slave Mode */ |
|
| - | 128 | HAL_I2C_MODE_MEM = 0x40 /*!< I2C communication is in Memory Mode */ |
|
| - | 129 | ||
| - | 130 | }HAL_I2C_ModeTypeDef; |
|
| - | 131 | ||
| - | 132 | /** |
|
| - | 133 | * @} |
|
| - | 134 | */ |
|
| - | 135 | ||
| 121 | /** @defgroup I2C_handle_Structure_definition I2C handle Structure definition |
136 | /** @defgroup I2C_handle_Structure_definition I2C handle Structure definition |
| 122 | * @brief I2C handle Structure definition |
137 | * @brief I2C handle Structure definition |
| 123 | * @{ |
138 | * @{ |
| 124 | */ |
139 | */ |
| 125 | typedef struct |
140 | typedef struct |
| Line 140... | Line 155... | ||
| 140 | 155 | ||
| 141 | HAL_LockTypeDef Lock; /*!< I2C locking object */ |
156 | HAL_LockTypeDef Lock; /*!< I2C locking object */ |
| 142 | 157 | ||
| 143 | __IO HAL_I2C_StateTypeDef State; /*!< I2C communication state */ |
158 | __IO HAL_I2C_StateTypeDef State; /*!< I2C communication state */ |
| 144 | 159 | ||
| - | 160 | __IO HAL_I2C_ModeTypeDef Mode; /*!< I2C communication mode */ |
|
| - | 161 | ||
| 145 | __IO uint32_t ErrorCode; /* I2C Error code */ |
162 | __IO uint32_t ErrorCode; /*!< I2C Error code */ |
| 146 | 163 | ||
| 147 | }I2C_HandleTypeDef; |
164 | }I2C_HandleTypeDef; |
| 148 | /** |
165 | /** |
| 149 | * @} |
166 | * @} |
| 150 | */ |
167 | */ |
| Line 280... | Line 297... | ||
| 280 | 297 | ||
| 281 | /** @defgroup I2C_Exported_Macros I2C Exported Macros |
298 | /** @defgroup I2C_Exported_Macros I2C Exported Macros |
| 282 | * @{ |
299 | * @{ |
| 283 | */ |
300 | */ |
| 284 | 301 | ||
| 285 | /** @brief Reset I2C handle state |
302 | /** @brief Reset I2C handle state. |
| 286 | * @param __HANDLE__: specifies the I2C Handle. |
303 | * @param __HANDLE__ specifies the I2C Handle. |
| 287 | * @retval None |
304 | * @retval None |
| 288 | */ |
305 | */ |
| 289 | #define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_I2C_STATE_RESET) |
306 | #define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_I2C_STATE_RESET) |
| 290 | 307 | ||
| 291 | /** @brief Enable the specified I2C interrupts. |
308 | /** @brief Enable the specified I2C interrupt. |
| 292 | * @param __HANDLE__: specifies the I2C Handle. |
309 | * @param __HANDLE__ specifies the I2C Handle. |
| 293 | * @param __INTERRUPT__: specifies the interrupt source to enable. |
310 | * @param __INTERRUPT__: specifies the interrupt source to enable. |
| 294 | * This parameter can be one of the following values: |
311 | * This parameter can be one of the following values: |
| 295 | * @arg I2C_IT_BUF: Buffer interrupt enable |
312 | * @arg @ref I2C_IT_BUF Buffer interrupt enable |
| 296 | * @arg I2C_IT_EVT: Event interrupt enable |
313 | * @arg @ref I2C_IT_EVT Event interrupt enable |
| 297 | * @arg I2C_IT_ERR: Error interrupt enable |
314 | * @arg @ref I2C_IT_ERR Error interrupt enable |
| 298 | * @retval None |
315 | * @retval None |
| 299 | */ |
316 | */ |
| 300 | #define __HAL_I2C_ENABLE_IT(__HANDLE__, __INTERRUPT__) (SET_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__))) |
317 | #define __HAL_I2C_ENABLE_IT(__HANDLE__, __INTERRUPT__) (SET_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__))) |
| 301 | 318 | ||
| 302 | /** @brief Disable the specified I2C interrupts. |
319 | /** @brief Disable the specified I2C interrupt. |
| 303 | * @param __HANDLE__: specifies the I2C Handle. |
320 | * @param __HANDLE__ specifies the I2C Handle. |
| 304 | * @param __INTERRUPT__: specifies the interrupt source to disable. |
321 | * @param __INTERRUPT__: specifies the interrupt source to disable. |
| 305 | * This parameter can be one of the following values: |
322 | * This parameter can be one of the following values: |
| 306 | * @arg I2C_IT_BUF: Buffer interrupt enable |
323 | * @arg @ref I2C_IT_BUF Buffer interrupt enable |
| 307 | * @arg I2C_IT_EVT: Event interrupt enable |
324 | * @arg @ref I2C_IT_EVT Event interrupt enable |
| 308 | * @arg I2C_IT_ERR: Error interrupt enable |
325 | * @arg @ref I2C_IT_ERR Error interrupt enable |
| 309 | * @retval None |
326 | * @retval None |
| 310 | */ |
327 | */ |
| 311 | #define __HAL_I2C_DISABLE_IT(__HANDLE__, __INTERRUPT__) (CLEAR_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__))) |
328 | #define __HAL_I2C_DISABLE_IT(__HANDLE__, __INTERRUPT__) (CLEAR_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__))) |
| 312 | 329 | ||
| 313 | /** @brief Checks if the specified I2C interrupt source is enabled or disabled. |
330 | /** @brief Check whether the specified I2C interrupt source is enabled or not. |
| 314 | * @param __HANDLE__: specifies the I2C Handle. |
331 | * @param __HANDLE__ specifies the I2C Handle. |
| 315 | * @param __INTERRUPT__: specifies the I2C interrupt source to check. |
332 | * @param __INTERRUPT__: specifies the I2C interrupt source to check. |
| 316 | * This parameter can be one of the following values: |
333 | * This parameter can be one of the following values: |
| 317 | * @arg I2C_IT_BUF: Buffer interrupt enable |
334 | * @arg @ref I2C_IT_BUF Buffer interrupt enable |
| 318 | * @arg I2C_IT_EVT: Event interrupt enable |
335 | * @arg @ref I2C_IT_EVT Event interrupt enable |
| 319 | * @arg I2C_IT_ERR: Error interrupt enable |
336 | * @arg @ref I2C_IT_ERR Error interrupt enable |
| 320 | * @retval The new state of __INTERRUPT__ (TRUE or FALSE). |
337 | * @retval The new state of __INTERRUPT__ (TRUE or FALSE). |
| 321 | */ |
338 | */ |
| 322 | #define __HAL_I2C_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR2 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) |
339 | #define __HAL_I2C_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR2 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) |
| 323 | 340 | ||
| 324 | /** @brief Checks whether the specified I2C flag is set or not. |
341 | /** @brief Check whether the specified I2C flag is set or not. |
| 325 | * @param __HANDLE__: specifies the I2C Handle. |
342 | * @param __HANDLE__ specifies the I2C Handle. |
| 326 | * @param __FLAG__: specifies the flag to check. |
343 | * @param __FLAG__ specifies the flag to check. |
| 327 | * This parameter can be one of the following values: |
344 | * This parameter can be one of the following values: |
| 328 | * @arg I2C_FLAG_SMBALERT: SMBus Alert flag |
345 | * @arg @ref I2C_FLAG_SMBALERT SMBus Alert flag |
| 329 | * @arg I2C_FLAG_TIMEOUT: Timeout or Tlow error flag |
346 | * @arg @ref I2C_FLAG_TIMEOUT Timeout or Tlow error flag |
| 330 | * @arg I2C_FLAG_PECERR: PEC error in reception flag |
347 | * @arg @ref I2C_FLAG_PECERR PEC error in reception flag |
| 331 | * @arg I2C_FLAG_OVR: Overrun/Underrun flag |
348 | * @arg @ref I2C_FLAG_OVR Overrun/Underrun flag |
| 332 | * @arg I2C_FLAG_AF: Acknowledge failure flag |
349 | * @arg @ref I2C_FLAG_AF Acknowledge failure flag |
| 333 | * @arg I2C_FLAG_ARLO: Arbitration lost flag |
350 | * @arg @ref I2C_FLAG_ARLO Arbitration lost flag |
| 334 | * @arg I2C_FLAG_BERR: Bus error flag |
351 | * @arg @ref I2C_FLAG_BERR Bus error flag |
| 335 | * @arg I2C_FLAG_TXE: Data register empty flag |
352 | * @arg @ref I2C_FLAG_TXE Data register empty flag |
| 336 | * @arg I2C_FLAG_RXNE: Data register not empty flag |
353 | * @arg @ref I2C_FLAG_RXNE Data register not empty flag |
| 337 | * @arg I2C_FLAG_STOPF: Stop detection flag |
354 | * @arg @ref I2C_FLAG_STOPF Stop detection flag |
| 338 | * @arg I2C_FLAG_ADD10: 10-bit header sent flag |
355 | * @arg @ref I2C_FLAG_ADD10 10-bit header sent flag |
| 339 | * @arg I2C_FLAG_BTF: Byte transfer finished flag |
356 | * @arg @ref I2C_FLAG_BTF Byte transfer finished flag |
| 340 | * @arg I2C_FLAG_ADDR: Address sent flag |
357 | * @arg @ref I2C_FLAG_ADDR Address sent flag |
| 341 | * Address matched flag |
358 | * Address matched flag |
| 342 | * @arg I2C_FLAG_SB: Start bit flag |
359 | * @arg @ref I2C_FLAG_SB Start bit flag |
| 343 | * @arg I2C_FLAG_DUALF: Dual flag |
360 | * @arg @ref I2C_FLAG_DUALF Dual flag |
| 344 | * @arg I2C_FLAG_SMBHOST: SMBus host header |
361 | * @arg @ref I2C_FLAG_SMBHOST SMBus host header |
| 345 | * @arg I2C_FLAG_SMBDEFAULT: SMBus default header |
362 | * @arg @ref I2C_FLAG_SMBDEFAULT SMBus default header |
| 346 | * @arg I2C_FLAG_GENCALL: General call header flag |
363 | * @arg @ref I2C_FLAG_GENCALL General call header flag |
| 347 | * @arg I2C_FLAG_TRA: Transmitter/Receiver flag |
364 | * @arg @ref I2C_FLAG_TRA Transmitter/Receiver flag |
| 348 | * @arg I2C_FLAG_BUSY: Bus busy flag |
365 | * @arg @ref I2C_FLAG_BUSY Bus busy flag |
| 349 | * @arg I2C_FLAG_MSL: Master/Slave flag |
366 | * @arg @ref I2C_FLAG_MSL Master/Slave flag |
| 350 | * @retval The new state of __FLAG__ (TRUE or FALSE). |
367 | * @retval The new state of __FLAG__ (TRUE or FALSE). |
| 351 | */ |
368 | */ |
| 352 | #define __HAL_I2C_GET_FLAG(__HANDLE__, __FLAG__) ((((uint8_t)((__FLAG__) >> 16)) == 0x01)?((((__HANDLE__)->Instance->SR1) & ((__FLAG__) & I2C_FLAG_MASK)) == ((__FLAG__) & I2C_FLAG_MASK)): \ |
369 | #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))) |
370 | ((((__HANDLE__)->Instance->SR2) & ((__FLAG__) & I2C_FLAG_MASK)) == ((__FLAG__) & I2C_FLAG_MASK))) |
| 354 | 371 | ||
| 355 | /** @brief Clears the I2C pending flags which are cleared by writing 0 in a specific bit. |
372 | /** @brief Clear the I2C pending flags which are cleared by writing 0 in a specific bit. |
| 356 | * @param __HANDLE__: specifies the I2C Handle. |
373 | * @param __HANDLE__ specifies the I2C Handle. |
| 357 | * @param __FLAG__: specifies the flag to clear. |
374 | * @param __FLAG__ specifies the flag to clear. |
| 358 | * This parameter can be any combination of the following values: |
375 | * This parameter can be any combination of the following values: |
| 359 | * @arg I2C_FLAG_SMBALERT: SMBus Alert flag |
376 | * @arg @ref I2C_FLAG_SMBALERT SMBus Alert flag |
| 360 | * @arg I2C_FLAG_TIMEOUT: Timeout or Tlow error flag |
377 | * @arg @ref I2C_FLAG_TIMEOUT Timeout or Tlow error flag |
| 361 | * @arg I2C_FLAG_PECERR: PEC error in reception flag |
378 | * @arg @ref I2C_FLAG_PECERR PEC error in reception flag |
| 362 | * @arg I2C_FLAG_OVR: Overrun/Underrun flag (Slave mode) |
379 | * @arg @ref I2C_FLAG_OVR Overrun/Underrun flag (Slave mode) |
| 363 | * @arg I2C_FLAG_AF: Acknowledge failure flag |
380 | * @arg @ref I2C_FLAG_AF Acknowledge failure flag |
| 364 | * @arg I2C_FLAG_ARLO: Arbitration lost flag (Master mode) |
381 | * @arg @ref I2C_FLAG_ARLO Arbitration lost flag (Master mode) |
| 365 | * @arg I2C_FLAG_BERR: Bus error flag |
382 | * @arg @ref I2C_FLAG_BERR Bus error flag |
| - | 383 | * |
|
| 366 | * @retval None |
384 | * @retval None |
| 367 | */ |
385 | */ |
| 368 | #define __HAL_I2C_CLEAR_FLAG(__HANDLE__, __FLAG__) (__HANDLE__)->Instance->SR1 = (((__HANDLE__)->Instance->SR1) & (~((__FLAG__) & I2C_FLAG_MASK))) |
386 | #define __HAL_I2C_CLEAR_FLAG(__HANDLE__, __FLAG__) (__HANDLE__)->Instance->SR1 = (((__HANDLE__)->Instance->SR1) & (~((__FLAG__) & I2C_FLAG_MASK))) |
| 369 | 387 | ||
| 370 | /** @brief Clears the I2C ADDR pending flag. |
388 | /** @brief Clears the I2C ADDR pending flag. |
| Line 390... | Line 408... | ||
| 390 | tmpreg = (__HANDLE__)->Instance->CR1 |= I2C_CR1_PE; \ |
408 | tmpreg = (__HANDLE__)->Instance->CR1 |= I2C_CR1_PE; \ |
| 391 | UNUSED(tmpreg); \ |
409 | UNUSED(tmpreg); \ |
| 392 | }while(0) |
410 | }while(0) |
| 393 | 411 | ||
| 394 | /** @brief Enable the specified I2C peripheral. |
412 | /** @brief Enable the specified I2C peripheral. |
| 395 | * @param __HANDLE__: specifies the I2C Handle. |
413 | * @param __HANDLE__ specifies the I2C Handle. |
| 396 | * @retval None |
414 | * @retval None |
| 397 | */ |
415 | */ |
| 398 | #define __HAL_I2C_ENABLE(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE)) |
416 | #define __HAL_I2C_ENABLE(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE)) |
| 399 | 417 | ||
| 400 | /** @brief Disable the specified I2C peripheral. |
418 | /** @brief Disable the specified I2C peripheral. |
| 401 | * @param __HANDLE__: specifies the I2C Handle. |
419 | * @param __HANDLE__ specifies the I2C Handle. |
| 402 | * @retval None |
420 | * @retval None |
| 403 | */ |
421 | */ |
| 404 | #define __HAL_I2C_DISABLE(__HANDLE__) (CLEAR_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE)) |
422 | #define __HAL_I2C_DISABLE(__HANDLE__) (CLEAR_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE)) |
| 405 | 423 | ||
| 406 | /** |
424 | /** |