1 /**
2 ******************************************************************************
3 * @file stm32f2xx_ll_i2c.h
4 * @author MCD Application Team
5 * @brief Header file of I2C LL module.
6 ******************************************************************************
7 * @attention
8 *
9 * Copyright (c) 2016 STMicroelectronics.
10 * All rights reserved.
11 *
12 * This software is licensed under terms that can be found in the LICENSE file
13 * in the root directory of this software component.
14 * If no LICENSE file comes with this software, it is provided AS-IS.
15 *
16 ******************************************************************************
17 */
18
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef __STM32F2xx_LL_I2C_H
21 #define __STM32F2xx_LL_I2C_H
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32f2xx.h"
29
30 /** @addtogroup STM32F2xx_LL_Driver
31 * @{
32 */
33
34 #if defined (I2C1) || defined (I2C2) || defined (I2C3)
35
36 /** @defgroup I2C_LL I2C
37 * @{
38 */
39
40 /* Private types -------------------------------------------------------------*/
41 /* Private variables ---------------------------------------------------------*/
42
43 /* Private constants ---------------------------------------------------------*/
44 /** @defgroup I2C_LL_Private_Constants I2C Private Constants
45 * @{
46 */
47
48 /* Defines used to perform compute and check in the macros */
49 #define LL_I2C_MAX_SPEED_STANDARD 100000U
50 #define LL_I2C_MAX_SPEED_FAST 400000U
51 /**
52 * @}
53 */
54
55 /* Private macros ------------------------------------------------------------*/
56 #if defined(USE_FULL_LL_DRIVER)
57 /** @defgroup I2C_LL_Private_Macros I2C Private Macros
58 * @{
59 */
60 /**
61 * @}
62 */
63 #endif /*USE_FULL_LL_DRIVER*/
64
65 /* Exported types ------------------------------------------------------------*/
66 #if defined(USE_FULL_LL_DRIVER)
67 /** @defgroup I2C_LL_ES_INIT I2C Exported Init structure
68 * @{
69 */
70 typedef struct
71 {
72 uint32_t PeripheralMode; /*!< Specifies the peripheral mode.
73 This parameter can be a value of @ref I2C_LL_EC_PERIPHERAL_MODE
74
75 This feature can be modified afterwards using unitary function @ref LL_I2C_SetMode(). */
76
77 uint32_t ClockSpeed; /*!< Specifies the clock frequency.
78 This parameter must be set to a value lower than 400kHz (in Hz)
79
80 This feature can be modified afterwards using unitary function @ref LL_I2C_SetClockPeriod()
81 or @ref LL_I2C_SetDutyCycle() or @ref LL_I2C_SetClockSpeedMode() or @ref LL_I2C_ConfigSpeed(). */
82
83 uint32_t DutyCycle; /*!< Specifies the I2C fast mode duty cycle.
84 This parameter can be a value of @ref I2C_LL_EC_DUTYCYCLE
85
86 This feature can be modified afterwards using unitary function @ref LL_I2C_SetDutyCycle(). */
87
88 uint32_t OwnAddress1; /*!< Specifies the device own address 1.
89 This parameter must be a value between Min_Data = 0x00 and Max_Data = 0x3FF
90
91 This feature can be modified afterwards using unitary function @ref LL_I2C_SetOwnAddress1(). */
92
93 uint32_t TypeAcknowledge; /*!< Specifies the ACKnowledge or Non ACKnowledge condition after the address receive match code or next received byte.
94 This parameter can be a value of @ref I2C_LL_EC_I2C_ACKNOWLEDGE
95
96 This feature can be modified afterwards using unitary function @ref LL_I2C_AcknowledgeNextData(). */
97
98 uint32_t OwnAddrSize; /*!< Specifies the device own address 1 size (7-bit or 10-bit).
99 This parameter can be a value of @ref I2C_LL_EC_OWNADDRESS1
100
101 This feature can be modified afterwards using unitary function @ref LL_I2C_SetOwnAddress1(). */
102 } LL_I2C_InitTypeDef;
103 /**
104 * @}
105 */
106 #endif /*USE_FULL_LL_DRIVER*/
107
108 /* Exported constants --------------------------------------------------------*/
109 /** @defgroup I2C_LL_Exported_Constants I2C Exported Constants
110 * @{
111 */
112
113 /** @defgroup I2C_LL_EC_GET_FLAG Get Flags Defines
114 * @brief Flags defines which can be used with LL_I2C_ReadReg function
115 * @{
116 */
117 #define LL_I2C_SR1_SB I2C_SR1_SB /*!< Start Bit (master mode) */
118 #define LL_I2C_SR1_ADDR I2C_SR1_ADDR /*!< Address sent (master mode) or
119 Address matched flag (slave mode) */
120 #define LL_I2C_SR1_BTF I2C_SR1_BTF /*!< Byte Transfer Finished flag */
121 #define LL_I2C_SR1_ADD10 I2C_SR1_ADD10 /*!< 10-bit header sent (master mode) */
122 #define LL_I2C_SR1_STOPF I2C_SR1_STOPF /*!< Stop detection flag (slave mode) */
123 #define LL_I2C_SR1_RXNE I2C_SR1_RXNE /*!< Data register not empty (receivers) */
124 #define LL_I2C_SR1_TXE I2C_SR1_TXE /*!< Data register empty (transmitters) */
125 #define LL_I2C_SR1_BERR I2C_SR1_BERR /*!< Bus error */
126 #define LL_I2C_SR1_ARLO I2C_SR1_ARLO /*!< Arbitration lost */
127 #define LL_I2C_SR1_AF I2C_SR1_AF /*!< Acknowledge failure flag */
128 #define LL_I2C_SR1_OVR I2C_SR1_OVR /*!< Overrun/Underrun */
129 #define LL_I2C_SR1_PECERR I2C_ISR_PECERR /*!< PEC Error in reception (SMBus mode) */
130 #define LL_I2C_SR1_TIMEOUT I2C_ISR_TIMEOUT /*!< Timeout detection flag (SMBus mode) */
131 #define LL_I2C_SR1_SMALERT I2C_ISR_SMALERT /*!< SMBus alert (SMBus mode) */
132 #define LL_I2C_SR2_MSL I2C_SR2_MSL /*!< Master/Slave flag */
133 #define LL_I2C_SR2_BUSY I2C_SR2_BUSY /*!< Bus busy flag */
134 #define LL_I2C_SR2_TRA I2C_SR2_TRA /*!< Transmitter/receiver direction */
135 #define LL_I2C_SR2_GENCALL I2C_SR2_GENCALL /*!< General call address (Slave mode) */
136 #define LL_I2C_SR2_SMBDEFAULT I2C_SR2_SMBDEFAULT /*!< SMBus Device default address (Slave mode) */
137 #define LL_I2C_SR2_SMBHOST I2C_SR2_SMBHOST /*!< SMBus Host address (Slave mode) */
138 #define LL_I2C_SR2_DUALF I2C_SR2_DUALF /*!< Dual flag (Slave mode) */
139 /**
140 * @}
141 */
142
143 /** @defgroup I2C_LL_EC_IT IT Defines
144 * @brief IT defines which can be used with LL_I2C_ReadReg and LL_I2C_WriteReg functions
145 * @{
146 */
147 #define LL_I2C_CR2_ITEVTEN I2C_CR2_ITEVTEN /*!< Events interrupts enable */
148 #define LL_I2C_CR2_ITBUFEN I2C_CR2_ITBUFEN /*!< Buffer interrupts enable */
149 #define LL_I2C_CR2_ITERREN I2C_CR2_ITERREN /*!< Error interrupts enable */
150 /**
151 * @}
152 */
153
154 /** @defgroup I2C_LL_EC_OWNADDRESS1 Own Address 1 Length
155 * @{
156 */
157 #define LL_I2C_OWNADDRESS1_7BIT 0x00004000U /*!< Own address 1 is a 7-bit address. */
158 #define LL_I2C_OWNADDRESS1_10BIT (uint32_t)(I2C_OAR1_ADDMODE | 0x00004000U) /*!< Own address 1 is a 10-bit address. */
159 /**
160 * @}
161 */
162
163 /** @defgroup I2C_LL_EC_DUTYCYCLE Fast Mode Duty Cycle
164 * @{
165 */
166 #define LL_I2C_DUTYCYCLE_2 0x00000000U /*!< I2C fast mode Tlow/Thigh = 2 */
167 #define LL_I2C_DUTYCYCLE_16_9 I2C_CCR_DUTY /*!< I2C fast mode Tlow/Thigh = 16/9 */
168 /**
169 * @}
170 */
171
172 /** @defgroup I2C_LL_EC_CLOCK_SPEED_MODE Master Clock Speed Mode
173 * @{
174 */
175 #define LL_I2C_CLOCK_SPEED_STANDARD_MODE 0x00000000U /*!< Master clock speed range is standard mode */
176 #define LL_I2C_CLOCK_SPEED_FAST_MODE I2C_CCR_FS /*!< Master clock speed range is fast mode */
177 /**
178 * @}
179 */
180
181 /** @defgroup I2C_LL_EC_PERIPHERAL_MODE Peripheral Mode
182 * @{
183 */
184 #define LL_I2C_MODE_I2C 0x00000000U /*!< I2C Master or Slave mode */
185 #define LL_I2C_MODE_SMBUS_HOST (uint32_t)(I2C_CR1_SMBUS | I2C_CR1_SMBTYPE | I2C_CR1_ENARP) /*!< SMBus Host address acknowledge */
186 #define LL_I2C_MODE_SMBUS_DEVICE I2C_CR1_SMBUS /*!< SMBus Device default mode (Default address not acknowledge) */
187 #define LL_I2C_MODE_SMBUS_DEVICE_ARP (uint32_t)(I2C_CR1_SMBUS | I2C_CR1_ENARP) /*!< SMBus Device Default address acknowledge */
188 /**
189 * @}
190 */
191
192 /** @defgroup I2C_LL_EC_I2C_ACKNOWLEDGE Acknowledge Generation
193 * @{
194 */
195 #define LL_I2C_ACK I2C_CR1_ACK /*!< ACK is sent after current received byte. */
196 #define LL_I2C_NACK 0x00000000U /*!< NACK is sent after current received byte.*/
197 /**
198 * @}
199 */
200
201 /** @defgroup I2C_LL_EC_DIRECTION Read Write Direction
202 * @{
203 */
204 #define LL_I2C_DIRECTION_WRITE I2C_SR2_TRA /*!< Bus is in write transfer */
205 #define LL_I2C_DIRECTION_READ 0x00000000U /*!< Bus is in read transfer */
206 /**
207 * @}
208 */
209
210 /**
211 * @}
212 */
213
214 /* Exported macro ------------------------------------------------------------*/
215 /** @defgroup I2C_LL_Exported_Macros I2C Exported Macros
216 * @{
217 */
218
219 /** @defgroup I2C_LL_EM_WRITE_READ Common Write and read registers Macros
220 * @{
221 */
222
223 /**
224 * @brief Write a value in I2C register
225 * @param __INSTANCE__ I2C Instance
226 * @param __REG__ Register to be written
227 * @param __VALUE__ Value to be written in the register
228 * @retval None
229 */
230 #define LL_I2C_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
231
232 /**
233 * @brief Read a value in I2C register
234 * @param __INSTANCE__ I2C Instance
235 * @param __REG__ Register to be read
236 * @retval Register value
237 */
238 #define LL_I2C_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
239 /**
240 * @}
241 */
242
243 /** @defgroup I2C_LL_EM_Exported_Macros_Helper Exported Macros Helper
244 * @{
245 */
246
247 /**
248 * @brief Convert Peripheral Clock Frequency in Mhz.
249 * @param __PCLK__ This parameter must be a value of peripheral clock (in Hz).
250 * @retval Value of peripheral clock (in Mhz)
251 */
252 #define __LL_I2C_FREQ_HZ_TO_MHZ(__PCLK__) (uint32_t)((__PCLK__)/1000000U)
253
254 /**
255 * @brief Convert Peripheral Clock Frequency in Hz.
256 * @param __PCLK__ This parameter must be a value of peripheral clock (in Mhz).
257 * @retval Value of peripheral clock (in Hz)
258 */
259 #define __LL_I2C_FREQ_MHZ_TO_HZ(__PCLK__) (uint32_t)((__PCLK__)*1000000U)
260
261 /**
262 * @brief Compute I2C Clock rising time.
263 * @param __FREQRANGE__ This parameter must be a value of peripheral clock (in Mhz).
264 * @param __SPEED__ This parameter must be a value lower than 400kHz (in Hz).
265 * @retval Value between Min_Data=0x02 and Max_Data=0x3F
266 */
267 #define __LL_I2C_RISE_TIME(__FREQRANGE__, __SPEED__) (uint32_t)(((__SPEED__) <= LL_I2C_MAX_SPEED_STANDARD) ? ((__FREQRANGE__) + 1U) : ((((__FREQRANGE__) * 300U) / 1000U) + 1U))
268
269 /**
270 * @brief Compute Speed clock range to a Clock Control Register (I2C_CCR_CCR) value.
271 * @param __PCLK__ This parameter must be a value of peripheral clock (in Hz).
272 * @param __SPEED__ This parameter must be a value lower than 400kHz (in Hz).
273 * @param __DUTYCYCLE__ This parameter can be one of the following values:
274 * @arg @ref LL_I2C_DUTYCYCLE_2
275 * @arg @ref LL_I2C_DUTYCYCLE_16_9
276 * @retval Value between Min_Data=0x004 and Max_Data=0xFFF, except in FAST DUTY mode where Min_Data=0x001.
277 */
278 #define __LL_I2C_SPEED_TO_CCR(__PCLK__, __SPEED__, __DUTYCYCLE__) (uint32_t)(((__SPEED__) <= LL_I2C_MAX_SPEED_STANDARD)? \
279 (__LL_I2C_SPEED_STANDARD_TO_CCR((__PCLK__), (__SPEED__))) : \
280 (__LL_I2C_SPEED_FAST_TO_CCR((__PCLK__), (__SPEED__), (__DUTYCYCLE__))))
281
282 /**
283 * @brief Compute Speed Standard clock range to a Clock Control Register (I2C_CCR_CCR) value.
284 * @param __PCLK__ This parameter must be a value of peripheral clock (in Hz).
285 * @param __SPEED__ This parameter must be a value lower than 100kHz (in Hz).
286 * @retval Value between Min_Data=0x004 and Max_Data=0xFFF.
287 */
288 #define __LL_I2C_SPEED_STANDARD_TO_CCR(__PCLK__, __SPEED__) (uint32_t)(((((__PCLK__)/((__SPEED__) << 1U)) & I2C_CCR_CCR) < 4U)? 4U:((__PCLK__) / ((__SPEED__) << 1U)))
289
290 /**
291 * @brief Compute Speed Fast clock range to a Clock Control Register (I2C_CCR_CCR) value.
292 * @param __PCLK__ This parameter must be a value of peripheral clock (in Hz).
293 * @param __SPEED__ This parameter must be a value between Min_Data=100Khz and Max_Data=400Khz (in Hz).
294 * @param __DUTYCYCLE__ This parameter can be one of the following values:
295 * @arg @ref LL_I2C_DUTYCYCLE_2
296 * @arg @ref LL_I2C_DUTYCYCLE_16_9
297 * @retval Value between Min_Data=0x001 and Max_Data=0xFFF
298 */
299 #define __LL_I2C_SPEED_FAST_TO_CCR(__PCLK__, __SPEED__, __DUTYCYCLE__) (uint32_t)(((__DUTYCYCLE__) == LL_I2C_DUTYCYCLE_2)? \
300 (((((__PCLK__) / ((__SPEED__) * 3U)) & I2C_CCR_CCR) == 0U)? 1U:((__PCLK__) / ((__SPEED__) * 3U))) : \
301 (((((__PCLK__) / ((__SPEED__) * 25U)) & I2C_CCR_CCR) == 0U)? 1U:((__PCLK__) / ((__SPEED__) * 25U))))
302
303 /**
304 * @brief Get the Least significant bits of a 10-Bits address.
305 * @param __ADDRESS__ This parameter must be a value of a 10-Bits slave address.
306 * @retval Value between Min_Data=0x00 and Max_Data=0xFF
307 */
308 #define __LL_I2C_10BIT_ADDRESS(__ADDRESS__) ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FF))))
309
310 /**
311 * @brief Convert a 10-Bits address to a 10-Bits header with Write direction.
312 * @param __ADDRESS__ This parameter must be a value of a 10-Bits slave address.
313 * @retval Value between Min_Data=0xF0 and Max_Data=0xF6
314 */
315 #define __LL_I2C_10BIT_HEADER_WRITE(__ADDRESS__) ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0x0300))) >> 7) | (uint16_t)(0xF0))))
316
317 /**
318 * @brief Convert a 10-Bits address to a 10-Bits header with Read direction.
319 * @param __ADDRESS__ This parameter must be a value of a 10-Bits slave address.
320 * @retval Value between Min_Data=0xF1 and Max_Data=0xF7
321 */
322 #define __LL_I2C_10BIT_HEADER_READ(__ADDRESS__) ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0x0300))) >> 7) | (uint16_t)(0xF1))))
323
324 /**
325 * @}
326 */
327
328 /**
329 * @}
330 */
331
332 /* Exported functions --------------------------------------------------------*/
333
334 /** @defgroup I2C_LL_Exported_Functions I2C Exported Functions
335 * @{
336 */
337
338 /** @defgroup I2C_LL_EF_Configuration Configuration
339 * @{
340 */
341
342 /**
343 * @brief Enable I2C peripheral (PE = 1).
344 * @rmtoll CR1 PE LL_I2C_Enable
345 * @param I2Cx I2C Instance.
346 * @retval None
347 */
LL_I2C_Enable(I2C_TypeDef * I2Cx)348 __STATIC_INLINE void LL_I2C_Enable(I2C_TypeDef *I2Cx)
349 {
350 SET_BIT(I2Cx->CR1, I2C_CR1_PE);
351 }
352
353 /**
354 * @brief Disable I2C peripheral (PE = 0).
355 * @rmtoll CR1 PE LL_I2C_Disable
356 * @param I2Cx I2C Instance.
357 * @retval None
358 */
LL_I2C_Disable(I2C_TypeDef * I2Cx)359 __STATIC_INLINE void LL_I2C_Disable(I2C_TypeDef *I2Cx)
360 {
361 CLEAR_BIT(I2Cx->CR1, I2C_CR1_PE);
362 }
363
364 /**
365 * @brief Check if the I2C peripheral is enabled or disabled.
366 * @rmtoll CR1 PE LL_I2C_IsEnabled
367 * @param I2Cx I2C Instance.
368 * @retval State of bit (1 or 0).
369 */
LL_I2C_IsEnabled(I2C_TypeDef * I2Cx)370 __STATIC_INLINE uint32_t LL_I2C_IsEnabled(I2C_TypeDef *I2Cx)
371 {
372 return (READ_BIT(I2Cx->CR1, I2C_CR1_PE) == (I2C_CR1_PE));
373 }
374
375
376 /**
377 * @brief Enable DMA transmission requests.
378 * @rmtoll CR2 DMAEN LL_I2C_EnableDMAReq_TX
379 * @param I2Cx I2C Instance.
380 * @retval None
381 */
LL_I2C_EnableDMAReq_TX(I2C_TypeDef * I2Cx)382 __STATIC_INLINE void LL_I2C_EnableDMAReq_TX(I2C_TypeDef *I2Cx)
383 {
384 SET_BIT(I2Cx->CR2, I2C_CR2_DMAEN);
385 }
386
387 /**
388 * @brief Disable DMA transmission requests.
389 * @rmtoll CR2 DMAEN LL_I2C_DisableDMAReq_TX
390 * @param I2Cx I2C Instance.
391 * @retval None
392 */
LL_I2C_DisableDMAReq_TX(I2C_TypeDef * I2Cx)393 __STATIC_INLINE void LL_I2C_DisableDMAReq_TX(I2C_TypeDef *I2Cx)
394 {
395 CLEAR_BIT(I2Cx->CR2, I2C_CR2_DMAEN);
396 }
397
398 /**
399 * @brief Check if DMA transmission requests are enabled or disabled.
400 * @rmtoll CR2 DMAEN LL_I2C_IsEnabledDMAReq_TX
401 * @param I2Cx I2C Instance.
402 * @retval State of bit (1 or 0).
403 */
LL_I2C_IsEnabledDMAReq_TX(I2C_TypeDef * I2Cx)404 __STATIC_INLINE uint32_t LL_I2C_IsEnabledDMAReq_TX(I2C_TypeDef *I2Cx)
405 {
406 return (READ_BIT(I2Cx->CR2, I2C_CR2_DMAEN) == (I2C_CR2_DMAEN));
407 }
408
409 /**
410 * @brief Enable DMA reception requests.
411 * @rmtoll CR2 DMAEN LL_I2C_EnableDMAReq_RX
412 * @param I2Cx I2C Instance.
413 * @retval None
414 */
LL_I2C_EnableDMAReq_RX(I2C_TypeDef * I2Cx)415 __STATIC_INLINE void LL_I2C_EnableDMAReq_RX(I2C_TypeDef *I2Cx)
416 {
417 SET_BIT(I2Cx->CR2, I2C_CR2_DMAEN);
418 }
419
420 /**
421 * @brief Disable DMA reception requests.
422 * @rmtoll CR2 DMAEN LL_I2C_DisableDMAReq_RX
423 * @param I2Cx I2C Instance.
424 * @retval None
425 */
LL_I2C_DisableDMAReq_RX(I2C_TypeDef * I2Cx)426 __STATIC_INLINE void LL_I2C_DisableDMAReq_RX(I2C_TypeDef *I2Cx)
427 {
428 CLEAR_BIT(I2Cx->CR2, I2C_CR2_DMAEN);
429 }
430
431 /**
432 * @brief Check if DMA reception requests are enabled or disabled.
433 * @rmtoll CR2 DMAEN LL_I2C_IsEnabledDMAReq_RX
434 * @param I2Cx I2C Instance.
435 * @retval State of bit (1 or 0).
436 */
LL_I2C_IsEnabledDMAReq_RX(I2C_TypeDef * I2Cx)437 __STATIC_INLINE uint32_t LL_I2C_IsEnabledDMAReq_RX(I2C_TypeDef *I2Cx)
438 {
439 return (READ_BIT(I2Cx->CR2, I2C_CR2_DMAEN) == (I2C_CR2_DMAEN));
440 }
441
442 /**
443 * @brief Get the data register address used for DMA transfer.
444 * @rmtoll DR DR LL_I2C_DMA_GetRegAddr
445 * @param I2Cx I2C Instance.
446 * @retval Address of data register
447 */
LL_I2C_DMA_GetRegAddr(I2C_TypeDef * I2Cx)448 __STATIC_INLINE uint32_t LL_I2C_DMA_GetRegAddr(I2C_TypeDef *I2Cx)
449 {
450 return (uint32_t) & (I2Cx->DR);
451 }
452
453 /**
454 * @brief Enable Clock stretching.
455 * @note This bit can only be programmed when the I2C is disabled (PE = 0).
456 * @rmtoll CR1 NOSTRETCH LL_I2C_EnableClockStretching
457 * @param I2Cx I2C Instance.
458 * @retval None
459 */
LL_I2C_EnableClockStretching(I2C_TypeDef * I2Cx)460 __STATIC_INLINE void LL_I2C_EnableClockStretching(I2C_TypeDef *I2Cx)
461 {
462 CLEAR_BIT(I2Cx->CR1, I2C_CR1_NOSTRETCH);
463 }
464
465 /**
466 * @brief Disable Clock stretching.
467 * @note This bit can only be programmed when the I2C is disabled (PE = 0).
468 * @rmtoll CR1 NOSTRETCH LL_I2C_DisableClockStretching
469 * @param I2Cx I2C Instance.
470 * @retval None
471 */
LL_I2C_DisableClockStretching(I2C_TypeDef * I2Cx)472 __STATIC_INLINE void LL_I2C_DisableClockStretching(I2C_TypeDef *I2Cx)
473 {
474 SET_BIT(I2Cx->CR1, I2C_CR1_NOSTRETCH);
475 }
476
477 /**
478 * @brief Check if Clock stretching is enabled or disabled.
479 * @rmtoll CR1 NOSTRETCH LL_I2C_IsEnabledClockStretching
480 * @param I2Cx I2C Instance.
481 * @retval State of bit (1 or 0).
482 */
LL_I2C_IsEnabledClockStretching(I2C_TypeDef * I2Cx)483 __STATIC_INLINE uint32_t LL_I2C_IsEnabledClockStretching(I2C_TypeDef *I2Cx)
484 {
485 return (READ_BIT(I2Cx->CR1, I2C_CR1_NOSTRETCH) != (I2C_CR1_NOSTRETCH));
486 }
487
488 /**
489 * @brief Enable General Call.
490 * @note When enabled the Address 0x00 is ACKed.
491 * @rmtoll CR1 ENGC LL_I2C_EnableGeneralCall
492 * @param I2Cx I2C Instance.
493 * @retval None
494 */
LL_I2C_EnableGeneralCall(I2C_TypeDef * I2Cx)495 __STATIC_INLINE void LL_I2C_EnableGeneralCall(I2C_TypeDef *I2Cx)
496 {
497 SET_BIT(I2Cx->CR1, I2C_CR1_ENGC);
498 }
499
500 /**
501 * @brief Disable General Call.
502 * @note When disabled the Address 0x00 is NACKed.
503 * @rmtoll CR1 ENGC LL_I2C_DisableGeneralCall
504 * @param I2Cx I2C Instance.
505 * @retval None
506 */
LL_I2C_DisableGeneralCall(I2C_TypeDef * I2Cx)507 __STATIC_INLINE void LL_I2C_DisableGeneralCall(I2C_TypeDef *I2Cx)
508 {
509 CLEAR_BIT(I2Cx->CR1, I2C_CR1_ENGC);
510 }
511
512 /**
513 * @brief Check if General Call is enabled or disabled.
514 * @rmtoll CR1 ENGC LL_I2C_IsEnabledGeneralCall
515 * @param I2Cx I2C Instance.
516 * @retval State of bit (1 or 0).
517 */
LL_I2C_IsEnabledGeneralCall(I2C_TypeDef * I2Cx)518 __STATIC_INLINE uint32_t LL_I2C_IsEnabledGeneralCall(I2C_TypeDef *I2Cx)
519 {
520 return (READ_BIT(I2Cx->CR1, I2C_CR1_ENGC) == (I2C_CR1_ENGC));
521 }
522
523 /**
524 * @brief Set the Own Address1.
525 * @rmtoll OAR1 ADD0 LL_I2C_SetOwnAddress1\n
526 * OAR1 ADD1_7 LL_I2C_SetOwnAddress1\n
527 * OAR1 ADD8_9 LL_I2C_SetOwnAddress1\n
528 * OAR1 ADDMODE LL_I2C_SetOwnAddress1
529 * @param I2Cx I2C Instance.
530 * @param OwnAddress1 This parameter must be a value between Min_Data=0 and Max_Data=0x3FF.
531 * @param OwnAddrSize This parameter can be one of the following values:
532 * @arg @ref LL_I2C_OWNADDRESS1_7BIT
533 * @arg @ref LL_I2C_OWNADDRESS1_10BIT
534 * @retval None
535 */
LL_I2C_SetOwnAddress1(I2C_TypeDef * I2Cx,uint32_t OwnAddress1,uint32_t OwnAddrSize)536 __STATIC_INLINE void LL_I2C_SetOwnAddress1(I2C_TypeDef *I2Cx, uint32_t OwnAddress1, uint32_t OwnAddrSize)
537 {
538 MODIFY_REG(I2Cx->OAR1, I2C_OAR1_ADD0 | I2C_OAR1_ADD1_7 | I2C_OAR1_ADD8_9 | I2C_OAR1_ADDMODE, OwnAddress1 | OwnAddrSize);
539 }
540
541 /**
542 * @brief Set the 7bits Own Address2.
543 * @note This action has no effect if own address2 is enabled.
544 * @rmtoll OAR2 ADD2 LL_I2C_SetOwnAddress2
545 * @param I2Cx I2C Instance.
546 * @param OwnAddress2 This parameter must be a value between Min_Data=0 and Max_Data=0x7F.
547 * @retval None
548 */
LL_I2C_SetOwnAddress2(I2C_TypeDef * I2Cx,uint32_t OwnAddress2)549 __STATIC_INLINE void LL_I2C_SetOwnAddress2(I2C_TypeDef *I2Cx, uint32_t OwnAddress2)
550 {
551 MODIFY_REG(I2Cx->OAR2, I2C_OAR2_ADD2, OwnAddress2);
552 }
553
554 /**
555 * @brief Enable acknowledge on Own Address2 match address.
556 * @rmtoll OAR2 ENDUAL LL_I2C_EnableOwnAddress2
557 * @param I2Cx I2C Instance.
558 * @retval None
559 */
LL_I2C_EnableOwnAddress2(I2C_TypeDef * I2Cx)560 __STATIC_INLINE void LL_I2C_EnableOwnAddress2(I2C_TypeDef *I2Cx)
561 {
562 SET_BIT(I2Cx->OAR2, I2C_OAR2_ENDUAL);
563 }
564
565 /**
566 * @brief Disable acknowledge on Own Address2 match address.
567 * @rmtoll OAR2 ENDUAL LL_I2C_DisableOwnAddress2
568 * @param I2Cx I2C Instance.
569 * @retval None
570 */
LL_I2C_DisableOwnAddress2(I2C_TypeDef * I2Cx)571 __STATIC_INLINE void LL_I2C_DisableOwnAddress2(I2C_TypeDef *I2Cx)
572 {
573 CLEAR_BIT(I2Cx->OAR2, I2C_OAR2_ENDUAL);
574 }
575
576 /**
577 * @brief Check if Own Address1 acknowledge is enabled or disabled.
578 * @rmtoll OAR2 ENDUAL LL_I2C_IsEnabledOwnAddress2
579 * @param I2Cx I2C Instance.
580 * @retval State of bit (1 or 0).
581 */
LL_I2C_IsEnabledOwnAddress2(I2C_TypeDef * I2Cx)582 __STATIC_INLINE uint32_t LL_I2C_IsEnabledOwnAddress2(I2C_TypeDef *I2Cx)
583 {
584 return (READ_BIT(I2Cx->OAR2, I2C_OAR2_ENDUAL) == (I2C_OAR2_ENDUAL));
585 }
586
587 /**
588 * @brief Configure the Peripheral clock frequency.
589 * @rmtoll CR2 FREQ LL_I2C_SetPeriphClock
590 * @param I2Cx I2C Instance.
591 * @param PeriphClock Peripheral Clock (in Hz)
592 * @retval None
593 */
LL_I2C_SetPeriphClock(I2C_TypeDef * I2Cx,uint32_t PeriphClock)594 __STATIC_INLINE void LL_I2C_SetPeriphClock(I2C_TypeDef *I2Cx, uint32_t PeriphClock)
595 {
596 MODIFY_REG(I2Cx->CR2, I2C_CR2_FREQ, __LL_I2C_FREQ_HZ_TO_MHZ(PeriphClock));
597 }
598
599 /**
600 * @brief Get the Peripheral clock frequency.
601 * @rmtoll CR2 FREQ LL_I2C_GetPeriphClock
602 * @param I2Cx I2C Instance.
603 * @retval Value of Peripheral Clock (in Hz)
604 */
LL_I2C_GetPeriphClock(I2C_TypeDef * I2Cx)605 __STATIC_INLINE uint32_t LL_I2C_GetPeriphClock(I2C_TypeDef *I2Cx)
606 {
607 return (uint32_t)(__LL_I2C_FREQ_MHZ_TO_HZ(READ_BIT(I2Cx->CR2, I2C_CR2_FREQ)));
608 }
609
610 /**
611 * @brief Configure the Duty cycle (Fast mode only).
612 * @rmtoll CCR DUTY LL_I2C_SetDutyCycle
613 * @param I2Cx I2C Instance.
614 * @param DutyCycle This parameter can be one of the following values:
615 * @arg @ref LL_I2C_DUTYCYCLE_2
616 * @arg @ref LL_I2C_DUTYCYCLE_16_9
617 * @retval None
618 */
LL_I2C_SetDutyCycle(I2C_TypeDef * I2Cx,uint32_t DutyCycle)619 __STATIC_INLINE void LL_I2C_SetDutyCycle(I2C_TypeDef *I2Cx, uint32_t DutyCycle)
620 {
621 MODIFY_REG(I2Cx->CCR, I2C_CCR_DUTY, DutyCycle);
622 }
623
624 /**
625 * @brief Get the Duty cycle (Fast mode only).
626 * @rmtoll CCR DUTY LL_I2C_GetDutyCycle
627 * @param I2Cx I2C Instance.
628 * @retval Returned value can be one of the following values:
629 * @arg @ref LL_I2C_DUTYCYCLE_2
630 * @arg @ref LL_I2C_DUTYCYCLE_16_9
631 */
LL_I2C_GetDutyCycle(I2C_TypeDef * I2Cx)632 __STATIC_INLINE uint32_t LL_I2C_GetDutyCycle(I2C_TypeDef *I2Cx)
633 {
634 return (uint32_t)(READ_BIT(I2Cx->CCR, I2C_CCR_DUTY));
635 }
636
637 /**
638 * @brief Configure the I2C master clock speed mode.
639 * @rmtoll CCR FS LL_I2C_SetClockSpeedMode
640 * @param I2Cx I2C Instance.
641 * @param ClockSpeedMode This parameter can be one of the following values:
642 * @arg @ref LL_I2C_CLOCK_SPEED_STANDARD_MODE
643 * @arg @ref LL_I2C_CLOCK_SPEED_FAST_MODE
644 * @retval None
645 */
LL_I2C_SetClockSpeedMode(I2C_TypeDef * I2Cx,uint32_t ClockSpeedMode)646 __STATIC_INLINE void LL_I2C_SetClockSpeedMode(I2C_TypeDef *I2Cx, uint32_t ClockSpeedMode)
647 {
648 MODIFY_REG(I2Cx->CCR, I2C_CCR_FS, ClockSpeedMode);
649 }
650
651 /**
652 * @brief Get the the I2C master speed mode.
653 * @rmtoll CCR FS LL_I2C_GetClockSpeedMode
654 * @param I2Cx I2C Instance.
655 * @retval Returned value can be one of the following values:
656 * @arg @ref LL_I2C_CLOCK_SPEED_STANDARD_MODE
657 * @arg @ref LL_I2C_CLOCK_SPEED_FAST_MODE
658 */
LL_I2C_GetClockSpeedMode(I2C_TypeDef * I2Cx)659 __STATIC_INLINE uint32_t LL_I2C_GetClockSpeedMode(I2C_TypeDef *I2Cx)
660 {
661 return (uint32_t)(READ_BIT(I2Cx->CCR, I2C_CCR_FS));
662 }
663
664 /**
665 * @brief Configure the SCL, SDA rising time.
666 * @note This bit can only be programmed when the I2C is disabled (PE = 0).
667 * @rmtoll TRISE TRISE LL_I2C_SetRiseTime
668 * @param I2Cx I2C Instance.
669 * @param RiseTime This parameter must be a value between Min_Data=0x02 and Max_Data=0x3F.
670 * @retval None
671 */
LL_I2C_SetRiseTime(I2C_TypeDef * I2Cx,uint32_t RiseTime)672 __STATIC_INLINE void LL_I2C_SetRiseTime(I2C_TypeDef *I2Cx, uint32_t RiseTime)
673 {
674 MODIFY_REG(I2Cx->TRISE, I2C_TRISE_TRISE, RiseTime);
675 }
676
677 /**
678 * @brief Get the SCL, SDA rising time.
679 * @rmtoll TRISE TRISE LL_I2C_GetRiseTime
680 * @param I2Cx I2C Instance.
681 * @retval Value between Min_Data=0x02 and Max_Data=0x3F
682 */
LL_I2C_GetRiseTime(I2C_TypeDef * I2Cx)683 __STATIC_INLINE uint32_t LL_I2C_GetRiseTime(I2C_TypeDef *I2Cx)
684 {
685 return (uint32_t)(READ_BIT(I2Cx->TRISE, I2C_TRISE_TRISE));
686 }
687
688 /**
689 * @brief Configure the SCL high and low period.
690 * @note This bit can only be programmed when the I2C is disabled (PE = 0).
691 * @rmtoll CCR CCR LL_I2C_SetClockPeriod
692 * @param I2Cx I2C Instance.
693 * @param ClockPeriod This parameter must be a value between Min_Data=0x004 and Max_Data=0xFFF, except in FAST DUTY mode where Min_Data=0x001.
694 * @retval None
695 */
LL_I2C_SetClockPeriod(I2C_TypeDef * I2Cx,uint32_t ClockPeriod)696 __STATIC_INLINE void LL_I2C_SetClockPeriod(I2C_TypeDef *I2Cx, uint32_t ClockPeriod)
697 {
698 MODIFY_REG(I2Cx->CCR, I2C_CCR_CCR, ClockPeriod);
699 }
700
701 /**
702 * @brief Get the SCL high and low period.
703 * @rmtoll CCR CCR LL_I2C_GetClockPeriod
704 * @param I2Cx I2C Instance.
705 * @retval Value between Min_Data=0x004 and Max_Data=0xFFF, except in FAST DUTY mode where Min_Data=0x001.
706 */
LL_I2C_GetClockPeriod(I2C_TypeDef * I2Cx)707 __STATIC_INLINE uint32_t LL_I2C_GetClockPeriod(I2C_TypeDef *I2Cx)
708 {
709 return (uint32_t)(READ_BIT(I2Cx->CCR, I2C_CCR_CCR));
710 }
711
712 /**
713 * @brief Configure the SCL speed.
714 * @note This bit can only be programmed when the I2C is disabled (PE = 0).
715 * @rmtoll CR2 FREQ LL_I2C_ConfigSpeed\n
716 * TRISE TRISE LL_I2C_ConfigSpeed\n
717 * CCR FS LL_I2C_ConfigSpeed\n
718 * CCR DUTY LL_I2C_ConfigSpeed\n
719 * CCR CCR LL_I2C_ConfigSpeed
720 * @param I2Cx I2C Instance.
721 * @param PeriphClock Peripheral Clock (in Hz)
722 * @param ClockSpeed This parameter must be a value lower than 400kHz (in Hz).
723 * @param DutyCycle This parameter can be one of the following values:
724 * @arg @ref LL_I2C_DUTYCYCLE_2
725 * @arg @ref LL_I2C_DUTYCYCLE_16_9
726 * @retval None
727 */
LL_I2C_ConfigSpeed(I2C_TypeDef * I2Cx,uint32_t PeriphClock,uint32_t ClockSpeed,uint32_t DutyCycle)728 __STATIC_INLINE void LL_I2C_ConfigSpeed(I2C_TypeDef *I2Cx, uint32_t PeriphClock, uint32_t ClockSpeed,
729 uint32_t DutyCycle)
730 {
731 uint32_t freqrange = 0x0U;
732 uint32_t clockconfig = 0x0U;
733
734 /* Compute frequency range */
735 freqrange = __LL_I2C_FREQ_HZ_TO_MHZ(PeriphClock);
736
737 /* Configure I2Cx: Frequency range register */
738 MODIFY_REG(I2Cx->CR2, I2C_CR2_FREQ, freqrange);
739
740 /* Configure I2Cx: Rise Time register */
741 MODIFY_REG(I2Cx->TRISE, I2C_TRISE_TRISE, __LL_I2C_RISE_TIME(freqrange, ClockSpeed));
742
743 /* Configure Speed mode, Duty Cycle and Clock control register value */
744 if (ClockSpeed > LL_I2C_MAX_SPEED_STANDARD)
745 {
746 /* Set Speed mode at fast and duty cycle for Clock Speed request in fast clock range */
747 clockconfig = LL_I2C_CLOCK_SPEED_FAST_MODE | \
748 __LL_I2C_SPEED_FAST_TO_CCR(PeriphClock, ClockSpeed, DutyCycle) | \
749 DutyCycle;
750 }
751 else
752 {
753 /* Set Speed mode at standard for Clock Speed request in standard clock range */
754 clockconfig = LL_I2C_CLOCK_SPEED_STANDARD_MODE | \
755 __LL_I2C_SPEED_STANDARD_TO_CCR(PeriphClock, ClockSpeed);
756 }
757
758 /* Configure I2Cx: Clock control register */
759 MODIFY_REG(I2Cx->CCR, (I2C_CCR_FS | I2C_CCR_DUTY | I2C_CCR_CCR), clockconfig);
760 }
761
762 /**
763 * @brief Configure peripheral mode.
764 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
765 * SMBus feature is supported by the I2Cx Instance.
766 * @rmtoll CR1 SMBUS LL_I2C_SetMode\n
767 * CR1 SMBTYPE LL_I2C_SetMode\n
768 * CR1 ENARP LL_I2C_SetMode
769 * @param I2Cx I2C Instance.
770 * @param PeripheralMode This parameter can be one of the following values:
771 * @arg @ref LL_I2C_MODE_I2C
772 * @arg @ref LL_I2C_MODE_SMBUS_HOST
773 * @arg @ref LL_I2C_MODE_SMBUS_DEVICE
774 * @arg @ref LL_I2C_MODE_SMBUS_DEVICE_ARP
775 * @retval None
776 */
LL_I2C_SetMode(I2C_TypeDef * I2Cx,uint32_t PeripheralMode)777 __STATIC_INLINE void LL_I2C_SetMode(I2C_TypeDef *I2Cx, uint32_t PeripheralMode)
778 {
779 MODIFY_REG(I2Cx->CR1, I2C_CR1_SMBUS | I2C_CR1_SMBTYPE | I2C_CR1_ENARP, PeripheralMode);
780 }
781
782 /**
783 * @brief Get peripheral mode.
784 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
785 * SMBus feature is supported by the I2Cx Instance.
786 * @rmtoll CR1 SMBUS LL_I2C_GetMode\n
787 * CR1 SMBTYPE LL_I2C_GetMode\n
788 * CR1 ENARP LL_I2C_GetMode
789 * @param I2Cx I2C Instance.
790 * @retval Returned value can be one of the following values:
791 * @arg @ref LL_I2C_MODE_I2C
792 * @arg @ref LL_I2C_MODE_SMBUS_HOST
793 * @arg @ref LL_I2C_MODE_SMBUS_DEVICE
794 * @arg @ref LL_I2C_MODE_SMBUS_DEVICE_ARP
795 */
LL_I2C_GetMode(I2C_TypeDef * I2Cx)796 __STATIC_INLINE uint32_t LL_I2C_GetMode(I2C_TypeDef *I2Cx)
797 {
798 return (uint32_t)(READ_BIT(I2Cx->CR1, I2C_CR1_SMBUS | I2C_CR1_SMBTYPE | I2C_CR1_ENARP));
799 }
800
801 /**
802 * @brief Enable SMBus alert (Host or Device mode)
803 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
804 * SMBus feature is supported by the I2Cx Instance.
805 * @note SMBus Device mode:
806 * - SMBus Alert pin is drived low and
807 * Alert Response Address Header acknowledge is enabled.
808 * SMBus Host mode:
809 * - SMBus Alert pin management is supported.
810 * @rmtoll CR1 ALERT LL_I2C_EnableSMBusAlert
811 * @param I2Cx I2C Instance.
812 * @retval None
813 */
LL_I2C_EnableSMBusAlert(I2C_TypeDef * I2Cx)814 __STATIC_INLINE void LL_I2C_EnableSMBusAlert(I2C_TypeDef *I2Cx)
815 {
816 SET_BIT(I2Cx->CR1, I2C_CR1_ALERT);
817 }
818
819 /**
820 * @brief Disable SMBus alert (Host or Device mode)
821 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
822 * SMBus feature is supported by the I2Cx Instance.
823 * @note SMBus Device mode:
824 * - SMBus Alert pin is not drived (can be used as a standard GPIO) and
825 * Alert Response Address Header acknowledge is disabled.
826 * SMBus Host mode:
827 * - SMBus Alert pin management is not supported.
828 * @rmtoll CR1 ALERT LL_I2C_DisableSMBusAlert
829 * @param I2Cx I2C Instance.
830 * @retval None
831 */
LL_I2C_DisableSMBusAlert(I2C_TypeDef * I2Cx)832 __STATIC_INLINE void LL_I2C_DisableSMBusAlert(I2C_TypeDef *I2Cx)
833 {
834 CLEAR_BIT(I2Cx->CR1, I2C_CR1_ALERT);
835 }
836
837 /**
838 * @brief Check if SMBus alert (Host or Device mode) is enabled or disabled.
839 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
840 * SMBus feature is supported by the I2Cx Instance.
841 * @rmtoll CR1 ALERT LL_I2C_IsEnabledSMBusAlert
842 * @param I2Cx I2C Instance.
843 * @retval State of bit (1 or 0).
844 */
LL_I2C_IsEnabledSMBusAlert(I2C_TypeDef * I2Cx)845 __STATIC_INLINE uint32_t LL_I2C_IsEnabledSMBusAlert(I2C_TypeDef *I2Cx)
846 {
847 return (READ_BIT(I2Cx->CR1, I2C_CR1_ALERT) == (I2C_CR1_ALERT));
848 }
849
850 /**
851 * @brief Enable SMBus Packet Error Calculation (PEC).
852 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
853 * SMBus feature is supported by the I2Cx Instance.
854 * @rmtoll CR1 ENPEC LL_I2C_EnableSMBusPEC
855 * @param I2Cx I2C Instance.
856 * @retval None
857 */
LL_I2C_EnableSMBusPEC(I2C_TypeDef * I2Cx)858 __STATIC_INLINE void LL_I2C_EnableSMBusPEC(I2C_TypeDef *I2Cx)
859 {
860 SET_BIT(I2Cx->CR1, I2C_CR1_ENPEC);
861 }
862
863 /**
864 * @brief Disable SMBus Packet Error Calculation (PEC).
865 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
866 * SMBus feature is supported by the I2Cx Instance.
867 * @rmtoll CR1 ENPEC LL_I2C_DisableSMBusPEC
868 * @param I2Cx I2C Instance.
869 * @retval None
870 */
LL_I2C_DisableSMBusPEC(I2C_TypeDef * I2Cx)871 __STATIC_INLINE void LL_I2C_DisableSMBusPEC(I2C_TypeDef *I2Cx)
872 {
873 CLEAR_BIT(I2Cx->CR1, I2C_CR1_ENPEC);
874 }
875
876 /**
877 * @brief Check if SMBus Packet Error Calculation (PEC) is enabled or disabled.
878 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
879 * SMBus feature is supported by the I2Cx Instance.
880 * @rmtoll CR1 ENPEC LL_I2C_IsEnabledSMBusPEC
881 * @param I2Cx I2C Instance.
882 * @retval State of bit (1 or 0).
883 */
LL_I2C_IsEnabledSMBusPEC(I2C_TypeDef * I2Cx)884 __STATIC_INLINE uint32_t LL_I2C_IsEnabledSMBusPEC(I2C_TypeDef *I2Cx)
885 {
886 return (READ_BIT(I2Cx->CR1, I2C_CR1_ENPEC) == (I2C_CR1_ENPEC));
887 }
888
889 /**
890 * @}
891 */
892
893 /** @defgroup I2C_LL_EF_IT_Management IT_Management
894 * @{
895 */
896
897 /**
898 * @brief Enable TXE interrupt.
899 * @rmtoll CR2 ITEVTEN LL_I2C_EnableIT_TX\n
900 * CR2 ITBUFEN LL_I2C_EnableIT_TX
901 * @param I2Cx I2C Instance.
902 * @retval None
903 */
LL_I2C_EnableIT_TX(I2C_TypeDef * I2Cx)904 __STATIC_INLINE void LL_I2C_EnableIT_TX(I2C_TypeDef *I2Cx)
905 {
906 SET_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN);
907 }
908
909 /**
910 * @brief Disable TXE interrupt.
911 * @rmtoll CR2 ITEVTEN LL_I2C_DisableIT_TX\n
912 * CR2 ITBUFEN LL_I2C_DisableIT_TX
913 * @param I2Cx I2C Instance.
914 * @retval None
915 */
LL_I2C_DisableIT_TX(I2C_TypeDef * I2Cx)916 __STATIC_INLINE void LL_I2C_DisableIT_TX(I2C_TypeDef *I2Cx)
917 {
918 CLEAR_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN);
919 }
920
921 /**
922 * @brief Check if the TXE Interrupt is enabled or disabled.
923 * @rmtoll CR2 ITEVTEN LL_I2C_IsEnabledIT_TX\n
924 * CR2 ITBUFEN LL_I2C_IsEnabledIT_TX
925 * @param I2Cx I2C Instance.
926 * @retval State of bit (1 or 0).
927 */
LL_I2C_IsEnabledIT_TX(I2C_TypeDef * I2Cx)928 __STATIC_INLINE uint32_t LL_I2C_IsEnabledIT_TX(I2C_TypeDef *I2Cx)
929 {
930 return (READ_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN) == (I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN));
931 }
932
933 /**
934 * @brief Enable RXNE interrupt.
935 * @rmtoll CR2 ITEVTEN LL_I2C_EnableIT_RX\n
936 * CR2 ITBUFEN LL_I2C_EnableIT_RX
937 * @param I2Cx I2C Instance.
938 * @retval None
939 */
LL_I2C_EnableIT_RX(I2C_TypeDef * I2Cx)940 __STATIC_INLINE void LL_I2C_EnableIT_RX(I2C_TypeDef *I2Cx)
941 {
942 SET_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN);
943 }
944
945 /**
946 * @brief Disable RXNE interrupt.
947 * @rmtoll CR2 ITEVTEN LL_I2C_DisableIT_RX\n
948 * CR2 ITBUFEN LL_I2C_DisableIT_RX
949 * @param I2Cx I2C Instance.
950 * @retval None
951 */
LL_I2C_DisableIT_RX(I2C_TypeDef * I2Cx)952 __STATIC_INLINE void LL_I2C_DisableIT_RX(I2C_TypeDef *I2Cx)
953 {
954 CLEAR_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN);
955 }
956
957 /**
958 * @brief Check if the RXNE Interrupt is enabled or disabled.
959 * @rmtoll CR2 ITEVTEN LL_I2C_IsEnabledIT_RX\n
960 * CR2 ITBUFEN LL_I2C_IsEnabledIT_RX
961 * @param I2Cx I2C Instance.
962 * @retval State of bit (1 or 0).
963 */
LL_I2C_IsEnabledIT_RX(I2C_TypeDef * I2Cx)964 __STATIC_INLINE uint32_t LL_I2C_IsEnabledIT_RX(I2C_TypeDef *I2Cx)
965 {
966 return (READ_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN) == (I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN));
967 }
968
969 /**
970 * @brief Enable Events interrupts.
971 * @note Any of these events will generate interrupt :
972 * Start Bit (SB)
973 * Address sent, Address matched (ADDR)
974 * 10-bit header sent (ADD10)
975 * Stop detection (STOPF)
976 * Byte transfer finished (BTF)
977 *
978 * @note Any of these events will generate interrupt if Buffer interrupts are enabled too(using unitary function @ref LL_I2C_EnableIT_BUF()) :
979 * Receive buffer not empty (RXNE)
980 * Transmit buffer empty (TXE)
981 * @rmtoll CR2 ITEVTEN LL_I2C_EnableIT_EVT
982 * @param I2Cx I2C Instance.
983 * @retval None
984 */
LL_I2C_EnableIT_EVT(I2C_TypeDef * I2Cx)985 __STATIC_INLINE void LL_I2C_EnableIT_EVT(I2C_TypeDef *I2Cx)
986 {
987 SET_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN);
988 }
989
990 /**
991 * @brief Disable Events interrupts.
992 * @note Any of these events will generate interrupt :
993 * Start Bit (SB)
994 * Address sent, Address matched (ADDR)
995 * 10-bit header sent (ADD10)
996 * Stop detection (STOPF)
997 * Byte transfer finished (BTF)
998 * Receive buffer not empty (RXNE)
999 * Transmit buffer empty (TXE)
1000 * @rmtoll CR2 ITEVTEN LL_I2C_DisableIT_EVT
1001 * @param I2Cx I2C Instance.
1002 * @retval None
1003 */
LL_I2C_DisableIT_EVT(I2C_TypeDef * I2Cx)1004 __STATIC_INLINE void LL_I2C_DisableIT_EVT(I2C_TypeDef *I2Cx)
1005 {
1006 CLEAR_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN);
1007 }
1008
1009 /**
1010 * @brief Check if Events interrupts are enabled or disabled.
1011 * @rmtoll CR2 ITEVTEN LL_I2C_IsEnabledIT_EVT
1012 * @param I2Cx I2C Instance.
1013 * @retval State of bit (1 or 0).
1014 */
LL_I2C_IsEnabledIT_EVT(I2C_TypeDef * I2Cx)1015 __STATIC_INLINE uint32_t LL_I2C_IsEnabledIT_EVT(I2C_TypeDef *I2Cx)
1016 {
1017 return (READ_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN) == (I2C_CR2_ITEVTEN));
1018 }
1019
1020 /**
1021 * @brief Enable Buffer interrupts.
1022 * @note Any of these Buffer events will generate interrupt if Events interrupts are enabled too(using unitary function @ref LL_I2C_EnableIT_EVT()) :
1023 * Receive buffer not empty (RXNE)
1024 * Transmit buffer empty (TXE)
1025 * @rmtoll CR2 ITBUFEN LL_I2C_EnableIT_BUF
1026 * @param I2Cx I2C Instance.
1027 * @retval None
1028 */
LL_I2C_EnableIT_BUF(I2C_TypeDef * I2Cx)1029 __STATIC_INLINE void LL_I2C_EnableIT_BUF(I2C_TypeDef *I2Cx)
1030 {
1031 SET_BIT(I2Cx->CR2, I2C_CR2_ITBUFEN);
1032 }
1033
1034 /**
1035 * @brief Disable Buffer interrupts.
1036 * @note Any of these Buffer events will generate interrupt :
1037 * Receive buffer not empty (RXNE)
1038 * Transmit buffer empty (TXE)
1039 * @rmtoll CR2 ITBUFEN LL_I2C_DisableIT_BUF
1040 * @param I2Cx I2C Instance.
1041 * @retval None
1042 */
LL_I2C_DisableIT_BUF(I2C_TypeDef * I2Cx)1043 __STATIC_INLINE void LL_I2C_DisableIT_BUF(I2C_TypeDef *I2Cx)
1044 {
1045 CLEAR_BIT(I2Cx->CR2, I2C_CR2_ITBUFEN);
1046 }
1047
1048 /**
1049 * @brief Check if Buffer interrupts are enabled or disabled.
1050 * @rmtoll CR2 ITBUFEN LL_I2C_IsEnabledIT_BUF
1051 * @param I2Cx I2C Instance.
1052 * @retval State of bit (1 or 0).
1053 */
LL_I2C_IsEnabledIT_BUF(I2C_TypeDef * I2Cx)1054 __STATIC_INLINE uint32_t LL_I2C_IsEnabledIT_BUF(I2C_TypeDef *I2Cx)
1055 {
1056 return (READ_BIT(I2Cx->CR2, I2C_CR2_ITBUFEN) == (I2C_CR2_ITBUFEN));
1057 }
1058
1059 /**
1060 * @brief Enable Error interrupts.
1061 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
1062 * SMBus feature is supported by the I2Cx Instance.
1063 * @note Any of these errors will generate interrupt :
1064 * Bus Error detection (BERR)
1065 * Arbitration Loss (ARLO)
1066 * Acknowledge Failure(AF)
1067 * Overrun/Underrun (OVR)
1068 * SMBus Timeout detection (TIMEOUT)
1069 * SMBus PEC error detection (PECERR)
1070 * SMBus Alert pin event detection (SMBALERT)
1071 * @rmtoll CR2 ITERREN LL_I2C_EnableIT_ERR
1072 * @param I2Cx I2C Instance.
1073 * @retval None
1074 */
LL_I2C_EnableIT_ERR(I2C_TypeDef * I2Cx)1075 __STATIC_INLINE void LL_I2C_EnableIT_ERR(I2C_TypeDef *I2Cx)
1076 {
1077 SET_BIT(I2Cx->CR2, I2C_CR2_ITERREN);
1078 }
1079
1080 /**
1081 * @brief Disable Error interrupts.
1082 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
1083 * SMBus feature is supported by the I2Cx Instance.
1084 * @note Any of these errors will generate interrupt :
1085 * Bus Error detection (BERR)
1086 * Arbitration Loss (ARLO)
1087 * Acknowledge Failure(AF)
1088 * Overrun/Underrun (OVR)
1089 * SMBus Timeout detection (TIMEOUT)
1090 * SMBus PEC error detection (PECERR)
1091 * SMBus Alert pin event detection (SMBALERT)
1092 * @rmtoll CR2 ITERREN LL_I2C_DisableIT_ERR
1093 * @param I2Cx I2C Instance.
1094 * @retval None
1095 */
LL_I2C_DisableIT_ERR(I2C_TypeDef * I2Cx)1096 __STATIC_INLINE void LL_I2C_DisableIT_ERR(I2C_TypeDef *I2Cx)
1097 {
1098 CLEAR_BIT(I2Cx->CR2, I2C_CR2_ITERREN);
1099 }
1100
1101 /**
1102 * @brief Check if Error interrupts are enabled or disabled.
1103 * @rmtoll CR2 ITERREN LL_I2C_IsEnabledIT_ERR
1104 * @param I2Cx I2C Instance.
1105 * @retval State of bit (1 or 0).
1106 */
LL_I2C_IsEnabledIT_ERR(I2C_TypeDef * I2Cx)1107 __STATIC_INLINE uint32_t LL_I2C_IsEnabledIT_ERR(I2C_TypeDef *I2Cx)
1108 {
1109 return (READ_BIT(I2Cx->CR2, I2C_CR2_ITERREN) == (I2C_CR2_ITERREN));
1110 }
1111
1112 /**
1113 * @}
1114 */
1115
1116 /** @defgroup I2C_LL_EF_FLAG_management FLAG_management
1117 * @{
1118 */
1119
1120 /**
1121 * @brief Indicate the status of Transmit data register empty flag.
1122 * @note RESET: When next data is written in Transmit data register.
1123 * SET: When Transmit data register is empty.
1124 * @rmtoll SR1 TXE LL_I2C_IsActiveFlag_TXE
1125 * @param I2Cx I2C Instance.
1126 * @retval State of bit (1 or 0).
1127 */
LL_I2C_IsActiveFlag_TXE(I2C_TypeDef * I2Cx)1128 __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_TXE(I2C_TypeDef *I2Cx)
1129 {
1130 return (READ_BIT(I2Cx->SR1, I2C_SR1_TXE) == (I2C_SR1_TXE));
1131 }
1132
1133 /**
1134 * @brief Indicate the status of Byte Transfer Finished flag.
1135 * RESET: When Data byte transfer not done.
1136 * SET: When Data byte transfer succeeded.
1137 * @rmtoll SR1 BTF LL_I2C_IsActiveFlag_BTF
1138 * @param I2Cx I2C Instance.
1139 * @retval State of bit (1 or 0).
1140 */
LL_I2C_IsActiveFlag_BTF(I2C_TypeDef * I2Cx)1141 __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_BTF(I2C_TypeDef *I2Cx)
1142 {
1143 return (READ_BIT(I2Cx->SR1, I2C_SR1_BTF) == (I2C_SR1_BTF));
1144 }
1145
1146 /**
1147 * @brief Indicate the status of Receive data register not empty flag.
1148 * @note RESET: When Receive data register is read.
1149 * SET: When the received data is copied in Receive data register.
1150 * @rmtoll SR1 RXNE LL_I2C_IsActiveFlag_RXNE
1151 * @param I2Cx I2C Instance.
1152 * @retval State of bit (1 or 0).
1153 */
LL_I2C_IsActiveFlag_RXNE(I2C_TypeDef * I2Cx)1154 __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_RXNE(I2C_TypeDef *I2Cx)
1155 {
1156 return (READ_BIT(I2Cx->SR1, I2C_SR1_RXNE) == (I2C_SR1_RXNE));
1157 }
1158
1159 /**
1160 * @brief Indicate the status of Start Bit (master mode).
1161 * @note RESET: When No Start condition.
1162 * SET: When Start condition is generated.
1163 * @rmtoll SR1 SB LL_I2C_IsActiveFlag_SB
1164 * @param I2Cx I2C Instance.
1165 * @retval State of bit (1 or 0).
1166 */
LL_I2C_IsActiveFlag_SB(I2C_TypeDef * I2Cx)1167 __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_SB(I2C_TypeDef *I2Cx)
1168 {
1169 return (READ_BIT(I2Cx->SR1, I2C_SR1_SB) == (I2C_SR1_SB));
1170 }
1171
1172 /**
1173 * @brief Indicate the status of Address sent (master mode) or Address matched flag (slave mode).
1174 * @note RESET: Clear default value.
1175 * SET: When the address is fully sent (master mode) or when the received slave address matched with one of the enabled slave address (slave mode).
1176 * @rmtoll SR1 ADDR LL_I2C_IsActiveFlag_ADDR
1177 * @param I2Cx I2C Instance.
1178 * @retval State of bit (1 or 0).
1179 */
LL_I2C_IsActiveFlag_ADDR(I2C_TypeDef * I2Cx)1180 __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_ADDR(I2C_TypeDef *I2Cx)
1181 {
1182 return (READ_BIT(I2Cx->SR1, I2C_SR1_ADDR) == (I2C_SR1_ADDR));
1183 }
1184
1185 /**
1186 * @brief Indicate the status of 10-bit header sent (master mode).
1187 * @note RESET: When no ADD10 event occurred.
1188 * SET: When the master has sent the first address byte (header).
1189 * @rmtoll SR1 ADD10 LL_I2C_IsActiveFlag_ADD10
1190 * @param I2Cx I2C Instance.
1191 * @retval State of bit (1 or 0).
1192 */
LL_I2C_IsActiveFlag_ADD10(I2C_TypeDef * I2Cx)1193 __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_ADD10(I2C_TypeDef *I2Cx)
1194 {
1195 return (READ_BIT(I2Cx->SR1, I2C_SR1_ADD10) == (I2C_SR1_ADD10));
1196 }
1197
1198 /**
1199 * @brief Indicate the status of Acknowledge failure flag.
1200 * @note RESET: No acknowledge failure.
1201 * SET: When an acknowledge failure is received after a byte transmission.
1202 * @rmtoll SR1 AF LL_I2C_IsActiveFlag_AF
1203 * @param I2Cx I2C Instance.
1204 * @retval State of bit (1 or 0).
1205 */
LL_I2C_IsActiveFlag_AF(I2C_TypeDef * I2Cx)1206 __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_AF(I2C_TypeDef *I2Cx)
1207 {
1208 return (READ_BIT(I2Cx->SR1, I2C_SR1_AF) == (I2C_SR1_AF));
1209 }
1210
1211 /**
1212 * @brief Indicate the status of Stop detection flag (slave mode).
1213 * @note RESET: Clear default value.
1214 * SET: When a Stop condition is detected.
1215 * @rmtoll SR1 STOPF LL_I2C_IsActiveFlag_STOP
1216 * @param I2Cx I2C Instance.
1217 * @retval State of bit (1 or 0).
1218 */
LL_I2C_IsActiveFlag_STOP(I2C_TypeDef * I2Cx)1219 __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_STOP(I2C_TypeDef *I2Cx)
1220 {
1221 return (READ_BIT(I2Cx->SR1, I2C_SR1_STOPF) == (I2C_SR1_STOPF));
1222 }
1223
1224 /**
1225 * @brief Indicate the status of Bus error flag.
1226 * @note RESET: Clear default value.
1227 * SET: When a misplaced Start or Stop condition is detected.
1228 * @rmtoll SR1 BERR LL_I2C_IsActiveFlag_BERR
1229 * @param I2Cx I2C Instance.
1230 * @retval State of bit (1 or 0).
1231 */
LL_I2C_IsActiveFlag_BERR(I2C_TypeDef * I2Cx)1232 __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_BERR(I2C_TypeDef *I2Cx)
1233 {
1234 return (READ_BIT(I2Cx->SR1, I2C_SR1_BERR) == (I2C_SR1_BERR));
1235 }
1236
1237 /**
1238 * @brief Indicate the status of Arbitration lost flag.
1239 * @note RESET: Clear default value.
1240 * SET: When arbitration lost.
1241 * @rmtoll SR1 ARLO LL_I2C_IsActiveFlag_ARLO
1242 * @param I2Cx I2C Instance.
1243 * @retval State of bit (1 or 0).
1244 */
LL_I2C_IsActiveFlag_ARLO(I2C_TypeDef * I2Cx)1245 __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_ARLO(I2C_TypeDef *I2Cx)
1246 {
1247 return (READ_BIT(I2Cx->SR1, I2C_SR1_ARLO) == (I2C_SR1_ARLO));
1248 }
1249
1250 /**
1251 * @brief Indicate the status of Overrun/Underrun flag.
1252 * @note RESET: Clear default value.
1253 * SET: When an overrun/underrun error occurs (Clock Stretching Disabled).
1254 * @rmtoll SR1 OVR LL_I2C_IsActiveFlag_OVR
1255 * @param I2Cx I2C Instance.
1256 * @retval State of bit (1 or 0).
1257 */
LL_I2C_IsActiveFlag_OVR(I2C_TypeDef * I2Cx)1258 __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_OVR(I2C_TypeDef *I2Cx)
1259 {
1260 return (READ_BIT(I2Cx->SR1, I2C_SR1_OVR) == (I2C_SR1_OVR));
1261 }
1262
1263 /**
1264 * @brief Indicate the status of SMBus PEC error flag in reception.
1265 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
1266 * SMBus feature is supported by the I2Cx Instance.
1267 * @rmtoll SR1 PECERR LL_I2C_IsActiveSMBusFlag_PECERR
1268 * @param I2Cx I2C Instance.
1269 * @retval State of bit (1 or 0).
1270 */
LL_I2C_IsActiveSMBusFlag_PECERR(I2C_TypeDef * I2Cx)1271 __STATIC_INLINE uint32_t LL_I2C_IsActiveSMBusFlag_PECERR(I2C_TypeDef *I2Cx)
1272 {
1273 return (READ_BIT(I2Cx->SR1, I2C_SR1_PECERR) == (I2C_SR1_PECERR));
1274 }
1275
1276 /**
1277 * @brief Indicate the status of SMBus Timeout detection flag.
1278 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
1279 * SMBus feature is supported by the I2Cx Instance.
1280 * @rmtoll SR1 TIMEOUT LL_I2C_IsActiveSMBusFlag_TIMEOUT
1281 * @param I2Cx I2C Instance.
1282 * @retval State of bit (1 or 0).
1283 */
LL_I2C_IsActiveSMBusFlag_TIMEOUT(I2C_TypeDef * I2Cx)1284 __STATIC_INLINE uint32_t LL_I2C_IsActiveSMBusFlag_TIMEOUT(I2C_TypeDef *I2Cx)
1285 {
1286 return (READ_BIT(I2Cx->SR1, I2C_SR1_TIMEOUT) == (I2C_SR1_TIMEOUT));
1287 }
1288
1289 /**
1290 * @brief Indicate the status of SMBus alert flag.
1291 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
1292 * SMBus feature is supported by the I2Cx Instance.
1293 * @rmtoll SR1 SMBALERT LL_I2C_IsActiveSMBusFlag_ALERT
1294 * @param I2Cx I2C Instance.
1295 * @retval State of bit (1 or 0).
1296 */
LL_I2C_IsActiveSMBusFlag_ALERT(I2C_TypeDef * I2Cx)1297 __STATIC_INLINE uint32_t LL_I2C_IsActiveSMBusFlag_ALERT(I2C_TypeDef *I2Cx)
1298 {
1299 return (READ_BIT(I2Cx->SR1, I2C_SR1_SMBALERT) == (I2C_SR1_SMBALERT));
1300 }
1301
1302 /**
1303 * @brief Indicate the status of Bus Busy flag.
1304 * @note RESET: Clear default value.
1305 * SET: When a Start condition is detected.
1306 * @rmtoll SR2 BUSY LL_I2C_IsActiveFlag_BUSY
1307 * @param I2Cx I2C Instance.
1308 * @retval State of bit (1 or 0).
1309 */
LL_I2C_IsActiveFlag_BUSY(I2C_TypeDef * I2Cx)1310 __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_BUSY(I2C_TypeDef *I2Cx)
1311 {
1312 return (READ_BIT(I2Cx->SR2, I2C_SR2_BUSY) == (I2C_SR2_BUSY));
1313 }
1314
1315 /**
1316 * @brief Indicate the status of Dual flag.
1317 * @note RESET: Received address matched with OAR1.
1318 * SET: Received address matched with OAR2.
1319 * @rmtoll SR2 DUALF LL_I2C_IsActiveFlag_DUAL
1320 * @param I2Cx I2C Instance.
1321 * @retval State of bit (1 or 0).
1322 */
LL_I2C_IsActiveFlag_DUAL(I2C_TypeDef * I2Cx)1323 __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_DUAL(I2C_TypeDef *I2Cx)
1324 {
1325 return (READ_BIT(I2Cx->SR2, I2C_SR2_DUALF) == (I2C_SR2_DUALF));
1326 }
1327
1328 /**
1329 * @brief Indicate the status of SMBus Host address reception (Slave mode).
1330 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
1331 * SMBus feature is supported by the I2Cx Instance.
1332 * @note RESET: No SMBus Host address
1333 * SET: SMBus Host address received.
1334 * @note This status is cleared by hardware after a STOP condition or repeated START condition.
1335 * @rmtoll SR2 SMBHOST LL_I2C_IsActiveSMBusFlag_SMBHOST
1336 * @param I2Cx I2C Instance.
1337 * @retval State of bit (1 or 0).
1338 */
LL_I2C_IsActiveSMBusFlag_SMBHOST(I2C_TypeDef * I2Cx)1339 __STATIC_INLINE uint32_t LL_I2C_IsActiveSMBusFlag_SMBHOST(I2C_TypeDef *I2Cx)
1340 {
1341 return (READ_BIT(I2Cx->SR2, I2C_SR2_SMBHOST) == (I2C_SR2_SMBHOST));
1342 }
1343
1344 /**
1345 * @brief Indicate the status of SMBus Device default address reception (Slave mode).
1346 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
1347 * SMBus feature is supported by the I2Cx Instance.
1348 * @note RESET: No SMBus Device default address
1349 * SET: SMBus Device default address received.
1350 * @note This status is cleared by hardware after a STOP condition or repeated START condition.
1351 * @rmtoll SR2 SMBDEFAULT LL_I2C_IsActiveSMBusFlag_SMBDEFAULT
1352 * @param I2Cx I2C Instance.
1353 * @retval State of bit (1 or 0).
1354 */
LL_I2C_IsActiveSMBusFlag_SMBDEFAULT(I2C_TypeDef * I2Cx)1355 __STATIC_INLINE uint32_t LL_I2C_IsActiveSMBusFlag_SMBDEFAULT(I2C_TypeDef *I2Cx)
1356 {
1357 return (READ_BIT(I2Cx->SR2, I2C_SR2_SMBDEFAULT) == (I2C_SR2_SMBDEFAULT));
1358 }
1359
1360 /**
1361 * @brief Indicate the status of General call address reception (Slave mode).
1362 * @note RESET: No General call address
1363 * SET: General call address received.
1364 * @note This status is cleared by hardware after a STOP condition or repeated START condition.
1365 * @rmtoll SR2 GENCALL LL_I2C_IsActiveFlag_GENCALL
1366 * @param I2Cx I2C Instance.
1367 * @retval State of bit (1 or 0).
1368 */
LL_I2C_IsActiveFlag_GENCALL(I2C_TypeDef * I2Cx)1369 __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_GENCALL(I2C_TypeDef *I2Cx)
1370 {
1371 return (READ_BIT(I2Cx->SR2, I2C_SR2_GENCALL) == (I2C_SR2_GENCALL));
1372 }
1373
1374 /**
1375 * @brief Indicate the status of Master/Slave flag.
1376 * @note RESET: Slave Mode.
1377 * SET: Master Mode.
1378 * @rmtoll SR2 MSL LL_I2C_IsActiveFlag_MSL
1379 * @param I2Cx I2C Instance.
1380 * @retval State of bit (1 or 0).
1381 */
LL_I2C_IsActiveFlag_MSL(I2C_TypeDef * I2Cx)1382 __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_MSL(I2C_TypeDef *I2Cx)
1383 {
1384 return (READ_BIT(I2Cx->SR2, I2C_SR2_MSL) == (I2C_SR2_MSL));
1385 }
1386
1387 /**
1388 * @brief Clear Address Matched flag.
1389 * @note Clearing this flag is done by a read access to the I2Cx_SR1
1390 * register followed by a read access to the I2Cx_SR2 register.
1391 * @rmtoll SR1 ADDR LL_I2C_ClearFlag_ADDR
1392 * @param I2Cx I2C Instance.
1393 * @retval None
1394 */
LL_I2C_ClearFlag_ADDR(I2C_TypeDef * I2Cx)1395 __STATIC_INLINE void LL_I2C_ClearFlag_ADDR(I2C_TypeDef *I2Cx)
1396 {
1397 __IO uint32_t tmpreg;
1398 tmpreg = I2Cx->SR1;
1399 (void) tmpreg;
1400 tmpreg = I2Cx->SR2;
1401 (void) tmpreg;
1402 }
1403
1404 /**
1405 * @brief Clear Acknowledge failure flag.
1406 * @rmtoll SR1 AF LL_I2C_ClearFlag_AF
1407 * @param I2Cx I2C Instance.
1408 * @retval None
1409 */
LL_I2C_ClearFlag_AF(I2C_TypeDef * I2Cx)1410 __STATIC_INLINE void LL_I2C_ClearFlag_AF(I2C_TypeDef *I2Cx)
1411 {
1412 CLEAR_BIT(I2Cx->SR1, I2C_SR1_AF);
1413 }
1414
1415 /**
1416 * @brief Clear Stop detection flag.
1417 * @note Clearing this flag is done by a read access to the I2Cx_SR1
1418 * register followed by a write access to I2Cx_CR1 register.
1419 * @rmtoll SR1 STOPF LL_I2C_ClearFlag_STOP\n
1420 * CR1 PE LL_I2C_ClearFlag_STOP
1421 * @param I2Cx I2C Instance.
1422 * @retval None
1423 */
LL_I2C_ClearFlag_STOP(I2C_TypeDef * I2Cx)1424 __STATIC_INLINE void LL_I2C_ClearFlag_STOP(I2C_TypeDef *I2Cx)
1425 {
1426 __IO uint32_t tmpreg;
1427 tmpreg = I2Cx->SR1;
1428 (void) tmpreg;
1429 SET_BIT(I2Cx->CR1, I2C_CR1_PE);
1430 }
1431
1432 /**
1433 * @brief Clear Bus error flag.
1434 * @rmtoll SR1 BERR LL_I2C_ClearFlag_BERR
1435 * @param I2Cx I2C Instance.
1436 * @retval None
1437 */
LL_I2C_ClearFlag_BERR(I2C_TypeDef * I2Cx)1438 __STATIC_INLINE void LL_I2C_ClearFlag_BERR(I2C_TypeDef *I2Cx)
1439 {
1440 CLEAR_BIT(I2Cx->SR1, I2C_SR1_BERR);
1441 }
1442
1443 /**
1444 * @brief Clear Arbitration lost flag.
1445 * @rmtoll SR1 ARLO LL_I2C_ClearFlag_ARLO
1446 * @param I2Cx I2C Instance.
1447 * @retval None
1448 */
LL_I2C_ClearFlag_ARLO(I2C_TypeDef * I2Cx)1449 __STATIC_INLINE void LL_I2C_ClearFlag_ARLO(I2C_TypeDef *I2Cx)
1450 {
1451 CLEAR_BIT(I2Cx->SR1, I2C_SR1_ARLO);
1452 }
1453
1454 /**
1455 * @brief Clear Overrun/Underrun flag.
1456 * @rmtoll SR1 OVR LL_I2C_ClearFlag_OVR
1457 * @param I2Cx I2C Instance.
1458 * @retval None
1459 */
LL_I2C_ClearFlag_OVR(I2C_TypeDef * I2Cx)1460 __STATIC_INLINE void LL_I2C_ClearFlag_OVR(I2C_TypeDef *I2Cx)
1461 {
1462 CLEAR_BIT(I2Cx->SR1, I2C_SR1_OVR);
1463 }
1464
1465 /**
1466 * @brief Clear SMBus PEC error flag.
1467 * @rmtoll SR1 PECERR LL_I2C_ClearSMBusFlag_PECERR
1468 * @param I2Cx I2C Instance.
1469 * @retval None
1470 */
LL_I2C_ClearSMBusFlag_PECERR(I2C_TypeDef * I2Cx)1471 __STATIC_INLINE void LL_I2C_ClearSMBusFlag_PECERR(I2C_TypeDef *I2Cx)
1472 {
1473 CLEAR_BIT(I2Cx->SR1, I2C_SR1_PECERR);
1474 }
1475
1476 /**
1477 * @brief Clear SMBus Timeout detection flag.
1478 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
1479 * SMBus feature is supported by the I2Cx Instance.
1480 * @rmtoll SR1 TIMEOUT LL_I2C_ClearSMBusFlag_TIMEOUT
1481 * @param I2Cx I2C Instance.
1482 * @retval None
1483 */
LL_I2C_ClearSMBusFlag_TIMEOUT(I2C_TypeDef * I2Cx)1484 __STATIC_INLINE void LL_I2C_ClearSMBusFlag_TIMEOUT(I2C_TypeDef *I2Cx)
1485 {
1486 CLEAR_BIT(I2Cx->SR1, I2C_SR1_TIMEOUT);
1487 }
1488
1489 /**
1490 * @brief Clear SMBus Alert flag.
1491 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
1492 * SMBus feature is supported by the I2Cx Instance.
1493 * @rmtoll SR1 SMBALERT LL_I2C_ClearSMBusFlag_ALERT
1494 * @param I2Cx I2C Instance.
1495 * @retval None
1496 */
LL_I2C_ClearSMBusFlag_ALERT(I2C_TypeDef * I2Cx)1497 __STATIC_INLINE void LL_I2C_ClearSMBusFlag_ALERT(I2C_TypeDef *I2Cx)
1498 {
1499 CLEAR_BIT(I2Cx->SR1, I2C_SR1_SMBALERT);
1500 }
1501
1502 /**
1503 * @}
1504 */
1505
1506 /** @defgroup I2C_LL_EF_Data_Management Data_Management
1507 * @{
1508 */
1509
1510 /**
1511 * @brief Enable Reset of I2C peripheral.
1512 * @rmtoll CR1 SWRST LL_I2C_EnableReset
1513 * @param I2Cx I2C Instance.
1514 * @retval None
1515 */
LL_I2C_EnableReset(I2C_TypeDef * I2Cx)1516 __STATIC_INLINE void LL_I2C_EnableReset(I2C_TypeDef *I2Cx)
1517 {
1518 SET_BIT(I2Cx->CR1, I2C_CR1_SWRST);
1519 }
1520
1521 /**
1522 * @brief Disable Reset of I2C peripheral.
1523 * @rmtoll CR1 SWRST LL_I2C_DisableReset
1524 * @param I2Cx I2C Instance.
1525 * @retval None
1526 */
LL_I2C_DisableReset(I2C_TypeDef * I2Cx)1527 __STATIC_INLINE void LL_I2C_DisableReset(I2C_TypeDef *I2Cx)
1528 {
1529 CLEAR_BIT(I2Cx->CR1, I2C_CR1_SWRST);
1530 }
1531
1532 /**
1533 * @brief Check if the I2C peripheral is under reset state or not.
1534 * @rmtoll CR1 SWRST LL_I2C_IsResetEnabled
1535 * @param I2Cx I2C Instance.
1536 * @retval State of bit (1 or 0).
1537 */
LL_I2C_IsResetEnabled(I2C_TypeDef * I2Cx)1538 __STATIC_INLINE uint32_t LL_I2C_IsResetEnabled(I2C_TypeDef *I2Cx)
1539 {
1540 return (READ_BIT(I2Cx->CR1, I2C_CR1_SWRST) == (I2C_CR1_SWRST));
1541 }
1542
1543 /**
1544 * @brief Prepare the generation of a ACKnowledge or Non ACKnowledge condition after the address receive match code or next received byte.
1545 * @note Usage in Slave or Master mode.
1546 * @rmtoll CR1 ACK LL_I2C_AcknowledgeNextData
1547 * @param I2Cx I2C Instance.
1548 * @param TypeAcknowledge This parameter can be one of the following values:
1549 * @arg @ref LL_I2C_ACK
1550 * @arg @ref LL_I2C_NACK
1551 * @retval None
1552 */
LL_I2C_AcknowledgeNextData(I2C_TypeDef * I2Cx,uint32_t TypeAcknowledge)1553 __STATIC_INLINE void LL_I2C_AcknowledgeNextData(I2C_TypeDef *I2Cx, uint32_t TypeAcknowledge)
1554 {
1555 MODIFY_REG(I2Cx->CR1, I2C_CR1_ACK, TypeAcknowledge);
1556 }
1557
1558 /**
1559 * @brief Generate a START or RESTART condition
1560 * @note The START bit can be set even if bus is BUSY or I2C is in slave mode.
1561 * This action has no effect when RELOAD is set.
1562 * @rmtoll CR1 START LL_I2C_GenerateStartCondition
1563 * @param I2Cx I2C Instance.
1564 * @retval None
1565 */
LL_I2C_GenerateStartCondition(I2C_TypeDef * I2Cx)1566 __STATIC_INLINE void LL_I2C_GenerateStartCondition(I2C_TypeDef *I2Cx)
1567 {
1568 SET_BIT(I2Cx->CR1, I2C_CR1_START);
1569 }
1570
1571 /**
1572 * @brief Generate a STOP condition after the current byte transfer (master mode).
1573 * @rmtoll CR1 STOP LL_I2C_GenerateStopCondition
1574 * @param I2Cx I2C Instance.
1575 * @retval None
1576 */
LL_I2C_GenerateStopCondition(I2C_TypeDef * I2Cx)1577 __STATIC_INLINE void LL_I2C_GenerateStopCondition(I2C_TypeDef *I2Cx)
1578 {
1579 SET_BIT(I2Cx->CR1, I2C_CR1_STOP);
1580 }
1581
1582 /**
1583 * @brief Enable bit POS (master/host mode).
1584 * @note In that case, the ACK bit controls the (N)ACK of the next byte received or the PEC bit indicates that the next byte in shift register is a PEC.
1585 * @rmtoll CR1 POS LL_I2C_EnableBitPOS
1586 * @param I2Cx I2C Instance.
1587 * @retval None
1588 */
LL_I2C_EnableBitPOS(I2C_TypeDef * I2Cx)1589 __STATIC_INLINE void LL_I2C_EnableBitPOS(I2C_TypeDef *I2Cx)
1590 {
1591 SET_BIT(I2Cx->CR1, I2C_CR1_POS);
1592 }
1593
1594 /**
1595 * @brief Disable bit POS (master/host mode).
1596 * @note In that case, the ACK bit controls the (N)ACK of the current byte received or the PEC bit indicates that the current byte in shift register is a PEC.
1597 * @rmtoll CR1 POS LL_I2C_DisableBitPOS
1598 * @param I2Cx I2C Instance.
1599 * @retval None
1600 */
LL_I2C_DisableBitPOS(I2C_TypeDef * I2Cx)1601 __STATIC_INLINE void LL_I2C_DisableBitPOS(I2C_TypeDef *I2Cx)
1602 {
1603 CLEAR_BIT(I2Cx->CR1, I2C_CR1_POS);
1604 }
1605
1606 /**
1607 * @brief Check if bit POS is enabled or disabled.
1608 * @rmtoll CR1 POS LL_I2C_IsEnabledBitPOS
1609 * @param I2Cx I2C Instance.
1610 * @retval State of bit (1 or 0).
1611 */
LL_I2C_IsEnabledBitPOS(I2C_TypeDef * I2Cx)1612 __STATIC_INLINE uint32_t LL_I2C_IsEnabledBitPOS(I2C_TypeDef *I2Cx)
1613 {
1614 return (READ_BIT(I2Cx->CR1, I2C_CR1_POS) == (I2C_CR1_POS));
1615 }
1616
1617 /**
1618 * @brief Indicate the value of transfer direction.
1619 * @note RESET: Bus is in read transfer (peripheral point of view).
1620 * SET: Bus is in write transfer (peripheral point of view).
1621 * @rmtoll SR2 TRA LL_I2C_GetTransferDirection
1622 * @param I2Cx I2C Instance.
1623 * @retval Returned value can be one of the following values:
1624 * @arg @ref LL_I2C_DIRECTION_WRITE
1625 * @arg @ref LL_I2C_DIRECTION_READ
1626 */
LL_I2C_GetTransferDirection(I2C_TypeDef * I2Cx)1627 __STATIC_INLINE uint32_t LL_I2C_GetTransferDirection(I2C_TypeDef *I2Cx)
1628 {
1629 return (uint32_t)(READ_BIT(I2Cx->SR2, I2C_SR2_TRA));
1630 }
1631
1632 /**
1633 * @brief Enable DMA last transfer.
1634 * @note This action mean that next DMA EOT is the last transfer.
1635 * @rmtoll CR2 LAST LL_I2C_EnableLastDMA
1636 * @param I2Cx I2C Instance.
1637 * @retval None
1638 */
LL_I2C_EnableLastDMA(I2C_TypeDef * I2Cx)1639 __STATIC_INLINE void LL_I2C_EnableLastDMA(I2C_TypeDef *I2Cx)
1640 {
1641 SET_BIT(I2Cx->CR2, I2C_CR2_LAST);
1642 }
1643
1644 /**
1645 * @brief Disable DMA last transfer.
1646 * @note This action mean that next DMA EOT is not the last transfer.
1647 * @rmtoll CR2 LAST LL_I2C_DisableLastDMA
1648 * @param I2Cx I2C Instance.
1649 * @retval None
1650 */
LL_I2C_DisableLastDMA(I2C_TypeDef * I2Cx)1651 __STATIC_INLINE void LL_I2C_DisableLastDMA(I2C_TypeDef *I2Cx)
1652 {
1653 CLEAR_BIT(I2Cx->CR2, I2C_CR2_LAST);
1654 }
1655
1656 /**
1657 * @brief Check if DMA last transfer is enabled or disabled.
1658 * @rmtoll CR2 LAST LL_I2C_IsEnabledLastDMA
1659 * @param I2Cx I2C Instance.
1660 * @retval State of bit (1 or 0).
1661 */
LL_I2C_IsEnabledLastDMA(I2C_TypeDef * I2Cx)1662 __STATIC_INLINE uint32_t LL_I2C_IsEnabledLastDMA(I2C_TypeDef *I2Cx)
1663 {
1664 return (READ_BIT(I2Cx->CR2, I2C_CR2_LAST) == (I2C_CR2_LAST));
1665 }
1666
1667 /**
1668 * @brief Enable transfer or internal comparison of the SMBus Packet Error byte (transmission or reception mode).
1669 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
1670 * SMBus feature is supported by the I2Cx Instance.
1671 * @note This feature is cleared by hardware when the PEC byte is transferred or compared,
1672 * or by a START or STOP condition, it is also cleared by software.
1673 * @rmtoll CR1 PEC LL_I2C_EnableSMBusPECCompare
1674 * @param I2Cx I2C Instance.
1675 * @retval None
1676 */
LL_I2C_EnableSMBusPECCompare(I2C_TypeDef * I2Cx)1677 __STATIC_INLINE void LL_I2C_EnableSMBusPECCompare(I2C_TypeDef *I2Cx)
1678 {
1679 SET_BIT(I2Cx->CR1, I2C_CR1_PEC);
1680 }
1681
1682 /**
1683 * @brief Disable transfer or internal comparison of the SMBus Packet Error byte (transmission or reception mode).
1684 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
1685 * SMBus feature is supported by the I2Cx Instance.
1686 * @rmtoll CR1 PEC LL_I2C_DisableSMBusPECCompare
1687 * @param I2Cx I2C Instance.
1688 * @retval None
1689 */
LL_I2C_DisableSMBusPECCompare(I2C_TypeDef * I2Cx)1690 __STATIC_INLINE void LL_I2C_DisableSMBusPECCompare(I2C_TypeDef *I2Cx)
1691 {
1692 CLEAR_BIT(I2Cx->CR1, I2C_CR1_PEC);
1693 }
1694
1695 /**
1696 * @brief Check if the SMBus Packet Error byte transfer or internal comparison is requested or not.
1697 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
1698 * SMBus feature is supported by the I2Cx Instance.
1699 * @rmtoll CR1 PEC LL_I2C_IsEnabledSMBusPECCompare
1700 * @param I2Cx I2C Instance.
1701 * @retval State of bit (1 or 0).
1702 */
LL_I2C_IsEnabledSMBusPECCompare(I2C_TypeDef * I2Cx)1703 __STATIC_INLINE uint32_t LL_I2C_IsEnabledSMBusPECCompare(I2C_TypeDef *I2Cx)
1704 {
1705 return (READ_BIT(I2Cx->CR1, I2C_CR1_PEC) == (I2C_CR1_PEC));
1706 }
1707
1708 /**
1709 * @brief Get the SMBus Packet Error byte calculated.
1710 * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
1711 * SMBus feature is supported by the I2Cx Instance.
1712 * @rmtoll SR2 PEC LL_I2C_GetSMBusPEC
1713 * @param I2Cx I2C Instance.
1714 * @retval Value between Min_Data=0x00 and Max_Data=0xFF
1715 */
LL_I2C_GetSMBusPEC(I2C_TypeDef * I2Cx)1716 __STATIC_INLINE uint32_t LL_I2C_GetSMBusPEC(I2C_TypeDef *I2Cx)
1717 {
1718 return (uint32_t)(READ_BIT(I2Cx->SR2, I2C_SR2_PEC) >> I2C_SR2_PEC_Pos);
1719 }
1720
1721 /**
1722 * @brief Read Receive Data register.
1723 * @rmtoll DR DR LL_I2C_ReceiveData8
1724 * @param I2Cx I2C Instance.
1725 * @retval Value between Min_Data=0x0 and Max_Data=0xFF
1726 */
LL_I2C_ReceiveData8(I2C_TypeDef * I2Cx)1727 __STATIC_INLINE uint8_t LL_I2C_ReceiveData8(I2C_TypeDef *I2Cx)
1728 {
1729 return (uint8_t)(READ_BIT(I2Cx->DR, I2C_DR_DR));
1730 }
1731
1732 /**
1733 * @brief Write in Transmit Data Register .
1734 * @rmtoll DR DR LL_I2C_TransmitData8
1735 * @param I2Cx I2C Instance.
1736 * @param Data Value between Min_Data=0x0 and Max_Data=0xFF
1737 * @retval None
1738 */
LL_I2C_TransmitData8(I2C_TypeDef * I2Cx,uint8_t Data)1739 __STATIC_INLINE void LL_I2C_TransmitData8(I2C_TypeDef *I2Cx, uint8_t Data)
1740 {
1741 MODIFY_REG(I2Cx->DR, I2C_DR_DR, Data);
1742 }
1743
1744 /**
1745 * @}
1746 */
1747
1748 #if defined(USE_FULL_LL_DRIVER)
1749 /** @defgroup I2C_LL_EF_Init Initialization and de-initialization functions
1750 * @{
1751 */
1752
1753 uint32_t LL_I2C_Init(I2C_TypeDef *I2Cx, LL_I2C_InitTypeDef *I2C_InitStruct);
1754 uint32_t LL_I2C_DeInit(I2C_TypeDef *I2Cx);
1755 void LL_I2C_StructInit(LL_I2C_InitTypeDef *I2C_InitStruct);
1756
1757
1758 /**
1759 * @}
1760 */
1761 #endif /* USE_FULL_LL_DRIVER */
1762
1763 /**
1764 * @}
1765 */
1766
1767 /**
1768 * @}
1769 */
1770
1771 #endif /* I2C1 || I2C2 || I2C3 */
1772
1773 /**
1774 * @}
1775 */
1776
1777 #ifdef __cplusplus
1778 }
1779 #endif
1780
1781 #endif /* __STM32F2xx_LL_I2C_H */
1782
1783