1 /**
2 ******************************************************************************
3 * @file stm32l0xx_ll_gpio.h
4 * @author MCD Application Team
5 * @brief Header file of GPIO 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 __STM32L0xx_LL_GPIO_H
21 #define __STM32L0xx_LL_GPIO_H
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32l0xx.h"
29
30 /** @addtogroup STM32L0xx_LL_Driver
31 * @{
32 */
33
34 #if defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOH)
35
36 /** @defgroup GPIO_LL GPIO
37 * @{
38 */
39
40 /* Private types -------------------------------------------------------------*/
41 /* Private variables ---------------------------------------------------------*/
42 /* Private constants ---------------------------------------------------------*/
43 /* Private macros ------------------------------------------------------------*/
44 #if defined(USE_FULL_LL_DRIVER)
45 /** @defgroup GPIO_LL_Private_Macros GPIO Private Macros
46 * @{
47 */
48
49 /**
50 * @}
51 */
52 #endif /*USE_FULL_LL_DRIVER*/
53
54 /* Exported types ------------------------------------------------------------*/
55 #if defined(USE_FULL_LL_DRIVER)
56 /** @defgroup GPIO_LL_ES_INIT GPIO Exported Init structures
57 * @{
58 */
59
60 /**
61 * @brief LL GPIO Init Structure definition
62 */
63 typedef struct
64 {
65 uint32_t Pin; /*!< Specifies the GPIO pins to be configured.
66 This parameter can be any value of @ref GPIO_LL_EC_PIN */
67
68 uint32_t Mode; /*!< Specifies the operating mode for the selected pins.
69 This parameter can be a value of @ref GPIO_LL_EC_MODE.
70
71 GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinMode().*/
72
73 uint32_t Speed; /*!< Specifies the speed for the selected pins.
74 This parameter can be a value of @ref GPIO_LL_EC_SPEED.
75
76 GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinSpeed().*/
77
78 uint32_t OutputType; /*!< Specifies the operating output type for the selected pins.
79 This parameter can be a value of @ref GPIO_LL_EC_OUTPUT.
80
81 GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinOutputType().*/
82
83 uint32_t Pull; /*!< Specifies the operating Pull-up/Pull down for the selected pins.
84 This parameter can be a value of @ref GPIO_LL_EC_PULL.
85
86 GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinPull().*/
87
88 uint32_t Alternate; /*!< Specifies the Peripheral to be connected to the selected pins.
89 This parameter can be a value of @ref GPIO_LL_EC_AF.
90
91 GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetAFPin_0_7() and LL_GPIO_SetAFPin_8_15().*/
92 } LL_GPIO_InitTypeDef;
93
94 /**
95 * @}
96 */
97 #endif /* USE_FULL_LL_DRIVER */
98
99 /* Exported constants --------------------------------------------------------*/
100 /** @defgroup GPIO_LL_Exported_Constants GPIO Exported Constants
101 * @{
102 */
103
104 /** @defgroup GPIO_LL_EC_PIN PIN
105 * @{
106 */
107 #define LL_GPIO_PIN_0 GPIO_BSRR_BS_0 /*!< Select pin 0 */
108 #define LL_GPIO_PIN_1 GPIO_BSRR_BS_1 /*!< Select pin 1 */
109 #define LL_GPIO_PIN_2 GPIO_BSRR_BS_2 /*!< Select pin 2 */
110 #define LL_GPIO_PIN_3 GPIO_BSRR_BS_3 /*!< Select pin 3 */
111 #define LL_GPIO_PIN_4 GPIO_BSRR_BS_4 /*!< Select pin 4 */
112 #define LL_GPIO_PIN_5 GPIO_BSRR_BS_5 /*!< Select pin 5 */
113 #define LL_GPIO_PIN_6 GPIO_BSRR_BS_6 /*!< Select pin 6 */
114 #define LL_GPIO_PIN_7 GPIO_BSRR_BS_7 /*!< Select pin 7 */
115 #define LL_GPIO_PIN_8 GPIO_BSRR_BS_8 /*!< Select pin 8 */
116 #define LL_GPIO_PIN_9 GPIO_BSRR_BS_9 /*!< Select pin 9 */
117 #define LL_GPIO_PIN_10 GPIO_BSRR_BS_10 /*!< Select pin 10 */
118 #define LL_GPIO_PIN_11 GPIO_BSRR_BS_11 /*!< Select pin 11 */
119 #define LL_GPIO_PIN_12 GPIO_BSRR_BS_12 /*!< Select pin 12 */
120 #define LL_GPIO_PIN_13 GPIO_BSRR_BS_13 /*!< Select pin 13 */
121 #define LL_GPIO_PIN_14 GPIO_BSRR_BS_14 /*!< Select pin 14 */
122 #define LL_GPIO_PIN_15 GPIO_BSRR_BS_15 /*!< Select pin 15 */
123 #define LL_GPIO_PIN_ALL (GPIO_BSRR_BS_0 | GPIO_BSRR_BS_1 | GPIO_BSRR_BS_2 | \
124 GPIO_BSRR_BS_3 | GPIO_BSRR_BS_4 | GPIO_BSRR_BS_5 | \
125 GPIO_BSRR_BS_6 | GPIO_BSRR_BS_7 | GPIO_BSRR_BS_8 | \
126 GPIO_BSRR_BS_9 | GPIO_BSRR_BS_10 | GPIO_BSRR_BS_11 | \
127 GPIO_BSRR_BS_12 | GPIO_BSRR_BS_13 | GPIO_BSRR_BS_14 | \
128 GPIO_BSRR_BS_15) /*!< Select all pins */
129 /**
130 * @}
131 */
132
133 /** @defgroup GPIO_LL_EC_MODE Mode
134 * @{
135 */
136 #define LL_GPIO_MODE_INPUT (0x00000000U) /*!< Select input mode */
137 #define LL_GPIO_MODE_OUTPUT GPIO_MODER_MODE0_0 /*!< Select output mode */
138 #define LL_GPIO_MODE_ALTERNATE GPIO_MODER_MODE0_1 /*!< Select alternate function mode */
139 #define LL_GPIO_MODE_ANALOG GPIO_MODER_MODE0 /*!< Select analog mode */
140 /**
141 * @}
142 */
143
144 /** @defgroup GPIO_LL_EC_OUTPUT Output Type
145 * @{
146 */
147 #define LL_GPIO_OUTPUT_PUSHPULL (0x00000000U) /*!< Select push-pull as output type */
148 #define LL_GPIO_OUTPUT_OPENDRAIN GPIO_OTYPER_OT_0 /*!< Select open-drain as output type */
149 /**
150 * @}
151 */
152
153 /** @defgroup GPIO_LL_EC_SPEED Output Speed
154 * @{
155 */
156 #define LL_GPIO_SPEED_FREQ_LOW (0x00000000U) /*!< Select I/O low output speed */
157 #define LL_GPIO_SPEED_FREQ_MEDIUM GPIO_OSPEEDER_OSPEED0_0 /*!< Select I/O medium output speed */
158 #define LL_GPIO_SPEED_FREQ_HIGH GPIO_OSPEEDER_OSPEED0_1 /*!< Select I/O fast output speed */
159 #define LL_GPIO_SPEED_FREQ_VERY_HIGH GPIO_OSPEEDER_OSPEED0 /*!< Select I/O high output speed */
160 /**
161 * @}
162 */
163 #define LL_GPIO_SPEED_LOW LL_GPIO_SPEED_FREQ_LOW
164 #define LL_GPIO_SPEED_MEDIUM LL_GPIO_SPEED_FREQ_MEDIUM
165 #define LL_GPIO_SPEED_FAST LL_GPIO_SPEED_FREQ_HIGH
166 #define LL_GPIO_SPEED_HIGH LL_GPIO_SPEED_FREQ_VERY_HIGH
167
168 /** @defgroup GPIO_LL_EC_PULL Pull Up Pull Down
169 * @{
170 */
171 #define LL_GPIO_PULL_NO (0x00000000U) /*!< Select I/O no pull */
172 #define LL_GPIO_PULL_UP GPIO_PUPDR_PUPD0_0 /*!< Select I/O pull up */
173 #define LL_GPIO_PULL_DOWN GPIO_PUPDR_PUPD0_1 /*!< Select I/O pull down */
174 /**
175 * @}
176 */
177
178 /** @defgroup GPIO_LL_EC_AF Alternate Function
179 * @{
180 */
181 #define LL_GPIO_AF_0 (0x0000000U) /*!< Select alternate function 0 */
182 #define LL_GPIO_AF_1 (0x0000001U) /*!< Select alternate function 1 */
183 #define LL_GPIO_AF_2 (0x0000002U) /*!< Select alternate function 2 */
184 #define LL_GPIO_AF_3 (0x0000003U) /*!< Select alternate function 3 */
185 #define LL_GPIO_AF_4 (0x0000004U) /*!< Select alternate function 4 */
186 #define LL_GPIO_AF_5 (0x0000005U) /*!< Select alternate function 5 */
187 #define LL_GPIO_AF_6 (0x0000006U) /*!< Select alternate function 6 */
188 #define LL_GPIO_AF_7 (0x0000007U) /*!< Select alternate function 7 */
189 /**
190 * @}
191 */
192
193 /**
194 * @}
195 */
196
197 /* Exported macro ------------------------------------------------------------*/
198 /** @defgroup GPIO_LL_Exported_Macros GPIO Exported Macros
199 * @{
200 */
201
202 /** @defgroup GPIO_LL_EM_WRITE_READ Common Write and read registers Macros
203 * @{
204 */
205
206 /**
207 * @brief Write a value in GPIO register
208 * @param __INSTANCE__ GPIO Instance
209 * @param __REG__ Register to be written
210 * @param __VALUE__ Value to be written in the register
211 * @retval None
212 */
213 #define LL_GPIO_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
214
215 /**
216 * @brief Read a value in GPIO register
217 * @param __INSTANCE__ GPIO Instance
218 * @param __REG__ Register to be read
219 * @retval Register value
220 */
221 #define LL_GPIO_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
222 /**
223 * @}
224 */
225
226 /**
227 * @}
228 */
229
230 /* Exported functions --------------------------------------------------------*/
231 /** @defgroup GPIO_LL_Exported_Functions GPIO Exported Functions
232 * @{
233 */
234
235 /** @defgroup GPIO_LL_EF_Port_Configuration Port Configuration
236 * @{
237 */
238
239 /**
240 * @brief Configure gpio mode for a dedicated pin on dedicated port.
241 * @note I/O mode can be Input mode, General purpose output, Alternate function mode or Analog.
242 * @note Warning: only one pin can be passed as parameter.
243 * @rmtoll MODER MODEy LL_GPIO_SetPinMode
244 * @param GPIOx GPIO Port
245 * @param Pin This parameter can be one of the following values:
246 * @arg @ref LL_GPIO_PIN_0
247 * @arg @ref LL_GPIO_PIN_1
248 * @arg @ref LL_GPIO_PIN_2
249 * @arg @ref LL_GPIO_PIN_3
250 * @arg @ref LL_GPIO_PIN_4
251 * @arg @ref LL_GPIO_PIN_5
252 * @arg @ref LL_GPIO_PIN_6
253 * @arg @ref LL_GPIO_PIN_7
254 * @arg @ref LL_GPIO_PIN_8
255 * @arg @ref LL_GPIO_PIN_9
256 * @arg @ref LL_GPIO_PIN_10
257 * @arg @ref LL_GPIO_PIN_11
258 * @arg @ref LL_GPIO_PIN_12
259 * @arg @ref LL_GPIO_PIN_13
260 * @arg @ref LL_GPIO_PIN_14
261 * @arg @ref LL_GPIO_PIN_15
262 * @param Mode This parameter can be one of the following values:
263 * @arg @ref LL_GPIO_MODE_INPUT
264 * @arg @ref LL_GPIO_MODE_OUTPUT
265 * @arg @ref LL_GPIO_MODE_ALTERNATE
266 * @arg @ref LL_GPIO_MODE_ANALOG
267 * @retval None
268 */
LL_GPIO_SetPinMode(GPIO_TypeDef * GPIOx,uint32_t Pin,uint32_t Mode)269 __STATIC_INLINE void LL_GPIO_SetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Mode)
270 {
271 MODIFY_REG(GPIOx->MODER, ((Pin * Pin) * GPIO_MODER_MODE0), ((Pin * Pin) * Mode));
272 }
273
274 /**
275 * @brief Return gpio mode for a dedicated pin on dedicated port.
276 * @note I/O mode can be Input mode, General purpose output, Alternate function mode or Analog.
277 * @note Warning: only one pin can be passed as parameter.
278 * @rmtoll MODER MODEy LL_GPIO_GetPinMode
279 * @param GPIOx GPIO Port
280 * @param Pin This parameter can be one of the following values:
281 * @arg @ref LL_GPIO_PIN_0
282 * @arg @ref LL_GPIO_PIN_1
283 * @arg @ref LL_GPIO_PIN_2
284 * @arg @ref LL_GPIO_PIN_3
285 * @arg @ref LL_GPIO_PIN_4
286 * @arg @ref LL_GPIO_PIN_5
287 * @arg @ref LL_GPIO_PIN_6
288 * @arg @ref LL_GPIO_PIN_7
289 * @arg @ref LL_GPIO_PIN_8
290 * @arg @ref LL_GPIO_PIN_9
291 * @arg @ref LL_GPIO_PIN_10
292 * @arg @ref LL_GPIO_PIN_11
293 * @arg @ref LL_GPIO_PIN_12
294 * @arg @ref LL_GPIO_PIN_13
295 * @arg @ref LL_GPIO_PIN_14
296 * @arg @ref LL_GPIO_PIN_15
297 * @retval Returned value can be one of the following values:
298 * @arg @ref LL_GPIO_MODE_INPUT
299 * @arg @ref LL_GPIO_MODE_OUTPUT
300 * @arg @ref LL_GPIO_MODE_ALTERNATE
301 * @arg @ref LL_GPIO_MODE_ANALOG
302 */
LL_GPIO_GetPinMode(GPIO_TypeDef * GPIOx,uint32_t Pin)303 __STATIC_INLINE uint32_t LL_GPIO_GetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin)
304 {
305 return (uint32_t)(READ_BIT(GPIOx->MODER, ((Pin * Pin) * GPIO_MODER_MODE0)) / (Pin * Pin));
306 }
307
308 /**
309 * @brief Configure gpio output type for several pins on dedicated port.
310 * @note Output type as to be set when gpio pin is in output or
311 * alternate modes. Possible type are Push-pull or Open-drain.
312 * @rmtoll OTYPER OTy LL_GPIO_SetPinOutputType
313 * @param GPIOx GPIO Port
314 * @param PinMask This parameter can be a combination of the following values:
315 * @arg @ref LL_GPIO_PIN_0
316 * @arg @ref LL_GPIO_PIN_1
317 * @arg @ref LL_GPIO_PIN_2
318 * @arg @ref LL_GPIO_PIN_3
319 * @arg @ref LL_GPIO_PIN_4
320 * @arg @ref LL_GPIO_PIN_5
321 * @arg @ref LL_GPIO_PIN_6
322 * @arg @ref LL_GPIO_PIN_7
323 * @arg @ref LL_GPIO_PIN_8
324 * @arg @ref LL_GPIO_PIN_9
325 * @arg @ref LL_GPIO_PIN_10
326 * @arg @ref LL_GPIO_PIN_11
327 * @arg @ref LL_GPIO_PIN_12
328 * @arg @ref LL_GPIO_PIN_13
329 * @arg @ref LL_GPIO_PIN_14
330 * @arg @ref LL_GPIO_PIN_15
331 * @arg @ref LL_GPIO_PIN_ALL
332 * @param OutputType This parameter can be one of the following values:
333 * @arg @ref LL_GPIO_OUTPUT_PUSHPULL
334 * @arg @ref LL_GPIO_OUTPUT_OPENDRAIN
335 * @retval None
336 */
LL_GPIO_SetPinOutputType(GPIO_TypeDef * GPIOx,uint32_t PinMask,uint32_t OutputType)337 __STATIC_INLINE void LL_GPIO_SetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t PinMask, uint32_t OutputType)
338 {
339 MODIFY_REG(GPIOx->OTYPER, PinMask, (PinMask * OutputType));
340 }
341
342 /**
343 * @brief Return gpio output type for several pins on dedicated port.
344 * @note Output type as to be set when gpio pin is in output or
345 * alternate modes. Possible type are Push-pull or Open-drain.
346 * @note Warning: only one pin can be passed as parameter.
347 * @rmtoll OTYPER OTy LL_GPIO_GetPinOutputType
348 * @param GPIOx GPIO Port
349 * @param Pin This parameter can be one of the following values:
350 * @arg @ref LL_GPIO_PIN_0
351 * @arg @ref LL_GPIO_PIN_1
352 * @arg @ref LL_GPIO_PIN_2
353 * @arg @ref LL_GPIO_PIN_3
354 * @arg @ref LL_GPIO_PIN_4
355 * @arg @ref LL_GPIO_PIN_5
356 * @arg @ref LL_GPIO_PIN_6
357 * @arg @ref LL_GPIO_PIN_7
358 * @arg @ref LL_GPIO_PIN_8
359 * @arg @ref LL_GPIO_PIN_9
360 * @arg @ref LL_GPIO_PIN_10
361 * @arg @ref LL_GPIO_PIN_11
362 * @arg @ref LL_GPIO_PIN_12
363 * @arg @ref LL_GPIO_PIN_13
364 * @arg @ref LL_GPIO_PIN_14
365 * @arg @ref LL_GPIO_PIN_15
366 * @arg @ref LL_GPIO_PIN_ALL
367 * @retval Returned value can be one of the following values:
368 * @arg @ref LL_GPIO_OUTPUT_PUSHPULL
369 * @arg @ref LL_GPIO_OUTPUT_OPENDRAIN
370 */
LL_GPIO_GetPinOutputType(GPIO_TypeDef * GPIOx,uint32_t Pin)371 __STATIC_INLINE uint32_t LL_GPIO_GetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t Pin)
372 {
373 return (uint32_t)(READ_BIT(GPIOx->OTYPER, Pin) / Pin);
374 }
375
376 /**
377 * @brief Configure gpio speed for a dedicated pin on dedicated port.
378 * @note I/O speed can be Low, Medium, Fast or High speed.
379 * @note Warning: only one pin can be passed as parameter.
380 * @note Refer to datasheet for frequency specifications and the power
381 * supply and load conditions for each speed.
382 * @rmtoll OSPEEDR OSPEEDy LL_GPIO_SetPinSpeed
383 * @param GPIOx GPIO Port
384 * @param Pin This parameter can be one of the following values:
385 * @arg @ref LL_GPIO_PIN_0
386 * @arg @ref LL_GPIO_PIN_1
387 * @arg @ref LL_GPIO_PIN_2
388 * @arg @ref LL_GPIO_PIN_3
389 * @arg @ref LL_GPIO_PIN_4
390 * @arg @ref LL_GPIO_PIN_5
391 * @arg @ref LL_GPIO_PIN_6
392 * @arg @ref LL_GPIO_PIN_7
393 * @arg @ref LL_GPIO_PIN_8
394 * @arg @ref LL_GPIO_PIN_9
395 * @arg @ref LL_GPIO_PIN_10
396 * @arg @ref LL_GPIO_PIN_11
397 * @arg @ref LL_GPIO_PIN_12
398 * @arg @ref LL_GPIO_PIN_13
399 * @arg @ref LL_GPIO_PIN_14
400 * @arg @ref LL_GPIO_PIN_15
401 * @param Speed This parameter can be one of the following values:
402 * @arg @ref LL_GPIO_SPEED_FREQ_LOW
403 * @arg @ref LL_GPIO_SPEED_FREQ_MEDIUM
404 * @arg @ref LL_GPIO_SPEED_FREQ_HIGH
405 * @arg @ref LL_GPIO_SPEED_FREQ_VERY_HIGH
406 * @retval None
407 */
LL_GPIO_SetPinSpeed(GPIO_TypeDef * GPIOx,uint32_t Pin,uint32_t Speed)408 __STATIC_INLINE void LL_GPIO_SetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Speed)
409 {
410 MODIFY_REG(GPIOx->OSPEEDR, ((Pin * Pin) * GPIO_OSPEEDER_OSPEED0), ((Pin * Pin) * Speed));
411 }
412
413 /**
414 * @brief Return gpio speed for a dedicated pin on dedicated port.
415 * @note I/O speed can be Low, Medium, Fast or High speed.
416 * @note Warning: only one pin can be passed as parameter.
417 * @note Refer to datasheet for frequency specifications and the power
418 * supply and load conditions for each speed.
419 * @rmtoll OSPEEDR OSPEEDy LL_GPIO_GetPinSpeed
420 * @param GPIOx GPIO Port
421 * @param Pin This parameter can be one of the following values:
422 * @arg @ref LL_GPIO_PIN_0
423 * @arg @ref LL_GPIO_PIN_1
424 * @arg @ref LL_GPIO_PIN_2
425 * @arg @ref LL_GPIO_PIN_3
426 * @arg @ref LL_GPIO_PIN_4
427 * @arg @ref LL_GPIO_PIN_5
428 * @arg @ref LL_GPIO_PIN_6
429 * @arg @ref LL_GPIO_PIN_7
430 * @arg @ref LL_GPIO_PIN_8
431 * @arg @ref LL_GPIO_PIN_9
432 * @arg @ref LL_GPIO_PIN_10
433 * @arg @ref LL_GPIO_PIN_11
434 * @arg @ref LL_GPIO_PIN_12
435 * @arg @ref LL_GPIO_PIN_13
436 * @arg @ref LL_GPIO_PIN_14
437 * @arg @ref LL_GPIO_PIN_15
438 * @retval Returned value can be one of the following values:
439 * @arg @ref LL_GPIO_SPEED_FREQ_LOW
440 * @arg @ref LL_GPIO_SPEED_FREQ_MEDIUM
441 * @arg @ref LL_GPIO_SPEED_FREQ_HIGH
442 * @arg @ref LL_GPIO_SPEED_FREQ_VERY_HIGH
443 */
LL_GPIO_GetPinSpeed(GPIO_TypeDef * GPIOx,uint32_t Pin)444 __STATIC_INLINE uint32_t LL_GPIO_GetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin)
445 {
446 return (uint32_t)(READ_BIT(GPIOx->OSPEEDR, ((Pin * Pin) * GPIO_OSPEEDER_OSPEED0)) / (Pin * Pin));
447 }
448
449 /**
450 * @brief Configure gpio pull-up or pull-down for a dedicated pin on a dedicated port.
451 * @note Warning: only one pin can be passed as parameter.
452 * @rmtoll PUPDR PUPDy LL_GPIO_SetPinPull
453 * @param GPIOx GPIO Port
454 * @param Pin This parameter can be one of the following values:
455 * @arg @ref LL_GPIO_PIN_0
456 * @arg @ref LL_GPIO_PIN_1
457 * @arg @ref LL_GPIO_PIN_2
458 * @arg @ref LL_GPIO_PIN_3
459 * @arg @ref LL_GPIO_PIN_4
460 * @arg @ref LL_GPIO_PIN_5
461 * @arg @ref LL_GPIO_PIN_6
462 * @arg @ref LL_GPIO_PIN_7
463 * @arg @ref LL_GPIO_PIN_8
464 * @arg @ref LL_GPIO_PIN_9
465 * @arg @ref LL_GPIO_PIN_10
466 * @arg @ref LL_GPIO_PIN_11
467 * @arg @ref LL_GPIO_PIN_12
468 * @arg @ref LL_GPIO_PIN_13
469 * @arg @ref LL_GPIO_PIN_14
470 * @arg @ref LL_GPIO_PIN_15
471 * @param Pull This parameter can be one of the following values:
472 * @arg @ref LL_GPIO_PULL_NO
473 * @arg @ref LL_GPIO_PULL_UP
474 * @arg @ref LL_GPIO_PULL_DOWN
475 * @retval None
476 */
LL_GPIO_SetPinPull(GPIO_TypeDef * GPIOx,uint32_t Pin,uint32_t Pull)477 __STATIC_INLINE void LL_GPIO_SetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Pull)
478 {
479 MODIFY_REG(GPIOx->PUPDR, ((Pin * Pin) * GPIO_PUPDR_PUPD0), ((Pin * Pin) * Pull));
480 }
481
482 /**
483 * @brief Return gpio pull-up or pull-down for a dedicated pin on a dedicated port
484 * @note Warning: only one pin can be passed as parameter.
485 * @rmtoll PUPDR PUPDy LL_GPIO_GetPinPull
486 * @param GPIOx GPIO Port
487 * @param Pin This parameter can be one of the following values:
488 * @arg @ref LL_GPIO_PIN_0
489 * @arg @ref LL_GPIO_PIN_1
490 * @arg @ref LL_GPIO_PIN_2
491 * @arg @ref LL_GPIO_PIN_3
492 * @arg @ref LL_GPIO_PIN_4
493 * @arg @ref LL_GPIO_PIN_5
494 * @arg @ref LL_GPIO_PIN_6
495 * @arg @ref LL_GPIO_PIN_7
496 * @arg @ref LL_GPIO_PIN_8
497 * @arg @ref LL_GPIO_PIN_9
498 * @arg @ref LL_GPIO_PIN_10
499 * @arg @ref LL_GPIO_PIN_11
500 * @arg @ref LL_GPIO_PIN_12
501 * @arg @ref LL_GPIO_PIN_13
502 * @arg @ref LL_GPIO_PIN_14
503 * @arg @ref LL_GPIO_PIN_15
504 * @retval Returned value can be one of the following values:
505 * @arg @ref LL_GPIO_PULL_NO
506 * @arg @ref LL_GPIO_PULL_UP
507 * @arg @ref LL_GPIO_PULL_DOWN
508 */
LL_GPIO_GetPinPull(GPIO_TypeDef * GPIOx,uint32_t Pin)509 __STATIC_INLINE uint32_t LL_GPIO_GetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin)
510 {
511 return (uint32_t)(READ_BIT(GPIOx->PUPDR, ((Pin * Pin) * GPIO_PUPDR_PUPD0)) / (Pin * Pin));
512 }
513
514 /**
515 * @brief Configure gpio alternate function of a dedicated pin from 0 to 7 for a dedicated port.
516 * @note Possible values are from AF0 to AF7 depending on target.
517 * @note Warning: only one pin can be passed as parameter.
518 * @rmtoll AFRL AFSELy LL_GPIO_SetAFPin_0_7
519 * @param GPIOx GPIO Port
520 * @param Pin This parameter can be one of the following values:
521 * @arg @ref LL_GPIO_PIN_0
522 * @arg @ref LL_GPIO_PIN_1
523 * @arg @ref LL_GPIO_PIN_2
524 * @arg @ref LL_GPIO_PIN_3
525 * @arg @ref LL_GPIO_PIN_4
526 * @arg @ref LL_GPIO_PIN_5
527 * @arg @ref LL_GPIO_PIN_6
528 * @arg @ref LL_GPIO_PIN_7
529 * @param Alternate This parameter can be one of the following values:
530 * @arg @ref LL_GPIO_AF_0
531 * @arg @ref LL_GPIO_AF_1
532 * @arg @ref LL_GPIO_AF_2
533 * @arg @ref LL_GPIO_AF_3
534 * @arg @ref LL_GPIO_AF_4
535 * @arg @ref LL_GPIO_AF_5
536 * @arg @ref LL_GPIO_AF_6
537 * @arg @ref LL_GPIO_AF_7
538 * @retval None
539 */
LL_GPIO_SetAFPin_0_7(GPIO_TypeDef * GPIOx,uint32_t Pin,uint32_t Alternate)540 __STATIC_INLINE void LL_GPIO_SetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate)
541 {
542 MODIFY_REG(GPIOx->AFR[0], ((((Pin * Pin) * Pin) * Pin) * GPIO_AFRL_AFSEL0),
543 ((((Pin * Pin) * Pin) * Pin) * Alternate));
544 }
545
546 /**
547 * @brief Return gpio alternate function of a dedicated pin from 0 to 7 for a dedicated port.
548 * @rmtoll AFRL AFSELy LL_GPIO_GetAFPin_0_7
549 * @param GPIOx GPIO Port
550 * @param Pin This parameter can be one of the following values:
551 * @arg @ref LL_GPIO_PIN_0
552 * @arg @ref LL_GPIO_PIN_1
553 * @arg @ref LL_GPIO_PIN_2
554 * @arg @ref LL_GPIO_PIN_3
555 * @arg @ref LL_GPIO_PIN_4
556 * @arg @ref LL_GPIO_PIN_5
557 * @arg @ref LL_GPIO_PIN_6
558 * @arg @ref LL_GPIO_PIN_7
559 * @retval Returned value can be one of the following values:
560 * @arg @ref LL_GPIO_AF_0
561 * @arg @ref LL_GPIO_AF_1
562 * @arg @ref LL_GPIO_AF_2
563 * @arg @ref LL_GPIO_AF_3
564 * @arg @ref LL_GPIO_AF_4
565 * @arg @ref LL_GPIO_AF_5
566 * @arg @ref LL_GPIO_AF_6
567 * @arg @ref LL_GPIO_AF_7
568 */
LL_GPIO_GetAFPin_0_7(GPIO_TypeDef * GPIOx,uint32_t Pin)569 __STATIC_INLINE uint32_t LL_GPIO_GetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin)
570 {
571 return (uint32_t)(READ_BIT(GPIOx->AFR[0],
572 ((((Pin * Pin) * Pin) * Pin) * GPIO_AFRL_AFSEL0)) / (((Pin * Pin) * Pin) * Pin));
573 }
574
575 /**
576 * @brief Configure gpio alternate function of a dedicated pin from 8 to 15 for a dedicated port.
577 * @note Possible values are from AF0 to AF7 depending on target.
578 * @note Warning: only one pin can be passed as parameter.
579 * @rmtoll AFRH AFSELy LL_GPIO_SetAFPin_8_15
580 * @param GPIOx GPIO Port
581 * @param Pin This parameter can be one of the following values:
582 * @arg @ref LL_GPIO_PIN_8
583 * @arg @ref LL_GPIO_PIN_9
584 * @arg @ref LL_GPIO_PIN_10
585 * @arg @ref LL_GPIO_PIN_11
586 * @arg @ref LL_GPIO_PIN_12
587 * @arg @ref LL_GPIO_PIN_13
588 * @arg @ref LL_GPIO_PIN_14
589 * @arg @ref LL_GPIO_PIN_15
590 * @param Alternate This parameter can be one of the following values:
591 * @arg @ref LL_GPIO_AF_0
592 * @arg @ref LL_GPIO_AF_1
593 * @arg @ref LL_GPIO_AF_2
594 * @arg @ref LL_GPIO_AF_3
595 * @arg @ref LL_GPIO_AF_4
596 * @arg @ref LL_GPIO_AF_5
597 * @arg @ref LL_GPIO_AF_6
598 * @arg @ref LL_GPIO_AF_7
599 * @retval None
600 */
LL_GPIO_SetAFPin_8_15(GPIO_TypeDef * GPIOx,uint32_t Pin,uint32_t Alternate)601 __STATIC_INLINE void LL_GPIO_SetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate)
602 {
603 MODIFY_REG(GPIOx->AFR[1], (((((Pin >> 8U) * (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)) * GPIO_AFRH_AFSEL8),
604 (((((Pin >> 8U) * (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)) * Alternate));
605 }
606
607 /**
608 * @brief Return gpio alternate function of a dedicated pin from 8 to 15 for a dedicated port.
609 * @note Possible values are from AF0 to AF7 depending on target.
610 * @rmtoll AFRH AFSELy LL_GPIO_GetAFPin_8_15
611 * @param GPIOx GPIO Port
612 * @param Pin This parameter can be one of the following values:
613 * @arg @ref LL_GPIO_PIN_8
614 * @arg @ref LL_GPIO_PIN_9
615 * @arg @ref LL_GPIO_PIN_10
616 * @arg @ref LL_GPIO_PIN_11
617 * @arg @ref LL_GPIO_PIN_12
618 * @arg @ref LL_GPIO_PIN_13
619 * @arg @ref LL_GPIO_PIN_14
620 * @arg @ref LL_GPIO_PIN_15
621 * @retval Returned value can be one of the following values:
622 * @arg @ref LL_GPIO_AF_0
623 * @arg @ref LL_GPIO_AF_1
624 * @arg @ref LL_GPIO_AF_2
625 * @arg @ref LL_GPIO_AF_3
626 * @arg @ref LL_GPIO_AF_4
627 * @arg @ref LL_GPIO_AF_5
628 * @arg @ref LL_GPIO_AF_6
629 * @arg @ref LL_GPIO_AF_7
630 */
LL_GPIO_GetAFPin_8_15(GPIO_TypeDef * GPIOx,uint32_t Pin)631 __STATIC_INLINE uint32_t LL_GPIO_GetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin)
632 {
633 return (uint32_t)(READ_BIT(GPIOx->AFR[1],
634 (((((Pin >> 8U) * (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)) * GPIO_AFRH_AFSEL8)) / ((((Pin >> 8U) *
635 (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)));
636 }
637
638
639 /**
640 * @brief Lock configuration of several pins for a dedicated port.
641 * @note When the lock sequence has been applied on a port bit, the
642 * value of this port bit can no longer be modified until the
643 * next reset.
644 * @note Each lock bit freezes a specific configuration register
645 * (control and alternate function registers).
646 * @rmtoll LCKR LCKK LL_GPIO_LockPin
647 * @param GPIOx GPIO Port
648 * @param PinMask This parameter can be a combination of the following values:
649 * @arg @ref LL_GPIO_PIN_0
650 * @arg @ref LL_GPIO_PIN_1
651 * @arg @ref LL_GPIO_PIN_2
652 * @arg @ref LL_GPIO_PIN_3
653 * @arg @ref LL_GPIO_PIN_4
654 * @arg @ref LL_GPIO_PIN_5
655 * @arg @ref LL_GPIO_PIN_6
656 * @arg @ref LL_GPIO_PIN_7
657 * @arg @ref LL_GPIO_PIN_8
658 * @arg @ref LL_GPIO_PIN_9
659 * @arg @ref LL_GPIO_PIN_10
660 * @arg @ref LL_GPIO_PIN_11
661 * @arg @ref LL_GPIO_PIN_12
662 * @arg @ref LL_GPIO_PIN_13
663 * @arg @ref LL_GPIO_PIN_14
664 * @arg @ref LL_GPIO_PIN_15
665 * @arg @ref LL_GPIO_PIN_ALL
666 * @retval None
667 */
LL_GPIO_LockPin(GPIO_TypeDef * GPIOx,uint32_t PinMask)668 __STATIC_INLINE void LL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
669 {
670 __IO uint32_t temp;
671 WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | PinMask);
672 WRITE_REG(GPIOx->LCKR, PinMask);
673 WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | PinMask);
674 /* Read LCKK register. This read is mandatory to complete key lock sequence */
675 temp = READ_REG(GPIOx->LCKR);
676 (void) temp;
677 }
678
679 /**
680 * @brief Return 1 if all pins passed as parameter, of a dedicated port, are locked. else Return 0.
681 * @rmtoll LCKR LCKy LL_GPIO_IsPinLocked
682 * @param GPIOx GPIO Port
683 * @param PinMask This parameter can be a combination of the following values:
684 * @arg @ref LL_GPIO_PIN_0
685 * @arg @ref LL_GPIO_PIN_1
686 * @arg @ref LL_GPIO_PIN_2
687 * @arg @ref LL_GPIO_PIN_3
688 * @arg @ref LL_GPIO_PIN_4
689 * @arg @ref LL_GPIO_PIN_5
690 * @arg @ref LL_GPIO_PIN_6
691 * @arg @ref LL_GPIO_PIN_7
692 * @arg @ref LL_GPIO_PIN_8
693 * @arg @ref LL_GPIO_PIN_9
694 * @arg @ref LL_GPIO_PIN_10
695 * @arg @ref LL_GPIO_PIN_11
696 * @arg @ref LL_GPIO_PIN_12
697 * @arg @ref LL_GPIO_PIN_13
698 * @arg @ref LL_GPIO_PIN_14
699 * @arg @ref LL_GPIO_PIN_15
700 * @arg @ref LL_GPIO_PIN_ALL
701 * @retval State of bit (1 or 0).
702 */
LL_GPIO_IsPinLocked(GPIO_TypeDef * GPIOx,uint32_t PinMask)703 __STATIC_INLINE uint32_t LL_GPIO_IsPinLocked(GPIO_TypeDef *GPIOx, uint32_t PinMask)
704 {
705 return (READ_BIT(GPIOx->LCKR, PinMask) == (PinMask));
706 }
707
708 /**
709 * @brief Return 1 if one of the pin of a dedicated port is locked. else return 0.
710 * @rmtoll LCKR LCKK LL_GPIO_IsAnyPinLocked
711 * @param GPIOx GPIO Port
712 * @retval State of bit (1 or 0).
713 */
LL_GPIO_IsAnyPinLocked(GPIO_TypeDef * GPIOx)714 __STATIC_INLINE uint32_t LL_GPIO_IsAnyPinLocked(GPIO_TypeDef *GPIOx)
715 {
716 return (READ_BIT(GPIOx->LCKR, GPIO_LCKR_LCKK) == (GPIO_LCKR_LCKK));
717 }
718
719 /**
720 * @}
721 */
722
723 /** @defgroup GPIO_LL_EF_Data_Access Data Access
724 * @{
725 */
726
727 /**
728 * @brief Return full input data register value for a dedicated port.
729 * @rmtoll IDR IDy LL_GPIO_ReadInputPort
730 * @param GPIOx GPIO Port
731 * @retval Input data register value of port
732 */
LL_GPIO_ReadInputPort(GPIO_TypeDef * GPIOx)733 __STATIC_INLINE uint32_t LL_GPIO_ReadInputPort(GPIO_TypeDef *GPIOx)
734 {
735 return (uint32_t)(READ_REG(GPIOx->IDR));
736 }
737
738 /**
739 * @brief Return if input data level for several pins of dedicated port is high or low.
740 * @rmtoll IDR IDy LL_GPIO_IsInputPinSet
741 * @param GPIOx GPIO Port
742 * @param PinMask This parameter can be a combination of the following values:
743 * @arg @ref LL_GPIO_PIN_0
744 * @arg @ref LL_GPIO_PIN_1
745 * @arg @ref LL_GPIO_PIN_2
746 * @arg @ref LL_GPIO_PIN_3
747 * @arg @ref LL_GPIO_PIN_4
748 * @arg @ref LL_GPIO_PIN_5
749 * @arg @ref LL_GPIO_PIN_6
750 * @arg @ref LL_GPIO_PIN_7
751 * @arg @ref LL_GPIO_PIN_8
752 * @arg @ref LL_GPIO_PIN_9
753 * @arg @ref LL_GPIO_PIN_10
754 * @arg @ref LL_GPIO_PIN_11
755 * @arg @ref LL_GPIO_PIN_12
756 * @arg @ref LL_GPIO_PIN_13
757 * @arg @ref LL_GPIO_PIN_14
758 * @arg @ref LL_GPIO_PIN_15
759 * @arg @ref LL_GPIO_PIN_ALL
760 * @retval State of bit (1 or 0).
761 */
LL_GPIO_IsInputPinSet(GPIO_TypeDef * GPIOx,uint32_t PinMask)762 __STATIC_INLINE uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)
763 {
764 return (READ_BIT(GPIOx->IDR, PinMask) == (PinMask));
765 }
766
767 /**
768 * @brief Write output data register for the port.
769 * @rmtoll ODR ODy LL_GPIO_WriteOutputPort
770 * @param GPIOx GPIO Port
771 * @param PortValue Level value for each pin of the port
772 * @retval None
773 */
LL_GPIO_WriteOutputPort(GPIO_TypeDef * GPIOx,uint32_t PortValue)774 __STATIC_INLINE void LL_GPIO_WriteOutputPort(GPIO_TypeDef *GPIOx, uint32_t PortValue)
775 {
776 WRITE_REG(GPIOx->ODR, PortValue);
777 }
778
779 /**
780 * @brief Return full output data register value for a dedicated port.
781 * @rmtoll ODR ODy LL_GPIO_ReadOutputPort
782 * @param GPIOx GPIO Port
783 * @retval Output data register value of port
784 */
LL_GPIO_ReadOutputPort(GPIO_TypeDef * GPIOx)785 __STATIC_INLINE uint32_t LL_GPIO_ReadOutputPort(GPIO_TypeDef *GPIOx)
786 {
787 return (uint32_t)(READ_REG(GPIOx->ODR));
788 }
789
790 /**
791 * @brief Return if input data level for several pins of dedicated port is high or low.
792 * @rmtoll ODR ODy LL_GPIO_IsOutputPinSet
793 * @param GPIOx GPIO Port
794 * @param PinMask This parameter can be a combination of the following values:
795 * @arg @ref LL_GPIO_PIN_0
796 * @arg @ref LL_GPIO_PIN_1
797 * @arg @ref LL_GPIO_PIN_2
798 * @arg @ref LL_GPIO_PIN_3
799 * @arg @ref LL_GPIO_PIN_4
800 * @arg @ref LL_GPIO_PIN_5
801 * @arg @ref LL_GPIO_PIN_6
802 * @arg @ref LL_GPIO_PIN_7
803 * @arg @ref LL_GPIO_PIN_8
804 * @arg @ref LL_GPIO_PIN_9
805 * @arg @ref LL_GPIO_PIN_10
806 * @arg @ref LL_GPIO_PIN_11
807 * @arg @ref LL_GPIO_PIN_12
808 * @arg @ref LL_GPIO_PIN_13
809 * @arg @ref LL_GPIO_PIN_14
810 * @arg @ref LL_GPIO_PIN_15
811 * @arg @ref LL_GPIO_PIN_ALL
812 * @retval State of bit (1 or 0).
813 */
LL_GPIO_IsOutputPinSet(GPIO_TypeDef * GPIOx,uint32_t PinMask)814 __STATIC_INLINE uint32_t LL_GPIO_IsOutputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)
815 {
816 return (READ_BIT(GPIOx->ODR, PinMask) == (PinMask));
817 }
818
819 /**
820 * @brief Set several pins to high level on dedicated gpio port.
821 * @rmtoll BSRR BSy LL_GPIO_SetOutputPin
822 * @param GPIOx GPIO Port
823 * @param PinMask This parameter can be a combination of the following values:
824 * @arg @ref LL_GPIO_PIN_0
825 * @arg @ref LL_GPIO_PIN_1
826 * @arg @ref LL_GPIO_PIN_2
827 * @arg @ref LL_GPIO_PIN_3
828 * @arg @ref LL_GPIO_PIN_4
829 * @arg @ref LL_GPIO_PIN_5
830 * @arg @ref LL_GPIO_PIN_6
831 * @arg @ref LL_GPIO_PIN_7
832 * @arg @ref LL_GPIO_PIN_8
833 * @arg @ref LL_GPIO_PIN_9
834 * @arg @ref LL_GPIO_PIN_10
835 * @arg @ref LL_GPIO_PIN_11
836 * @arg @ref LL_GPIO_PIN_12
837 * @arg @ref LL_GPIO_PIN_13
838 * @arg @ref LL_GPIO_PIN_14
839 * @arg @ref LL_GPIO_PIN_15
840 * @arg @ref LL_GPIO_PIN_ALL
841 * @retval None
842 */
LL_GPIO_SetOutputPin(GPIO_TypeDef * GPIOx,uint32_t PinMask)843 __STATIC_INLINE void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
844 {
845 WRITE_REG(GPIOx->BSRR, PinMask);
846 }
847
848 /**
849 * @brief Set several pins to low level on dedicated gpio port.
850 * @rmtoll BRR BRy LL_GPIO_ResetOutputPin
851 * @param GPIOx GPIO Port
852 * @param PinMask This parameter can be a combination of the following values:
853 * @arg @ref LL_GPIO_PIN_0
854 * @arg @ref LL_GPIO_PIN_1
855 * @arg @ref LL_GPIO_PIN_2
856 * @arg @ref LL_GPIO_PIN_3
857 * @arg @ref LL_GPIO_PIN_4
858 * @arg @ref LL_GPIO_PIN_5
859 * @arg @ref LL_GPIO_PIN_6
860 * @arg @ref LL_GPIO_PIN_7
861 * @arg @ref LL_GPIO_PIN_8
862 * @arg @ref LL_GPIO_PIN_9
863 * @arg @ref LL_GPIO_PIN_10
864 * @arg @ref LL_GPIO_PIN_11
865 * @arg @ref LL_GPIO_PIN_12
866 * @arg @ref LL_GPIO_PIN_13
867 * @arg @ref LL_GPIO_PIN_14
868 * @arg @ref LL_GPIO_PIN_15
869 * @arg @ref LL_GPIO_PIN_ALL
870 * @retval None
871 */
LL_GPIO_ResetOutputPin(GPIO_TypeDef * GPIOx,uint32_t PinMask)872 __STATIC_INLINE void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
873 {
874 WRITE_REG(GPIOx->BRR, PinMask);
875 }
876
877 /**
878 * @brief Toggle data value for several pin of dedicated port.
879 * @rmtoll ODR ODy LL_GPIO_TogglePin
880 * @param GPIOx GPIO Port
881 * @param PinMask This parameter can be a combination of the following values:
882 * @arg @ref LL_GPIO_PIN_0
883 * @arg @ref LL_GPIO_PIN_1
884 * @arg @ref LL_GPIO_PIN_2
885 * @arg @ref LL_GPIO_PIN_3
886 * @arg @ref LL_GPIO_PIN_4
887 * @arg @ref LL_GPIO_PIN_5
888 * @arg @ref LL_GPIO_PIN_6
889 * @arg @ref LL_GPIO_PIN_7
890 * @arg @ref LL_GPIO_PIN_8
891 * @arg @ref LL_GPIO_PIN_9
892 * @arg @ref LL_GPIO_PIN_10
893 * @arg @ref LL_GPIO_PIN_11
894 * @arg @ref LL_GPIO_PIN_12
895 * @arg @ref LL_GPIO_PIN_13
896 * @arg @ref LL_GPIO_PIN_14
897 * @arg @ref LL_GPIO_PIN_15
898 * @arg @ref LL_GPIO_PIN_ALL
899 * @retval None
900 */
LL_GPIO_TogglePin(GPIO_TypeDef * GPIOx,uint32_t PinMask)901 __STATIC_INLINE void LL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
902 {
903 uint32_t odr = READ_REG(GPIOx->ODR);
904 WRITE_REG(GPIOx->BSRR, ((odr & PinMask) << 16u) | (~odr & PinMask));
905 }
906
907 /**
908 * @}
909 */
910
911 #if defined(USE_FULL_LL_DRIVER)
912 /** @defgroup GPIO_LL_EF_Init Initialization and de-initialization functions
913 * @{
914 */
915
916 ErrorStatus LL_GPIO_DeInit(GPIO_TypeDef *GPIOx);
917 ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStruct);
918 void LL_GPIO_StructInit(LL_GPIO_InitTypeDef *GPIO_InitStruct);
919
920 /**
921 * @}
922 */
923 #endif /* USE_FULL_LL_DRIVER */
924
925 /**
926 * @}
927 */
928
929 /**
930 * @}
931 */
932
933 #endif /* defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOH) */
934 /**
935 * @}
936 */
937
938 #ifdef __cplusplus
939 }
940 #endif
941
942 #endif /* __STM32L0xx_LL_GPIO_H */
943
944