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