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