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