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