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