STM32H735xx HAL User Manual
stm32h7xx_ll_gpio.h
Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32h7xx_ll_gpio.h
00004   * @author  MCD Application Team
00005   * @brief   Header file of GPIO LL module.
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * Copyright (c) 2017 STMicroelectronics.
00010   * All rights reserved.
00011   *
00012   * This software is licensed under terms that can be found in the LICENSE file
00013   * in the root directory of this software component.
00014   * If no LICENSE file comes with this software, it is provided AS-IS.
00015   *
00016   ******************************************************************************
00017   */
00018 
00019 /* Define to prevent recursive inclusion -------------------------------------*/
00020 #ifndef STM32H7xx_LL_GPIO_H
00021 #define STM32H7xx_LL_GPIO_H
00022 
00023 #ifdef __cplusplus
00024 extern "C" {
00025 #endif
00026 
00027 /* Includes ------------------------------------------------------------------*/
00028 #include "stm32h7xx.h"
00029 
00030 /** @addtogroup STM32H7xx_LL_Driver
00031   * @{
00032   */
00033 
00034 #if defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG) || defined (GPIOH) || defined (GPIOI) || defined (GPIOJ) || defined (GPIOK)
00035 
00036 /** @defgroup GPIO_LL GPIO
00037   * @{
00038   */
00039 
00040 /* Private types -------------------------------------------------------------*/
00041 /* Private variables ---------------------------------------------------------*/
00042 /* Private constants ---------------------------------------------------------*/
00043 /* Private macros ------------------------------------------------------------*/
00044 #if defined(USE_FULL_LL_DRIVER)
00045 /** @defgroup GPIO_LL_Private_Macros GPIO Private Macros
00046   * @{
00047   */
00048 
00049 /**
00050   * @}
00051   */
00052 #endif /*USE_FULL_LL_DRIVER*/
00053 
00054 /* Exported types ------------------------------------------------------------*/
00055 #if defined(USE_FULL_LL_DRIVER)
00056 /** @defgroup GPIO_LL_ES_INIT GPIO Exported Init structures
00057   * @{
00058   */
00059 
00060 /**
00061   * @brief LL GPIO Init Structure definition
00062   */
00063 typedef struct
00064 {
00065   uint32_t Pin;          /*!< Specifies the GPIO pins to be configured.
00066                               This parameter can be any value of @ref GPIO_LL_EC_PIN */
00067 
00068   uint32_t Mode;         /*!< Specifies the operating mode for the selected pins.
00069                               This parameter can be a value of @ref GPIO_LL_EC_MODE.
00070 
00071                               GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinMode().*/
00072 
00073   uint32_t Speed;        /*!< Specifies the speed for the selected pins.
00074                               This parameter can be a value of @ref GPIO_LL_EC_SPEED.
00075 
00076                               GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinSpeed().*/
00077 
00078   uint32_t OutputType;   /*!< Specifies the operating output type for the selected pins.
00079                               This parameter can be a value of @ref GPIO_LL_EC_OUTPUT.
00080 
00081                               GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinOutputType().*/
00082 
00083   uint32_t Pull;         /*!< Specifies the operating Pull-up/Pull down for the selected pins.
00084                               This parameter can be a value of @ref GPIO_LL_EC_PULL.
00085 
00086                               GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinPull().*/
00087 
00088   uint32_t Alternate;    /*!< Specifies the Peripheral to be connected to the selected pins.
00089                               This parameter can be a value of @ref GPIO_LL_EC_AF.
00090 
00091                               GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetAFPin_0_7() and LL_GPIO_SetAFPin_8_15().*/
00092 } LL_GPIO_InitTypeDef;
00093 
00094 /**
00095   * @}
00096   */
00097 #endif /* USE_FULL_LL_DRIVER */
00098 
00099 /* Exported constants --------------------------------------------------------*/
00100 /** @defgroup GPIO_LL_Exported_Constants GPIO Exported Constants
00101   * @{
00102   */
00103 
00104 /** @defgroup GPIO_LL_EC_PIN PIN
00105   * @{
00106   */
00107 #define LL_GPIO_PIN_0                      GPIO_BSRR_BS0 /*!< Select pin 0 */
00108 #define LL_GPIO_PIN_1                      GPIO_BSRR_BS1 /*!< Select pin 1 */
00109 #define LL_GPIO_PIN_2                      GPIO_BSRR_BS2 /*!< Select pin 2 */
00110 #define LL_GPIO_PIN_3                      GPIO_BSRR_BS3 /*!< Select pin 3 */
00111 #define LL_GPIO_PIN_4                      GPIO_BSRR_BS4 /*!< Select pin 4 */
00112 #define LL_GPIO_PIN_5                      GPIO_BSRR_BS5 /*!< Select pin 5 */
00113 #define LL_GPIO_PIN_6                      GPIO_BSRR_BS6 /*!< Select pin 6 */
00114 #define LL_GPIO_PIN_7                      GPIO_BSRR_BS7 /*!< Select pin 7 */
00115 #define LL_GPIO_PIN_8                      GPIO_BSRR_BS8 /*!< Select pin 8 */
00116 #define LL_GPIO_PIN_9                      GPIO_BSRR_BS9 /*!< Select pin 9 */
00117 #define LL_GPIO_PIN_10                     GPIO_BSRR_BS10 /*!< Select pin 10 */
00118 #define LL_GPIO_PIN_11                     GPIO_BSRR_BS11 /*!< Select pin 11 */
00119 #define LL_GPIO_PIN_12                     GPIO_BSRR_BS12 /*!< Select pin 12 */
00120 #define LL_GPIO_PIN_13                     GPIO_BSRR_BS13 /*!< Select pin 13 */
00121 #define LL_GPIO_PIN_14                     GPIO_BSRR_BS14 /*!< Select pin 14 */
00122 #define LL_GPIO_PIN_15                     GPIO_BSRR_BS15 /*!< Select pin 15 */
00123 #define LL_GPIO_PIN_ALL                    (GPIO_BSRR_BS0 | GPIO_BSRR_BS1  | GPIO_BSRR_BS2  | \
00124                                            GPIO_BSRR_BS3  | GPIO_BSRR_BS4  | GPIO_BSRR_BS5  | \
00125                                            GPIO_BSRR_BS6  | GPIO_BSRR_BS7  | GPIO_BSRR_BS8  | \
00126                                            GPIO_BSRR_BS9  | GPIO_BSRR_BS10 | GPIO_BSRR_BS11 | \
00127                                            GPIO_BSRR_BS12 | GPIO_BSRR_BS13 | GPIO_BSRR_BS14 | \
00128                                            GPIO_BSRR_BS15) /*!< Select all pins */
00129 /**
00130   * @}
00131   */
00132 
00133 /** @defgroup GPIO_LL_EC_MODE Mode
00134   * @{
00135   */
00136 #define LL_GPIO_MODE_INPUT                 (0x00000000U) /*!< Select input mode */
00137 #define LL_GPIO_MODE_OUTPUT                GPIO_MODER_MODE0_0  /*!< Select output mode */
00138 #define LL_GPIO_MODE_ALTERNATE             GPIO_MODER_MODE0_1  /*!< Select alternate function mode */
00139 #define LL_GPIO_MODE_ANALOG                GPIO_MODER_MODE0    /*!< Select analog mode */
00140 /**
00141   * @}
00142   */
00143 
00144 /** @defgroup GPIO_LL_EC_OUTPUT Output Type
00145   * @{
00146   */
00147 #define LL_GPIO_OUTPUT_PUSHPULL            (0x00000000U) /*!< Select push-pull as output type */
00148 #define LL_GPIO_OUTPUT_OPENDRAIN           GPIO_OTYPER_OT0 /*!< Select open-drain as output type */
00149 /**
00150   * @}
00151   */
00152 
00153 /** @defgroup GPIO_LL_EC_SPEED Output Speed
00154   * @{
00155   */
00156 #define LL_GPIO_SPEED_FREQ_LOW             (0x00000000U) /*!< Select I/O low output speed    */
00157 #define LL_GPIO_SPEED_FREQ_MEDIUM          GPIO_OSPEEDR_OSPEED0_0 /*!< Select I/O medium output speed */
00158 #define LL_GPIO_SPEED_FREQ_HIGH            GPIO_OSPEEDR_OSPEED0_1 /*!< Select I/O fast output speed   */
00159 #define LL_GPIO_SPEED_FREQ_VERY_HIGH       GPIO_OSPEEDR_OSPEED0   /*!< Select I/O high output speed   */
00160 /**
00161   * @}
00162   */
00163 #define LL_GPIO_SPEED_LOW                  LL_GPIO_SPEED_FREQ_LOW
00164 #define LL_GPIO_SPEED_MEDIUM               LL_GPIO_SPEED_FREQ_MEDIUM
00165 #define LL_GPIO_SPEED_FAST                 LL_GPIO_SPEED_FREQ_HIGH
00166 #define LL_GPIO_SPEED_HIGH                 LL_GPIO_SPEED_FREQ_VERY_HIGH
00167 
00168 
00169 /** @defgroup GPIO_LL_EC_PULL Pull Up Pull Down
00170   * @{
00171   */
00172 #define LL_GPIO_PULL_NO                    (0x00000000U) /*!< Select I/O no pull */
00173 #define LL_GPIO_PULL_UP                    GPIO_PUPDR_PUPD0_0 /*!< Select I/O pull up */
00174 #define LL_GPIO_PULL_DOWN                  GPIO_PUPDR_PUPD0_1 /*!< Select I/O pull down */
00175 /**
00176   * @}
00177   */
00178 
00179 /** @defgroup GPIO_LL_EC_AF Alternate Function
00180   * @{
00181   */
00182 #define LL_GPIO_AF_0                       (0x0000000U) /*!< Select alternate function 0 */
00183 #define LL_GPIO_AF_1                       (0x0000001U) /*!< Select alternate function 1 */
00184 #define LL_GPIO_AF_2                       (0x0000002U) /*!< Select alternate function 2 */
00185 #define LL_GPIO_AF_3                       (0x0000003U) /*!< Select alternate function 3 */
00186 #define LL_GPIO_AF_4                       (0x0000004U) /*!< Select alternate function 4 */
00187 #define LL_GPIO_AF_5                       (0x0000005U) /*!< Select alternate function 5 */
00188 #define LL_GPIO_AF_6                       (0x0000006U) /*!< Select alternate function 6 */
00189 #define LL_GPIO_AF_7                       (0x0000007U) /*!< Select alternate function 7 */
00190 #define LL_GPIO_AF_8                       (0x0000008U) /*!< Select alternate function 8 */
00191 #define LL_GPIO_AF_9                       (0x0000009U) /*!< Select alternate function 9 */
00192 #define LL_GPIO_AF_10                      (0x000000AU) /*!< Select alternate function 10 */
00193 #define LL_GPIO_AF_11                      (0x000000BU) /*!< Select alternate function 11 */
00194 #define LL_GPIO_AF_12                      (0x000000CU) /*!< Select alternate function 12 */
00195 #define LL_GPIO_AF_13                      (0x000000DU) /*!< Select alternate function 13 */
00196 #define LL_GPIO_AF_14                      (0x000000EU) /*!< Select alternate function 14 */
00197 #define LL_GPIO_AF_15                      (0x000000FU) /*!< Select alternate function 15 */
00198 /**
00199   * @}
00200   */
00201 
00202 /**
00203   * @}
00204   */
00205 
00206 /* Exported macro ------------------------------------------------------------*/
00207 /** @defgroup GPIO_LL_Exported_Macros GPIO Exported Macros
00208   * @{
00209   */
00210 
00211 /** @defgroup GPIO_LL_EM_WRITE_READ Common Write and read registers Macros
00212   * @{
00213   */
00214 
00215 /**
00216   * @brief  Write a value in GPIO register
00217   * @param  __INSTANCE__ GPIO Instance
00218   * @param  __REG__ Register to be written
00219   * @param  __VALUE__ Value to be written in the register
00220   * @retval None
00221   */
00222 #define LL_GPIO_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
00223 
00224 /**
00225   * @brief  Read a value in GPIO register
00226   * @param  __INSTANCE__ GPIO Instance
00227   * @param  __REG__ Register to be read
00228   * @retval Register value
00229   */
00230 #define LL_GPIO_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
00231 /**
00232   * @}
00233   */
00234 
00235 /**
00236   * @}
00237   */
00238 
00239 /* Exported functions --------------------------------------------------------*/
00240 /** @defgroup GPIO_LL_Exported_Functions GPIO Exported Functions
00241   * @{
00242   */
00243 
00244 /** @defgroup GPIO_LL_EF_Port_Configuration Port Configuration
00245   * @{
00246   */
00247 
00248 /**
00249   * @brief  Configure gpio mode for a dedicated pin on dedicated port.
00250   * @note   I/O mode can be Input mode, General purpose output, Alternate function mode or Analog.
00251   * @note   Warning: only one pin can be passed as parameter.
00252   * @rmtoll MODER        MODEy         LL_GPIO_SetPinMode
00253   * @param  GPIOx GPIO Port
00254   * @param  Pin This parameter can be one of the following values:
00255   *         @arg @ref LL_GPIO_PIN_0
00256   *         @arg @ref LL_GPIO_PIN_1
00257   *         @arg @ref LL_GPIO_PIN_2
00258   *         @arg @ref LL_GPIO_PIN_3
00259   *         @arg @ref LL_GPIO_PIN_4
00260   *         @arg @ref LL_GPIO_PIN_5
00261   *         @arg @ref LL_GPIO_PIN_6
00262   *         @arg @ref LL_GPIO_PIN_7
00263   *         @arg @ref LL_GPIO_PIN_8
00264   *         @arg @ref LL_GPIO_PIN_9
00265   *         @arg @ref LL_GPIO_PIN_10
00266   *         @arg @ref LL_GPIO_PIN_11
00267   *         @arg @ref LL_GPIO_PIN_12
00268   *         @arg @ref LL_GPIO_PIN_13
00269   *         @arg @ref LL_GPIO_PIN_14
00270   *         @arg @ref LL_GPIO_PIN_15
00271   * @param  Mode This parameter can be one of the following values:
00272   *         @arg @ref LL_GPIO_MODE_INPUT
00273   *         @arg @ref LL_GPIO_MODE_OUTPUT
00274   *         @arg @ref LL_GPIO_MODE_ALTERNATE
00275   *         @arg @ref LL_GPIO_MODE_ANALOG
00276   * @retval None
00277   */
00278 __STATIC_INLINE void LL_GPIO_SetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Mode)
00279 {
00280   MODIFY_REG(GPIOx->MODER, ((Pin * Pin) * GPIO_MODER_MODE0), ((Pin * Pin) * Mode));
00281 }
00282 
00283 /**
00284   * @brief  Return gpio mode for a dedicated pin on dedicated port.
00285   * @note   I/O mode can be Input mode, General purpose output, Alternate function mode or Analog.
00286   * @note   Warning: only one pin can be passed as parameter.
00287   * @rmtoll MODER        MODEy         LL_GPIO_GetPinMode
00288   * @param  GPIOx GPIO Port
00289   * @param  Pin This parameter can be one of the following values:
00290   *         @arg @ref LL_GPIO_PIN_0
00291   *         @arg @ref LL_GPIO_PIN_1
00292   *         @arg @ref LL_GPIO_PIN_2
00293   *         @arg @ref LL_GPIO_PIN_3
00294   *         @arg @ref LL_GPIO_PIN_4
00295   *         @arg @ref LL_GPIO_PIN_5
00296   *         @arg @ref LL_GPIO_PIN_6
00297   *         @arg @ref LL_GPIO_PIN_7
00298   *         @arg @ref LL_GPIO_PIN_8
00299   *         @arg @ref LL_GPIO_PIN_9
00300   *         @arg @ref LL_GPIO_PIN_10
00301   *         @arg @ref LL_GPIO_PIN_11
00302   *         @arg @ref LL_GPIO_PIN_12
00303   *         @arg @ref LL_GPIO_PIN_13
00304   *         @arg @ref LL_GPIO_PIN_14
00305   *         @arg @ref LL_GPIO_PIN_15
00306   * @retval Returned value can be one of the following values:
00307   *         @arg @ref LL_GPIO_MODE_INPUT
00308   *         @arg @ref LL_GPIO_MODE_OUTPUT
00309   *         @arg @ref LL_GPIO_MODE_ALTERNATE
00310   *         @arg @ref LL_GPIO_MODE_ANALOG
00311   */
00312 __STATIC_INLINE uint32_t LL_GPIO_GetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin)
00313 {
00314   return (uint32_t)(READ_BIT(GPIOx->MODER, ((Pin * Pin) * GPIO_MODER_MODE0)) / (Pin * Pin));
00315 }
00316 
00317 /**
00318   * @brief  Configure gpio output type for several pins on dedicated port.
00319   * @note   Output type as to be set when gpio pin is in output or
00320   *         alternate modes. Possible type are Push-pull or Open-drain.
00321   * @rmtoll OTYPER       OTy           LL_GPIO_SetPinOutputType
00322   * @param  GPIOx GPIO Port
00323   * @param  PinMask This parameter can be a combination of the following values:
00324   *         @arg @ref LL_GPIO_PIN_0
00325   *         @arg @ref LL_GPIO_PIN_1
00326   *         @arg @ref LL_GPIO_PIN_2
00327   *         @arg @ref LL_GPIO_PIN_3
00328   *         @arg @ref LL_GPIO_PIN_4
00329   *         @arg @ref LL_GPIO_PIN_5
00330   *         @arg @ref LL_GPIO_PIN_6
00331   *         @arg @ref LL_GPIO_PIN_7
00332   *         @arg @ref LL_GPIO_PIN_8
00333   *         @arg @ref LL_GPIO_PIN_9
00334   *         @arg @ref LL_GPIO_PIN_10
00335   *         @arg @ref LL_GPIO_PIN_11
00336   *         @arg @ref LL_GPIO_PIN_12
00337   *         @arg @ref LL_GPIO_PIN_13
00338   *         @arg @ref LL_GPIO_PIN_14
00339   *         @arg @ref LL_GPIO_PIN_15
00340   *         @arg @ref LL_GPIO_PIN_ALL
00341   * @param  OutputType This parameter can be one of the following values:
00342   *         @arg @ref LL_GPIO_OUTPUT_PUSHPULL
00343   *         @arg @ref LL_GPIO_OUTPUT_OPENDRAIN
00344   * @retval None
00345   */
00346 __STATIC_INLINE void LL_GPIO_SetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t PinMask, uint32_t OutputType)
00347 {
00348   MODIFY_REG(GPIOx->OTYPER, PinMask, (PinMask * OutputType));
00349 }
00350 
00351 /**
00352   * @brief  Return gpio output type for several pins on dedicated port.
00353   * @note   Output type as to be set when gpio pin is in output or
00354   *         alternate modes. Possible type are Push-pull or Open-drain.
00355   * @note   Warning: only one pin can be passed as parameter.
00356   * @rmtoll OTYPER       OTy           LL_GPIO_GetPinOutputType
00357   * @param  GPIOx GPIO Port
00358   * @param  Pin This parameter can be one of the following values:
00359   *         @arg @ref LL_GPIO_PIN_0
00360   *         @arg @ref LL_GPIO_PIN_1
00361   *         @arg @ref LL_GPIO_PIN_2
00362   *         @arg @ref LL_GPIO_PIN_3
00363   *         @arg @ref LL_GPIO_PIN_4
00364   *         @arg @ref LL_GPIO_PIN_5
00365   *         @arg @ref LL_GPIO_PIN_6
00366   *         @arg @ref LL_GPIO_PIN_7
00367   *         @arg @ref LL_GPIO_PIN_8
00368   *         @arg @ref LL_GPIO_PIN_9
00369   *         @arg @ref LL_GPIO_PIN_10
00370   *         @arg @ref LL_GPIO_PIN_11
00371   *         @arg @ref LL_GPIO_PIN_12
00372   *         @arg @ref LL_GPIO_PIN_13
00373   *         @arg @ref LL_GPIO_PIN_14
00374   *         @arg @ref LL_GPIO_PIN_15
00375   *         @arg @ref LL_GPIO_PIN_ALL
00376   * @retval Returned value can be one of the following values:
00377   *         @arg @ref LL_GPIO_OUTPUT_PUSHPULL
00378   *         @arg @ref LL_GPIO_OUTPUT_OPENDRAIN
00379   */
00380 __STATIC_INLINE uint32_t LL_GPIO_GetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t Pin)
00381 {
00382   return (uint32_t)(READ_BIT(GPIOx->OTYPER, Pin) / Pin);
00383 }
00384 
00385 /**
00386   * @brief  Configure gpio speed for a dedicated pin on dedicated port.
00387   * @note   I/O speed can be Low, Medium, Fast or High speed.
00388   * @note   Warning: only one pin can be passed as parameter.
00389   * @note   Refer to datasheet for frequency specifications and the power
00390   *         supply and load conditions for each speed.
00391   * @rmtoll OSPEEDR      OSPEEDy       LL_GPIO_SetPinSpeed
00392   * @param  GPIOx GPIO Port
00393   * @param  Pin This parameter can be one of the following values:
00394   *         @arg @ref LL_GPIO_PIN_0
00395   *         @arg @ref LL_GPIO_PIN_1
00396   *         @arg @ref LL_GPIO_PIN_2
00397   *         @arg @ref LL_GPIO_PIN_3
00398   *         @arg @ref LL_GPIO_PIN_4
00399   *         @arg @ref LL_GPIO_PIN_5
00400   *         @arg @ref LL_GPIO_PIN_6
00401   *         @arg @ref LL_GPIO_PIN_7
00402   *         @arg @ref LL_GPIO_PIN_8
00403   *         @arg @ref LL_GPIO_PIN_9
00404   *         @arg @ref LL_GPIO_PIN_10
00405   *         @arg @ref LL_GPIO_PIN_11
00406   *         @arg @ref LL_GPIO_PIN_12
00407   *         @arg @ref LL_GPIO_PIN_13
00408   *         @arg @ref LL_GPIO_PIN_14
00409   *         @arg @ref LL_GPIO_PIN_15
00410   * @param  Speed This parameter can be one of the following values:
00411   *         @arg @ref LL_GPIO_SPEED_FREQ_LOW
00412   *         @arg @ref LL_GPIO_SPEED_FREQ_MEDIUM
00413   *         @arg @ref LL_GPIO_SPEED_FREQ_HIGH
00414   *         @arg @ref LL_GPIO_SPEED_FREQ_VERY_HIGH
00415   * @retval None
00416   */
00417 __STATIC_INLINE void LL_GPIO_SetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t  Speed)
00418 {
00419   MODIFY_REG(GPIOx->OSPEEDR, ((Pin * Pin) * GPIO_OSPEEDR_OSPEED0), ((Pin * Pin) * Speed));
00420 }
00421 
00422 /**
00423   * @brief  Return gpio speed for a dedicated pin on dedicated port.
00424   * @note   I/O speed can be Low, Medium, Fast or High speed.
00425   * @note   Warning: only one pin can be passed as parameter.
00426   * @note   Refer to datasheet for frequency specifications and the power
00427   *         supply and load conditions for each speed.
00428   * @rmtoll OSPEEDR      OSPEEDy       LL_GPIO_GetPinSpeed
00429   * @param  GPIOx GPIO Port
00430   * @param  Pin This parameter can be one of the following values:
00431   *         @arg @ref LL_GPIO_PIN_0
00432   *         @arg @ref LL_GPIO_PIN_1
00433   *         @arg @ref LL_GPIO_PIN_2
00434   *         @arg @ref LL_GPIO_PIN_3
00435   *         @arg @ref LL_GPIO_PIN_4
00436   *         @arg @ref LL_GPIO_PIN_5
00437   *         @arg @ref LL_GPIO_PIN_6
00438   *         @arg @ref LL_GPIO_PIN_7
00439   *         @arg @ref LL_GPIO_PIN_8
00440   *         @arg @ref LL_GPIO_PIN_9
00441   *         @arg @ref LL_GPIO_PIN_10
00442   *         @arg @ref LL_GPIO_PIN_11
00443   *         @arg @ref LL_GPIO_PIN_12
00444   *         @arg @ref LL_GPIO_PIN_13
00445   *         @arg @ref LL_GPIO_PIN_14
00446   *         @arg @ref LL_GPIO_PIN_15
00447   * @retval Returned value can be one of the following values:
00448   *         @arg @ref LL_GPIO_SPEED_FREQ_LOW
00449   *         @arg @ref LL_GPIO_SPEED_FREQ_MEDIUM
00450   *         @arg @ref LL_GPIO_SPEED_FREQ_HIGH
00451   *         @arg @ref LL_GPIO_SPEED_FREQ_VERY_HIGH
00452   */
00453 __STATIC_INLINE uint32_t LL_GPIO_GetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin)
00454 {
00455   return (uint32_t)(READ_BIT(GPIOx->OSPEEDR, ((Pin * Pin) * GPIO_OSPEEDR_OSPEED0)) / (Pin * Pin));
00456 }
00457 
00458 /**
00459   * @brief  Configure gpio pull-up or pull-down for a dedicated pin on a dedicated port.
00460   * @note   Warning: only one pin can be passed as parameter.
00461   * @rmtoll PUPDR        PUPDy         LL_GPIO_SetPinPull
00462   * @param  GPIOx GPIO Port
00463   * @param  Pin This parameter can be one of the following values:
00464   *         @arg @ref LL_GPIO_PIN_0
00465   *         @arg @ref LL_GPIO_PIN_1
00466   *         @arg @ref LL_GPIO_PIN_2
00467   *         @arg @ref LL_GPIO_PIN_3
00468   *         @arg @ref LL_GPIO_PIN_4
00469   *         @arg @ref LL_GPIO_PIN_5
00470   *         @arg @ref LL_GPIO_PIN_6
00471   *         @arg @ref LL_GPIO_PIN_7
00472   *         @arg @ref LL_GPIO_PIN_8
00473   *         @arg @ref LL_GPIO_PIN_9
00474   *         @arg @ref LL_GPIO_PIN_10
00475   *         @arg @ref LL_GPIO_PIN_11
00476   *         @arg @ref LL_GPIO_PIN_12
00477   *         @arg @ref LL_GPIO_PIN_13
00478   *         @arg @ref LL_GPIO_PIN_14
00479   *         @arg @ref LL_GPIO_PIN_15
00480   * @param  Pull This parameter can be one of the following values:
00481   *         @arg @ref LL_GPIO_PULL_NO
00482   *         @arg @ref LL_GPIO_PULL_UP
00483   *         @arg @ref LL_GPIO_PULL_DOWN
00484   * @retval None
00485   */
00486 __STATIC_INLINE void LL_GPIO_SetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Pull)
00487 {
00488   MODIFY_REG(GPIOx->PUPDR, ((Pin * Pin) * GPIO_PUPDR_PUPD0), ((Pin * Pin) * Pull));
00489 }
00490 
00491 /**
00492   * @brief  Return gpio pull-up or pull-down for a dedicated pin on a dedicated port
00493   * @note   Warning: only one pin can be passed as parameter.
00494   * @rmtoll PUPDR        PUPDy         LL_GPIO_GetPinPull
00495   * @param  GPIOx GPIO Port
00496   * @param  Pin This parameter can be one of the following values:
00497   *         @arg @ref LL_GPIO_PIN_0
00498   *         @arg @ref LL_GPIO_PIN_1
00499   *         @arg @ref LL_GPIO_PIN_2
00500   *         @arg @ref LL_GPIO_PIN_3
00501   *         @arg @ref LL_GPIO_PIN_4
00502   *         @arg @ref LL_GPIO_PIN_5
00503   *         @arg @ref LL_GPIO_PIN_6
00504   *         @arg @ref LL_GPIO_PIN_7
00505   *         @arg @ref LL_GPIO_PIN_8
00506   *         @arg @ref LL_GPIO_PIN_9
00507   *         @arg @ref LL_GPIO_PIN_10
00508   *         @arg @ref LL_GPIO_PIN_11
00509   *         @arg @ref LL_GPIO_PIN_12
00510   *         @arg @ref LL_GPIO_PIN_13
00511   *         @arg @ref LL_GPIO_PIN_14
00512   *         @arg @ref LL_GPIO_PIN_15
00513   * @retval Returned value can be one of the following values:
00514   *         @arg @ref LL_GPIO_PULL_NO
00515   *         @arg @ref LL_GPIO_PULL_UP
00516   *         @arg @ref LL_GPIO_PULL_DOWN
00517   */
00518 __STATIC_INLINE uint32_t LL_GPIO_GetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin)
00519 {
00520   return (uint32_t)(READ_BIT(GPIOx->PUPDR, ((Pin * Pin) * GPIO_PUPDR_PUPD0)) / (Pin * Pin));
00521 }
00522 
00523 /**
00524   * @brief  Configure gpio alternate function of a dedicated pin from 0 to 7 for a dedicated port.
00525   * @note   Possible values are from AF0 to AF15 depending on target.
00526   * @note   Warning: only one pin can be passed as parameter.
00527   * @rmtoll AFRL         AFSELy        LL_GPIO_SetAFPin_0_7
00528   * @param  GPIOx GPIO Port
00529   * @param  Pin This parameter can be one of the following values:
00530   *         @arg @ref LL_GPIO_PIN_0
00531   *         @arg @ref LL_GPIO_PIN_1
00532   *         @arg @ref LL_GPIO_PIN_2
00533   *         @arg @ref LL_GPIO_PIN_3
00534   *         @arg @ref LL_GPIO_PIN_4
00535   *         @arg @ref LL_GPIO_PIN_5
00536   *         @arg @ref LL_GPIO_PIN_6
00537   *         @arg @ref LL_GPIO_PIN_7
00538   * @param  Alternate This parameter can be one of the following values:
00539   *         @arg @ref LL_GPIO_AF_0
00540   *         @arg @ref LL_GPIO_AF_1
00541   *         @arg @ref LL_GPIO_AF_2
00542   *         @arg @ref LL_GPIO_AF_3
00543   *         @arg @ref LL_GPIO_AF_4
00544   *         @arg @ref LL_GPIO_AF_5
00545   *         @arg @ref LL_GPIO_AF_6
00546   *         @arg @ref LL_GPIO_AF_7
00547   *         @arg @ref LL_GPIO_AF_8
00548   *         @arg @ref LL_GPIO_AF_9
00549   *         @arg @ref LL_GPIO_AF_10
00550   *         @arg @ref LL_GPIO_AF_11
00551   *         @arg @ref LL_GPIO_AF_12
00552   *         @arg @ref LL_GPIO_AF_13
00553   *         @arg @ref LL_GPIO_AF_14
00554   *         @arg @ref LL_GPIO_AF_15
00555   * @retval None
00556   */
00557 __STATIC_INLINE void LL_GPIO_SetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate)
00558 {
00559   MODIFY_REG(GPIOx->AFR[0], ((((Pin * Pin) * Pin) * Pin) * GPIO_AFRL_AFSEL0),
00560              ((((Pin * Pin) * Pin) * Pin) * Alternate));
00561 }
00562 
00563 /**
00564   * @brief  Return gpio alternate function of a dedicated pin from 0 to 7 for a dedicated port.
00565   * @rmtoll AFRL         AFSELy        LL_GPIO_GetAFPin_0_7
00566   * @param  GPIOx GPIO Port
00567   * @param  Pin This parameter can be one of the following values:
00568   *         @arg @ref LL_GPIO_PIN_0
00569   *         @arg @ref LL_GPIO_PIN_1
00570   *         @arg @ref LL_GPIO_PIN_2
00571   *         @arg @ref LL_GPIO_PIN_3
00572   *         @arg @ref LL_GPIO_PIN_4
00573   *         @arg @ref LL_GPIO_PIN_5
00574   *         @arg @ref LL_GPIO_PIN_6
00575   *         @arg @ref LL_GPIO_PIN_7
00576   * @retval Returned value can be one of the following values:
00577   *         @arg @ref LL_GPIO_AF_0
00578   *         @arg @ref LL_GPIO_AF_1
00579   *         @arg @ref LL_GPIO_AF_2
00580   *         @arg @ref LL_GPIO_AF_3
00581   *         @arg @ref LL_GPIO_AF_4
00582   *         @arg @ref LL_GPIO_AF_5
00583   *         @arg @ref LL_GPIO_AF_6
00584   *         @arg @ref LL_GPIO_AF_7
00585   *         @arg @ref LL_GPIO_AF_8
00586   *         @arg @ref LL_GPIO_AF_9
00587   *         @arg @ref LL_GPIO_AF_10
00588   *         @arg @ref LL_GPIO_AF_11
00589   *         @arg @ref LL_GPIO_AF_12
00590   *         @arg @ref LL_GPIO_AF_13
00591   *         @arg @ref LL_GPIO_AF_14
00592   *         @arg @ref LL_GPIO_AF_15
00593   */
00594 __STATIC_INLINE uint32_t LL_GPIO_GetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin)
00595 {
00596   return (uint32_t)(READ_BIT(GPIOx->AFR[0],
00597                              ((((Pin * Pin) * Pin) * Pin) * GPIO_AFRL_AFSEL0)) / (((Pin * Pin) * Pin) * Pin));
00598 }
00599 
00600 /**
00601   * @brief  Configure gpio alternate function of a dedicated pin from 8 to 15 for a dedicated port.
00602   * @note   Possible values are from AF0 to AF15 depending on target.
00603   * @note   Warning: only one pin can be passed as parameter.
00604   * @rmtoll AFRH         AFSELy        LL_GPIO_SetAFPin_8_15
00605   * @param  GPIOx GPIO Port
00606   * @param  Pin This parameter can be one of the following values:
00607   *         @arg @ref LL_GPIO_PIN_8
00608   *         @arg @ref LL_GPIO_PIN_9
00609   *         @arg @ref LL_GPIO_PIN_10
00610   *         @arg @ref LL_GPIO_PIN_11
00611   *         @arg @ref LL_GPIO_PIN_12
00612   *         @arg @ref LL_GPIO_PIN_13
00613   *         @arg @ref LL_GPIO_PIN_14
00614   *         @arg @ref LL_GPIO_PIN_15
00615   * @param  Alternate This parameter can be one of the following values:
00616   *         @arg @ref LL_GPIO_AF_0
00617   *         @arg @ref LL_GPIO_AF_1
00618   *         @arg @ref LL_GPIO_AF_2
00619   *         @arg @ref LL_GPIO_AF_3
00620   *         @arg @ref LL_GPIO_AF_4
00621   *         @arg @ref LL_GPIO_AF_5
00622   *         @arg @ref LL_GPIO_AF_6
00623   *         @arg @ref LL_GPIO_AF_7
00624   *         @arg @ref LL_GPIO_AF_8
00625   *         @arg @ref LL_GPIO_AF_9
00626   *         @arg @ref LL_GPIO_AF_10
00627   *         @arg @ref LL_GPIO_AF_11
00628   *         @arg @ref LL_GPIO_AF_12
00629   *         @arg @ref LL_GPIO_AF_13
00630   *         @arg @ref LL_GPIO_AF_14
00631   *         @arg @ref LL_GPIO_AF_15
00632   * @retval None
00633   */
00634 __STATIC_INLINE void LL_GPIO_SetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate)
00635 {
00636   MODIFY_REG(GPIOx->AFR[1], (((((Pin >> 8U) * (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)) * GPIO_AFRH_AFSEL8),
00637              (((((Pin >> 8U) * (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)) * Alternate));
00638 }
00639 
00640 /**
00641   * @brief  Return gpio alternate function of a dedicated pin from 8 to 15 for a dedicated port.
00642   * @note   Possible values are from AF0 to AF15 depending on target.
00643   * @rmtoll AFRH         AFSELy        LL_GPIO_GetAFPin_8_15
00644   * @param  GPIOx GPIO Port
00645   * @param  Pin This parameter can be one of the following values:
00646   *         @arg @ref LL_GPIO_PIN_8
00647   *         @arg @ref LL_GPIO_PIN_9
00648   *         @arg @ref LL_GPIO_PIN_10
00649   *         @arg @ref LL_GPIO_PIN_11
00650   *         @arg @ref LL_GPIO_PIN_12
00651   *         @arg @ref LL_GPIO_PIN_13
00652   *         @arg @ref LL_GPIO_PIN_14
00653   *         @arg @ref LL_GPIO_PIN_15
00654   * @retval Returned value can be one of the following values:
00655   *         @arg @ref LL_GPIO_AF_0
00656   *         @arg @ref LL_GPIO_AF_1
00657   *         @arg @ref LL_GPIO_AF_2
00658   *         @arg @ref LL_GPIO_AF_3
00659   *         @arg @ref LL_GPIO_AF_4
00660   *         @arg @ref LL_GPIO_AF_5
00661   *         @arg @ref LL_GPIO_AF_6
00662   *         @arg @ref LL_GPIO_AF_7
00663   *         @arg @ref LL_GPIO_AF_8
00664   *         @arg @ref LL_GPIO_AF_9
00665   *         @arg @ref LL_GPIO_AF_10
00666   *         @arg @ref LL_GPIO_AF_11
00667   *         @arg @ref LL_GPIO_AF_12
00668   *         @arg @ref LL_GPIO_AF_13
00669   *         @arg @ref LL_GPIO_AF_14
00670   *         @arg @ref LL_GPIO_AF_15
00671   */
00672 __STATIC_INLINE uint32_t LL_GPIO_GetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin)
00673 {
00674   return (uint32_t)(READ_BIT(GPIOx->AFR[1],
00675                              (((((Pin >> 8U) * (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)) * GPIO_AFRH_AFSEL8)) / ((((Pin >> 8U) *
00676                                  (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)));
00677 }
00678 
00679 
00680 /**
00681   * @brief  Lock configuration of several pins for a dedicated port.
00682   * @note   When the lock sequence has been applied on a port bit, the
00683   *         value of this port bit can no longer be modified until the
00684   *         next reset.
00685   * @note   Each lock bit freezes a specific configuration register
00686   *         (control and alternate function registers).
00687   * @rmtoll LCKR         LCKK          LL_GPIO_LockPin
00688   * @param  GPIOx GPIO Port
00689   * @param  PinMask This parameter can be a combination of the following values:
00690   *         @arg @ref LL_GPIO_PIN_0
00691   *         @arg @ref LL_GPIO_PIN_1
00692   *         @arg @ref LL_GPIO_PIN_2
00693   *         @arg @ref LL_GPIO_PIN_3
00694   *         @arg @ref LL_GPIO_PIN_4
00695   *         @arg @ref LL_GPIO_PIN_5
00696   *         @arg @ref LL_GPIO_PIN_6
00697   *         @arg @ref LL_GPIO_PIN_7
00698   *         @arg @ref LL_GPIO_PIN_8
00699   *         @arg @ref LL_GPIO_PIN_9
00700   *         @arg @ref LL_GPIO_PIN_10
00701   *         @arg @ref LL_GPIO_PIN_11
00702   *         @arg @ref LL_GPIO_PIN_12
00703   *         @arg @ref LL_GPIO_PIN_13
00704   *         @arg @ref LL_GPIO_PIN_14
00705   *         @arg @ref LL_GPIO_PIN_15
00706   *         @arg @ref LL_GPIO_PIN_ALL
00707   * @retval None
00708   */
00709 __STATIC_INLINE void LL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
00710 {
00711   __IO uint32_t temp;
00712   WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | PinMask);
00713   WRITE_REG(GPIOx->LCKR, PinMask);
00714   WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | PinMask);
00715   /* Read LCKK register. This read is mandatory to complete key lock sequence */
00716   temp = READ_REG(GPIOx->LCKR);
00717   (void) temp;
00718 }
00719 
00720 /**
00721   * @brief  Return 1 if all pins passed as parameter, of a dedicated port, are locked. else Return 0.
00722   * @rmtoll LCKR         LCKy          LL_GPIO_IsPinLocked
00723   * @param  GPIOx GPIO Port
00724   * @param  PinMask This parameter can be a combination of the following values:
00725   *         @arg @ref LL_GPIO_PIN_0
00726   *         @arg @ref LL_GPIO_PIN_1
00727   *         @arg @ref LL_GPIO_PIN_2
00728   *         @arg @ref LL_GPIO_PIN_3
00729   *         @arg @ref LL_GPIO_PIN_4
00730   *         @arg @ref LL_GPIO_PIN_5
00731   *         @arg @ref LL_GPIO_PIN_6
00732   *         @arg @ref LL_GPIO_PIN_7
00733   *         @arg @ref LL_GPIO_PIN_8
00734   *         @arg @ref LL_GPIO_PIN_9
00735   *         @arg @ref LL_GPIO_PIN_10
00736   *         @arg @ref LL_GPIO_PIN_11
00737   *         @arg @ref LL_GPIO_PIN_12
00738   *         @arg @ref LL_GPIO_PIN_13
00739   *         @arg @ref LL_GPIO_PIN_14
00740   *         @arg @ref LL_GPIO_PIN_15
00741   *         @arg @ref LL_GPIO_PIN_ALL
00742   * @retval State of bit (1 or 0).
00743   */
00744 __STATIC_INLINE uint32_t LL_GPIO_IsPinLocked(GPIO_TypeDef *GPIOx, uint32_t PinMask)
00745 {
00746   return ((READ_BIT(GPIOx->LCKR, PinMask) == (PinMask)) ? 1UL : 0UL);
00747 }
00748 
00749 /**
00750   * @brief  Return 1 if one of the pin of a dedicated port is locked. else return 0.
00751   * @rmtoll LCKR         LCKK          LL_GPIO_IsAnyPinLocked
00752   * @param  GPIOx GPIO Port
00753   * @retval State of bit (1 or 0).
00754   */
00755 __STATIC_INLINE uint32_t LL_GPIO_IsAnyPinLocked(GPIO_TypeDef *GPIOx)
00756 {
00757   return ((READ_BIT(GPIOx->LCKR, GPIO_LCKR_LCKK) == (GPIO_LCKR_LCKK)) ? 1UL : 0UL);
00758 }
00759 
00760 /**
00761   * @}
00762   */
00763 
00764 /** @defgroup GPIO_LL_EF_Data_Access Data Access
00765   * @{
00766   */
00767 
00768 /**
00769   * @brief  Return full input data register value for a dedicated port.
00770   * @rmtoll IDR          IDy           LL_GPIO_ReadInputPort
00771   * @param  GPIOx GPIO Port
00772   * @retval Input data register value of port
00773   */
00774 __STATIC_INLINE uint32_t LL_GPIO_ReadInputPort(GPIO_TypeDef *GPIOx)
00775 {
00776   return (uint32_t)(READ_REG(GPIOx->IDR));
00777 }
00778 
00779 /**
00780   * @brief  Return if input data level for several pins of dedicated port is high or low.
00781   * @rmtoll IDR          IDy           LL_GPIO_IsInputPinSet
00782   * @param  GPIOx GPIO Port
00783   * @param  PinMask This parameter can be a combination of the following values:
00784   *         @arg @ref LL_GPIO_PIN_0
00785   *         @arg @ref LL_GPIO_PIN_1
00786   *         @arg @ref LL_GPIO_PIN_2
00787   *         @arg @ref LL_GPIO_PIN_3
00788   *         @arg @ref LL_GPIO_PIN_4
00789   *         @arg @ref LL_GPIO_PIN_5
00790   *         @arg @ref LL_GPIO_PIN_6
00791   *         @arg @ref LL_GPIO_PIN_7
00792   *         @arg @ref LL_GPIO_PIN_8
00793   *         @arg @ref LL_GPIO_PIN_9
00794   *         @arg @ref LL_GPIO_PIN_10
00795   *         @arg @ref LL_GPIO_PIN_11
00796   *         @arg @ref LL_GPIO_PIN_12
00797   *         @arg @ref LL_GPIO_PIN_13
00798   *         @arg @ref LL_GPIO_PIN_14
00799   *         @arg @ref LL_GPIO_PIN_15
00800   *         @arg @ref LL_GPIO_PIN_ALL
00801   * @retval State of bit (1 or 0).
00802   */
00803 __STATIC_INLINE uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)
00804 {
00805   return ((READ_BIT(GPIOx->IDR, PinMask) == (PinMask)) ? 1UL : 0UL);
00806 }
00807 
00808 /**
00809   * @brief  Write output data register for the port.
00810   * @rmtoll ODR          ODy           LL_GPIO_WriteOutputPort
00811   * @param  GPIOx GPIO Port
00812   * @param  PortValue Level value for each pin of the port
00813   * @retval None
00814   */
00815 __STATIC_INLINE void LL_GPIO_WriteOutputPort(GPIO_TypeDef *GPIOx, uint32_t PortValue)
00816 {
00817   WRITE_REG(GPIOx->ODR, PortValue);
00818 }
00819 
00820 /**
00821   * @brief  Return full output data register value for a dedicated port.
00822   * @rmtoll ODR          ODy           LL_GPIO_ReadOutputPort
00823   * @param  GPIOx GPIO Port
00824   * @retval Output data register value of port
00825   */
00826 __STATIC_INLINE uint32_t LL_GPIO_ReadOutputPort(GPIO_TypeDef *GPIOx)
00827 {
00828   return (uint32_t)(READ_REG(GPIOx->ODR));
00829 }
00830 
00831 /**
00832   * @brief  Return if input data level for several pins of dedicated port is high or low.
00833   * @rmtoll ODR          ODy           LL_GPIO_IsOutputPinSet
00834   * @param  GPIOx GPIO Port
00835   * @param  PinMask This parameter can be a combination of the following values:
00836   *         @arg @ref LL_GPIO_PIN_0
00837   *         @arg @ref LL_GPIO_PIN_1
00838   *         @arg @ref LL_GPIO_PIN_2
00839   *         @arg @ref LL_GPIO_PIN_3
00840   *         @arg @ref LL_GPIO_PIN_4
00841   *         @arg @ref LL_GPIO_PIN_5
00842   *         @arg @ref LL_GPIO_PIN_6
00843   *         @arg @ref LL_GPIO_PIN_7
00844   *         @arg @ref LL_GPIO_PIN_8
00845   *         @arg @ref LL_GPIO_PIN_9
00846   *         @arg @ref LL_GPIO_PIN_10
00847   *         @arg @ref LL_GPIO_PIN_11
00848   *         @arg @ref LL_GPIO_PIN_12
00849   *         @arg @ref LL_GPIO_PIN_13
00850   *         @arg @ref LL_GPIO_PIN_14
00851   *         @arg @ref LL_GPIO_PIN_15
00852   *         @arg @ref LL_GPIO_PIN_ALL
00853   * @retval State of bit (1 or 0).
00854   */
00855 __STATIC_INLINE uint32_t LL_GPIO_IsOutputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)
00856 {
00857   return ((READ_BIT(GPIOx->ODR, PinMask) == (PinMask)) ? 1UL : 0UL);
00858 }
00859 
00860 /**
00861   * @brief  Set several pins to high level on dedicated gpio port.
00862   * @rmtoll BSRR         BSy           LL_GPIO_SetOutputPin
00863   * @param  GPIOx GPIO Port
00864   * @param  PinMask This parameter can be a combination of the following values:
00865   *         @arg @ref LL_GPIO_PIN_0
00866   *         @arg @ref LL_GPIO_PIN_1
00867   *         @arg @ref LL_GPIO_PIN_2
00868   *         @arg @ref LL_GPIO_PIN_3
00869   *         @arg @ref LL_GPIO_PIN_4
00870   *         @arg @ref LL_GPIO_PIN_5
00871   *         @arg @ref LL_GPIO_PIN_6
00872   *         @arg @ref LL_GPIO_PIN_7
00873   *         @arg @ref LL_GPIO_PIN_8
00874   *         @arg @ref LL_GPIO_PIN_9
00875   *         @arg @ref LL_GPIO_PIN_10
00876   *         @arg @ref LL_GPIO_PIN_11
00877   *         @arg @ref LL_GPIO_PIN_12
00878   *         @arg @ref LL_GPIO_PIN_13
00879   *         @arg @ref LL_GPIO_PIN_14
00880   *         @arg @ref LL_GPIO_PIN_15
00881   *         @arg @ref LL_GPIO_PIN_ALL
00882   * @retval None
00883   */
00884 __STATIC_INLINE void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
00885 {
00886   WRITE_REG(GPIOx->BSRR, PinMask);
00887 }
00888 
00889 /**
00890   * @brief  Set several pins to low level on dedicated gpio port.
00891   * @rmtoll BSRR         BRy           LL_GPIO_ResetOutputPin
00892   * @param  GPIOx GPIO Port
00893   * @param  PinMask This parameter can be a combination of the following values:
00894   *         @arg @ref LL_GPIO_PIN_0
00895   *         @arg @ref LL_GPIO_PIN_1
00896   *         @arg @ref LL_GPIO_PIN_2
00897   *         @arg @ref LL_GPIO_PIN_3
00898   *         @arg @ref LL_GPIO_PIN_4
00899   *         @arg @ref LL_GPIO_PIN_5
00900   *         @arg @ref LL_GPIO_PIN_6
00901   *         @arg @ref LL_GPIO_PIN_7
00902   *         @arg @ref LL_GPIO_PIN_8
00903   *         @arg @ref LL_GPIO_PIN_9
00904   *         @arg @ref LL_GPIO_PIN_10
00905   *         @arg @ref LL_GPIO_PIN_11
00906   *         @arg @ref LL_GPIO_PIN_12
00907   *         @arg @ref LL_GPIO_PIN_13
00908   *         @arg @ref LL_GPIO_PIN_14
00909   *         @arg @ref LL_GPIO_PIN_15
00910   *         @arg @ref LL_GPIO_PIN_ALL
00911   * @retval None
00912   */
00913 __STATIC_INLINE void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
00914 {
00915   WRITE_REG(GPIOx->BSRR, PinMask << 16U);
00916 }
00917 
00918 /**
00919   * @brief  Toggle data value for several pin of dedicated port.
00920   * @rmtoll ODR          ODy           LL_GPIO_TogglePin
00921   * @param  GPIOx GPIO Port
00922   * @param  PinMask This parameter can be a combination of the following values:
00923   *         @arg @ref LL_GPIO_PIN_0
00924   *         @arg @ref LL_GPIO_PIN_1
00925   *         @arg @ref LL_GPIO_PIN_2
00926   *         @arg @ref LL_GPIO_PIN_3
00927   *         @arg @ref LL_GPIO_PIN_4
00928   *         @arg @ref LL_GPIO_PIN_5
00929   *         @arg @ref LL_GPIO_PIN_6
00930   *         @arg @ref LL_GPIO_PIN_7
00931   *         @arg @ref LL_GPIO_PIN_8
00932   *         @arg @ref LL_GPIO_PIN_9
00933   *         @arg @ref LL_GPIO_PIN_10
00934   *         @arg @ref LL_GPIO_PIN_11
00935   *         @arg @ref LL_GPIO_PIN_12
00936   *         @arg @ref LL_GPIO_PIN_13
00937   *         @arg @ref LL_GPIO_PIN_14
00938   *         @arg @ref LL_GPIO_PIN_15
00939   *         @arg @ref LL_GPIO_PIN_ALL
00940   * @retval None
00941   */
00942 __STATIC_INLINE void LL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
00943 {
00944   uint32_t odr = READ_REG(GPIOx->ODR);
00945   WRITE_REG(GPIOx->BSRR, ((odr & PinMask) << 16u) | (~odr & PinMask));
00946 }
00947 
00948 /**
00949   * @}
00950   */
00951 
00952 #if defined(USE_FULL_LL_DRIVER)
00953 /** @defgroup GPIO_LL_EF_Init Initialization and de-initialization functions
00954   * @{
00955   */
00956 
00957 ErrorStatus LL_GPIO_DeInit(GPIO_TypeDef *GPIOx);
00958 ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStruct);
00959 void        LL_GPIO_StructInit(LL_GPIO_InitTypeDef *GPIO_InitStruct);
00960 
00961 /**
00962   * @}
00963   */
00964 #endif /* USE_FULL_LL_DRIVER */
00965 
00966 /**
00967   * @}
00968   */
00969 
00970 /**
00971   * @}
00972   */
00973 
00974 #endif /*defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG) || defined (GPIOH) || defined (GPIOI) || defined (GPIOJ) || defined (GPIOK) */
00975 /**
00976   * @}
00977   */
00978 
00979 #ifdef __cplusplus
00980 }
00981 #endif
00982 
00983 #endif /* STM32H7xx_LL_GPIO_H */
00984