stm32f1xx_hal_i2c.h 25 KB

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