Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:37

0001 /**
0002   ******************************************************************************
0003   * @file    stm32h7xx_ll_gpio.h
0004   * @author  MCD Application Team
0005   * @brief   Header file of GPIO LL module.
0006   ******************************************************************************
0007   * @attention
0008   *
0009   * Copyright (c) 2017 STMicroelectronics.
0010   * All rights reserved.
0011   *
0012   * This software is licensed under terms that can be found in the LICENSE file
0013   * in the root directory of this software component.
0014   * If no LICENSE file comes with this software, it is provided AS-IS.
0015   *
0016   ******************************************************************************
0017   */
0018 
0019 /* Define to prevent recursive inclusion -------------------------------------*/
0020 #ifndef STM32H7xx_LL_GPIO_H
0021 #define STM32H7xx_LL_GPIO_H
0022 
0023 #ifdef __cplusplus
0024 extern "C" {
0025 #endif
0026 
0027 /* Includes ------------------------------------------------------------------*/
0028 #include "stm32h7xx.h"
0029 
0030 /** @addtogroup STM32H7xx_LL_Driver
0031   * @{
0032   */
0033 
0034 #if defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG) || defined (GPIOH) || defined (GPIOI) || defined (GPIOJ) || defined (GPIOK)
0035 
0036 /** @defgroup GPIO_LL GPIO
0037   * @ingroup RTEMSBSPsARMSTM32H7
0038   * @{
0039   */
0040 
0041 /* Private types -------------------------------------------------------------*/
0042 /* Private variables ---------------------------------------------------------*/
0043 /* Private constants ---------------------------------------------------------*/
0044 /* Private macros ------------------------------------------------------------*/
0045 #if defined(USE_FULL_LL_DRIVER) || defined(__rtems__)
0046 /** @defgroup GPIO_LL_Private_Macros GPIO Private Macros
0047   * @ingroup RTEMSBSPsARMSTM32H7
0048   * @{
0049   */
0050 
0051 /**
0052   * @}
0053   */
0054 #endif /*USE_FULL_LL_DRIVER*/
0055 
0056 /* Exported types ------------------------------------------------------------*/
0057 #if defined(USE_FULL_LL_DRIVER) || defined(__rtems__)
0058 /** @defgroup GPIO_LL_ES_INIT GPIO Exported Init structures
0059   * @ingroup RTEMSBSPsARMSTM32H7
0060   * @{
0061   */
0062 
0063 /**
0064   * @brief LL GPIO Init Structure definition
0065   */
0066 typedef struct
0067 {
0068   uint32_t Pin;          /*!< Specifies the GPIO pins to be configured.
0069                               This parameter can be any value of @ref GPIO_LL_EC_PIN */
0070 
0071   uint32_t Mode;         /*!< Specifies the operating mode for the selected pins.
0072                               This parameter can be a value of @ref GPIO_LL_EC_MODE.
0073 
0074                               GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinMode().*/
0075 
0076   uint32_t Speed;        /*!< Specifies the speed for the selected pins.
0077                               This parameter can be a value of @ref GPIO_LL_EC_SPEED.
0078 
0079                               GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinSpeed().*/
0080 
0081   uint32_t OutputType;   /*!< Specifies the operating output type for the selected pins.
0082                               This parameter can be a value of @ref GPIO_LL_EC_OUTPUT.
0083 
0084                               GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinOutputType().*/
0085 
0086   uint32_t Pull;         /*!< Specifies the operating Pull-up/Pull down for the selected pins.
0087                               This parameter can be a value of @ref GPIO_LL_EC_PULL.
0088 
0089                               GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinPull().*/
0090 
0091   uint32_t Alternate;    /*!< Specifies the Peripheral to be connected to the selected pins.
0092                               This parameter can be a value of @ref GPIO_LL_EC_AF.
0093 
0094                               GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetAFPin_0_7() and LL_GPIO_SetAFPin_8_15().*/
0095 } LL_GPIO_InitTypeDef;
0096 
0097 /**
0098   * @}
0099   */
0100 #endif /* USE_FULL_LL_DRIVER */
0101 
0102 /* Exported constants --------------------------------------------------------*/
0103 /** @defgroup GPIO_LL_Exported_Constants GPIO Exported Constants
0104   * @ingroup RTEMSBSPsARMSTM32H7
0105   * @{
0106   */
0107 
0108 /** @defgroup GPIO_LL_EC_PIN PIN
0109   * @ingroup RTEMSBSPsARMSTM32H7
0110   * @{
0111   */
0112 #define LL_GPIO_PIN_0                      GPIO_BSRR_BS0 /*!< Select pin 0 */
0113 #define LL_GPIO_PIN_1                      GPIO_BSRR_BS1 /*!< Select pin 1 */
0114 #define LL_GPIO_PIN_2                      GPIO_BSRR_BS2 /*!< Select pin 2 */
0115 #define LL_GPIO_PIN_3                      GPIO_BSRR_BS3 /*!< Select pin 3 */
0116 #define LL_GPIO_PIN_4                      GPIO_BSRR_BS4 /*!< Select pin 4 */
0117 #define LL_GPIO_PIN_5                      GPIO_BSRR_BS5 /*!< Select pin 5 */
0118 #define LL_GPIO_PIN_6                      GPIO_BSRR_BS6 /*!< Select pin 6 */
0119 #define LL_GPIO_PIN_7                      GPIO_BSRR_BS7 /*!< Select pin 7 */
0120 #define LL_GPIO_PIN_8                      GPIO_BSRR_BS8 /*!< Select pin 8 */
0121 #define LL_GPIO_PIN_9                      GPIO_BSRR_BS9 /*!< Select pin 9 */
0122 #define LL_GPIO_PIN_10                     GPIO_BSRR_BS10 /*!< Select pin 10 */
0123 #define LL_GPIO_PIN_11                     GPIO_BSRR_BS11 /*!< Select pin 11 */
0124 #define LL_GPIO_PIN_12                     GPIO_BSRR_BS12 /*!< Select pin 12 */
0125 #define LL_GPIO_PIN_13                     GPIO_BSRR_BS13 /*!< Select pin 13 */
0126 #define LL_GPIO_PIN_14                     GPIO_BSRR_BS14 /*!< Select pin 14 */
0127 #define LL_GPIO_PIN_15                     GPIO_BSRR_BS15 /*!< Select pin 15 */
0128 #define LL_GPIO_PIN_ALL                    (GPIO_BSRR_BS0 | GPIO_BSRR_BS1  | GPIO_BSRR_BS2  | \
0129                                            GPIO_BSRR_BS3  | GPIO_BSRR_BS4  | GPIO_BSRR_BS5  | \
0130                                            GPIO_BSRR_BS6  | GPIO_BSRR_BS7  | GPIO_BSRR_BS8  | \
0131                                            GPIO_BSRR_BS9  | GPIO_BSRR_BS10 | GPIO_BSRR_BS11 | \
0132                                            GPIO_BSRR_BS12 | GPIO_BSRR_BS13 | GPIO_BSRR_BS14 | \
0133                                            GPIO_BSRR_BS15) /*!< Select all pins */
0134 /**
0135   * @}
0136   */
0137 
0138 /** @defgroup GPIO_LL_EC_MODE Mode
0139   * @ingroup RTEMSBSPsARMSTM32H7
0140   * @{
0141   */
0142 #define LL_GPIO_MODE_INPUT                 (0x00000000U) /*!< Select input mode */
0143 #define LL_GPIO_MODE_OUTPUT                GPIO_MODER_MODE0_0  /*!< Select output mode */
0144 #define LL_GPIO_MODE_ALTERNATE             GPIO_MODER_MODE0_1  /*!< Select alternate function mode */
0145 #define LL_GPIO_MODE_ANALOG                GPIO_MODER_MODE0    /*!< Select analog mode */
0146 /**
0147   * @}
0148   */
0149 
0150 /** @defgroup GPIO_LL_EC_OUTPUT Output Type
0151   * @ingroup RTEMSBSPsARMSTM32H7
0152   * @{
0153   */
0154 #define LL_GPIO_OUTPUT_PUSHPULL            (0x00000000U) /*!< Select push-pull as output type */
0155 #define LL_GPIO_OUTPUT_OPENDRAIN           GPIO_OTYPER_OT0 /*!< Select open-drain as output type */
0156 /**
0157   * @}
0158   */
0159 
0160 /** @defgroup GPIO_LL_EC_SPEED Output Speed
0161   * @ingroup RTEMSBSPsARMSTM32H7
0162   * @{
0163   */
0164 #define LL_GPIO_SPEED_FREQ_LOW             (0x00000000U) /*!< Select I/O low output speed    */
0165 #define LL_GPIO_SPEED_FREQ_MEDIUM          GPIO_OSPEEDR_OSPEED0_0 /*!< Select I/O medium output speed */
0166 #define LL_GPIO_SPEED_FREQ_HIGH            GPIO_OSPEEDR_OSPEED0_1 /*!< Select I/O fast output speed   */
0167 #define LL_GPIO_SPEED_FREQ_VERY_HIGH       GPIO_OSPEEDR_OSPEED0   /*!< Select I/O high output speed   */
0168 /**
0169   * @}
0170   */
0171 #define LL_GPIO_SPEED_LOW                  LL_GPIO_SPEED_FREQ_LOW
0172 #define LL_GPIO_SPEED_MEDIUM               LL_GPIO_SPEED_FREQ_MEDIUM
0173 #define LL_GPIO_SPEED_FAST                 LL_GPIO_SPEED_FREQ_HIGH
0174 #define LL_GPIO_SPEED_HIGH                 LL_GPIO_SPEED_FREQ_VERY_HIGH
0175 
0176 
0177 /** @defgroup GPIO_LL_EC_PULL Pull Up Pull Down
0178   * @ingroup RTEMSBSPsARMSTM32H7
0179   * @{
0180   */
0181 #define LL_GPIO_PULL_NO                    (0x00000000U) /*!< Select I/O no pull */
0182 #define LL_GPIO_PULL_UP                    GPIO_PUPDR_PUPD0_0 /*!< Select I/O pull up */
0183 #define LL_GPIO_PULL_DOWN                  GPIO_PUPDR_PUPD0_1 /*!< Select I/O pull down */
0184 /**
0185   * @}
0186   */
0187 
0188 /** @defgroup GPIO_LL_EC_AF Alternate Function
0189   * @ingroup RTEMSBSPsARMSTM32H7
0190   * @{
0191   */
0192 #define LL_GPIO_AF_0                       (0x0000000U) /*!< Select alternate function 0 */
0193 #define LL_GPIO_AF_1                       (0x0000001U) /*!< Select alternate function 1 */
0194 #define LL_GPIO_AF_2                       (0x0000002U) /*!< Select alternate function 2 */
0195 #define LL_GPIO_AF_3                       (0x0000003U) /*!< Select alternate function 3 */
0196 #define LL_GPIO_AF_4                       (0x0000004U) /*!< Select alternate function 4 */
0197 #define LL_GPIO_AF_5                       (0x0000005U) /*!< Select alternate function 5 */
0198 #define LL_GPIO_AF_6                       (0x0000006U) /*!< Select alternate function 6 */
0199 #define LL_GPIO_AF_7                       (0x0000007U) /*!< Select alternate function 7 */
0200 #define LL_GPIO_AF_8                       (0x0000008U) /*!< Select alternate function 8 */
0201 #define LL_GPIO_AF_9                       (0x0000009U) /*!< Select alternate function 9 */
0202 #define LL_GPIO_AF_10                      (0x000000AU) /*!< Select alternate function 10 */
0203 #define LL_GPIO_AF_11                      (0x000000BU) /*!< Select alternate function 11 */
0204 #define LL_GPIO_AF_12                      (0x000000CU) /*!< Select alternate function 12 */
0205 #define LL_GPIO_AF_13                      (0x000000DU) /*!< Select alternate function 13 */
0206 #define LL_GPIO_AF_14                      (0x000000EU) /*!< Select alternate function 14 */
0207 #define LL_GPIO_AF_15                      (0x000000FU) /*!< Select alternate function 15 */
0208 /**
0209   * @}
0210   */
0211 
0212 /**
0213   * @}
0214   */
0215 
0216 /* Exported macro ------------------------------------------------------------*/
0217 /** @defgroup GPIO_LL_Exported_Macros GPIO Exported Macros
0218   * @ingroup RTEMSBSPsARMSTM32H7
0219   * @{
0220   */
0221 
0222 /** @defgroup GPIO_LL_EM_WRITE_READ Common Write and read registers Macros
0223   * @ingroup RTEMSBSPsARMSTM32H7
0224   * @{
0225   */
0226 
0227 /**
0228   * @brief  Write a value in GPIO register
0229   * @param  __INSTANCE__ GPIO Instance
0230   * @param  __REG__ Register to be written
0231   * @param  __VALUE__ Value to be written in the register
0232   * @retval None
0233   */
0234 #define LL_GPIO_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
0235 
0236 /**
0237   * @brief  Read a value in GPIO register
0238   * @param  __INSTANCE__ GPIO Instance
0239   * @param  __REG__ Register to be read
0240   * @retval Register value
0241   */
0242 #define LL_GPIO_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
0243 /**
0244   * @}
0245   */
0246 
0247 /**
0248   * @}
0249   */
0250 
0251 /* Exported functions --------------------------------------------------------*/
0252 /** @defgroup GPIO_LL_Exported_Functions GPIO Exported Functions
0253   * @ingroup RTEMSBSPsARMSTM32H7
0254   * @{
0255   */
0256 
0257 /** @defgroup GPIO_LL_EF_Port_Configuration Port Configuration
0258   * @ingroup RTEMSBSPsARMSTM32H7
0259   * @{
0260   */
0261 
0262 /**
0263   * @brief  Configure gpio mode for a dedicated pin on dedicated port.
0264   * @note   I/O mode can be Input mode, General purpose output, Alternate function mode or Analog.
0265   * @note   Warning: only one pin can be passed as parameter.
0266   * @rmtoll MODER        MODEy         LL_GPIO_SetPinMode
0267   * @param  GPIOx GPIO Port
0268   * @param  Pin This parameter can be one of the following values:
0269   *         @arg @ref LL_GPIO_PIN_0
0270   *         @arg @ref LL_GPIO_PIN_1
0271   *         @arg @ref LL_GPIO_PIN_2
0272   *         @arg @ref LL_GPIO_PIN_3
0273   *         @arg @ref LL_GPIO_PIN_4
0274   *         @arg @ref LL_GPIO_PIN_5
0275   *         @arg @ref LL_GPIO_PIN_6
0276   *         @arg @ref LL_GPIO_PIN_7
0277   *         @arg @ref LL_GPIO_PIN_8
0278   *         @arg @ref LL_GPIO_PIN_9
0279   *         @arg @ref LL_GPIO_PIN_10
0280   *         @arg @ref LL_GPIO_PIN_11
0281   *         @arg @ref LL_GPIO_PIN_12
0282   *         @arg @ref LL_GPIO_PIN_13
0283   *         @arg @ref LL_GPIO_PIN_14
0284   *         @arg @ref LL_GPIO_PIN_15
0285   * @param  Mode This parameter can be one of the following values:
0286   *         @arg @ref LL_GPIO_MODE_INPUT
0287   *         @arg @ref LL_GPIO_MODE_OUTPUT
0288   *         @arg @ref LL_GPIO_MODE_ALTERNATE
0289   *         @arg @ref LL_GPIO_MODE_ANALOG
0290   * @retval None
0291   */
0292 __STATIC_INLINE void LL_GPIO_SetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Mode)
0293 {
0294   MODIFY_REG(GPIOx->MODER, ((Pin * Pin) * GPIO_MODER_MODE0), ((Pin * Pin) * Mode));
0295 }
0296 
0297 /**
0298   * @brief  Return gpio mode for a dedicated pin on dedicated port.
0299   * @note   I/O mode can be Input mode, General purpose output, Alternate function mode or Analog.
0300   * @note   Warning: only one pin can be passed as parameter.
0301   * @rmtoll MODER        MODEy         LL_GPIO_GetPinMode
0302   * @param  GPIOx GPIO Port
0303   * @param  Pin This parameter can be one of the following values:
0304   *         @arg @ref LL_GPIO_PIN_0
0305   *         @arg @ref LL_GPIO_PIN_1
0306   *         @arg @ref LL_GPIO_PIN_2
0307   *         @arg @ref LL_GPIO_PIN_3
0308   *         @arg @ref LL_GPIO_PIN_4
0309   *         @arg @ref LL_GPIO_PIN_5
0310   *         @arg @ref LL_GPIO_PIN_6
0311   *         @arg @ref LL_GPIO_PIN_7
0312   *         @arg @ref LL_GPIO_PIN_8
0313   *         @arg @ref LL_GPIO_PIN_9
0314   *         @arg @ref LL_GPIO_PIN_10
0315   *         @arg @ref LL_GPIO_PIN_11
0316   *         @arg @ref LL_GPIO_PIN_12
0317   *         @arg @ref LL_GPIO_PIN_13
0318   *         @arg @ref LL_GPIO_PIN_14
0319   *         @arg @ref LL_GPIO_PIN_15
0320   * @retval Returned value can be one of the following values:
0321   *         @arg @ref LL_GPIO_MODE_INPUT
0322   *         @arg @ref LL_GPIO_MODE_OUTPUT
0323   *         @arg @ref LL_GPIO_MODE_ALTERNATE
0324   *         @arg @ref LL_GPIO_MODE_ANALOG
0325   */
0326 __STATIC_INLINE uint32_t LL_GPIO_GetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin)
0327 {
0328   return (uint32_t)(READ_BIT(GPIOx->MODER, ((Pin * Pin) * GPIO_MODER_MODE0)) / (Pin * Pin));
0329 }
0330 
0331 /**
0332   * @brief  Configure gpio output type for several pins on dedicated port.
0333   * @note   Output type as to be set when gpio pin is in output or
0334   *         alternate modes. Possible type are Push-pull or Open-drain.
0335   * @rmtoll OTYPER       OTy           LL_GPIO_SetPinOutputType
0336   * @param  GPIOx GPIO Port
0337   * @param  PinMask This parameter can be a combination of the following values:
0338   *         @arg @ref LL_GPIO_PIN_0
0339   *         @arg @ref LL_GPIO_PIN_1
0340   *         @arg @ref LL_GPIO_PIN_2
0341   *         @arg @ref LL_GPIO_PIN_3
0342   *         @arg @ref LL_GPIO_PIN_4
0343   *         @arg @ref LL_GPIO_PIN_5
0344   *         @arg @ref LL_GPIO_PIN_6
0345   *         @arg @ref LL_GPIO_PIN_7
0346   *         @arg @ref LL_GPIO_PIN_8
0347   *         @arg @ref LL_GPIO_PIN_9
0348   *         @arg @ref LL_GPIO_PIN_10
0349   *         @arg @ref LL_GPIO_PIN_11
0350   *         @arg @ref LL_GPIO_PIN_12
0351   *         @arg @ref LL_GPIO_PIN_13
0352   *         @arg @ref LL_GPIO_PIN_14
0353   *         @arg @ref LL_GPIO_PIN_15
0354   *         @arg @ref LL_GPIO_PIN_ALL
0355   * @param  OutputType This parameter can be one of the following values:
0356   *         @arg @ref LL_GPIO_OUTPUT_PUSHPULL
0357   *         @arg @ref LL_GPIO_OUTPUT_OPENDRAIN
0358   * @retval None
0359   */
0360 __STATIC_INLINE void LL_GPIO_SetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t PinMask, uint32_t OutputType)
0361 {
0362   MODIFY_REG(GPIOx->OTYPER, PinMask, (PinMask * OutputType));
0363 }
0364 
0365 /**
0366   * @brief  Return gpio output type for several pins on dedicated port.
0367   * @note   Output type as to be set when gpio pin is in output or
0368   *         alternate modes. Possible type are Push-pull or Open-drain.
0369   * @note   Warning: only one pin can be passed as parameter.
0370   * @rmtoll OTYPER       OTy           LL_GPIO_GetPinOutputType
0371   * @param  GPIOx GPIO Port
0372   * @param  Pin This parameter can be one of the following values:
0373   *         @arg @ref LL_GPIO_PIN_0
0374   *         @arg @ref LL_GPIO_PIN_1
0375   *         @arg @ref LL_GPIO_PIN_2
0376   *         @arg @ref LL_GPIO_PIN_3
0377   *         @arg @ref LL_GPIO_PIN_4
0378   *         @arg @ref LL_GPIO_PIN_5
0379   *         @arg @ref LL_GPIO_PIN_6
0380   *         @arg @ref LL_GPIO_PIN_7
0381   *         @arg @ref LL_GPIO_PIN_8
0382   *         @arg @ref LL_GPIO_PIN_9
0383   *         @arg @ref LL_GPIO_PIN_10
0384   *         @arg @ref LL_GPIO_PIN_11
0385   *         @arg @ref LL_GPIO_PIN_12
0386   *         @arg @ref LL_GPIO_PIN_13
0387   *         @arg @ref LL_GPIO_PIN_14
0388   *         @arg @ref LL_GPIO_PIN_15
0389   *         @arg @ref LL_GPIO_PIN_ALL
0390   * @retval Returned value can be one of the following values:
0391   *         @arg @ref LL_GPIO_OUTPUT_PUSHPULL
0392   *         @arg @ref LL_GPIO_OUTPUT_OPENDRAIN
0393   */
0394 __STATIC_INLINE uint32_t LL_GPIO_GetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t Pin)
0395 {
0396   return (uint32_t)(READ_BIT(GPIOx->OTYPER, Pin) / Pin);
0397 }
0398 
0399 /**
0400   * @brief  Configure gpio speed for a dedicated pin on dedicated port.
0401   * @note   I/O speed can be Low, Medium, Fast or High speed.
0402   * @note   Warning: only one pin can be passed as parameter.
0403   * @note   Refer to datasheet for frequency specifications and the power
0404   *         supply and load conditions for each speed.
0405   * @rmtoll OSPEEDR      OSPEEDy       LL_GPIO_SetPinSpeed
0406   * @param  GPIOx GPIO Port
0407   * @param  Pin This parameter can be one of the following values:
0408   *         @arg @ref LL_GPIO_PIN_0
0409   *         @arg @ref LL_GPIO_PIN_1
0410   *         @arg @ref LL_GPIO_PIN_2
0411   *         @arg @ref LL_GPIO_PIN_3
0412   *         @arg @ref LL_GPIO_PIN_4
0413   *         @arg @ref LL_GPIO_PIN_5
0414   *         @arg @ref LL_GPIO_PIN_6
0415   *         @arg @ref LL_GPIO_PIN_7
0416   *         @arg @ref LL_GPIO_PIN_8
0417   *         @arg @ref LL_GPIO_PIN_9
0418   *         @arg @ref LL_GPIO_PIN_10
0419   *         @arg @ref LL_GPIO_PIN_11
0420   *         @arg @ref LL_GPIO_PIN_12
0421   *         @arg @ref LL_GPIO_PIN_13
0422   *         @arg @ref LL_GPIO_PIN_14
0423   *         @arg @ref LL_GPIO_PIN_15
0424   * @param  Speed This parameter can be one of the following values:
0425   *         @arg @ref LL_GPIO_SPEED_FREQ_LOW
0426   *         @arg @ref LL_GPIO_SPEED_FREQ_MEDIUM
0427   *         @arg @ref LL_GPIO_SPEED_FREQ_HIGH
0428   *         @arg @ref LL_GPIO_SPEED_FREQ_VERY_HIGH
0429   * @retval None
0430   */
0431 __STATIC_INLINE void LL_GPIO_SetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t  Speed)
0432 {
0433   MODIFY_REG(GPIOx->OSPEEDR, ((Pin * Pin) * GPIO_OSPEEDR_OSPEED0), ((Pin * Pin) * Speed));
0434 }
0435 
0436 /**
0437   * @brief  Return gpio speed for a dedicated pin on dedicated port.
0438   * @note   I/O speed can be Low, Medium, Fast or High speed.
0439   * @note   Warning: only one pin can be passed as parameter.
0440   * @note   Refer to datasheet for frequency specifications and the power
0441   *         supply and load conditions for each speed.
0442   * @rmtoll OSPEEDR      OSPEEDy       LL_GPIO_GetPinSpeed
0443   * @param  GPIOx GPIO Port
0444   * @param  Pin This parameter can be one of the following values:
0445   *         @arg @ref LL_GPIO_PIN_0
0446   *         @arg @ref LL_GPIO_PIN_1
0447   *         @arg @ref LL_GPIO_PIN_2
0448   *         @arg @ref LL_GPIO_PIN_3
0449   *         @arg @ref LL_GPIO_PIN_4
0450   *         @arg @ref LL_GPIO_PIN_5
0451   *         @arg @ref LL_GPIO_PIN_6
0452   *         @arg @ref LL_GPIO_PIN_7
0453   *         @arg @ref LL_GPIO_PIN_8
0454   *         @arg @ref LL_GPIO_PIN_9
0455   *         @arg @ref LL_GPIO_PIN_10
0456   *         @arg @ref LL_GPIO_PIN_11
0457   *         @arg @ref LL_GPIO_PIN_12
0458   *         @arg @ref LL_GPIO_PIN_13
0459   *         @arg @ref LL_GPIO_PIN_14
0460   *         @arg @ref LL_GPIO_PIN_15
0461   * @retval Returned value can be one of the following values:
0462   *         @arg @ref LL_GPIO_SPEED_FREQ_LOW
0463   *         @arg @ref LL_GPIO_SPEED_FREQ_MEDIUM
0464   *         @arg @ref LL_GPIO_SPEED_FREQ_HIGH
0465   *         @arg @ref LL_GPIO_SPEED_FREQ_VERY_HIGH
0466   */
0467 __STATIC_INLINE uint32_t LL_GPIO_GetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin)
0468 {
0469   return (uint32_t)(READ_BIT(GPIOx->OSPEEDR, ((Pin * Pin) * GPIO_OSPEEDR_OSPEED0)) / (Pin * Pin));
0470 }
0471 
0472 /**
0473   * @brief  Configure gpio pull-up or pull-down for a dedicated pin on a dedicated port.
0474   * @note   Warning: only one pin can be passed as parameter.
0475   * @rmtoll PUPDR        PUPDy         LL_GPIO_SetPinPull
0476   * @param  GPIOx GPIO Port
0477   * @param  Pin This parameter can be one of the following values:
0478   *         @arg @ref LL_GPIO_PIN_0
0479   *         @arg @ref LL_GPIO_PIN_1
0480   *         @arg @ref LL_GPIO_PIN_2
0481   *         @arg @ref LL_GPIO_PIN_3
0482   *         @arg @ref LL_GPIO_PIN_4
0483   *         @arg @ref LL_GPIO_PIN_5
0484   *         @arg @ref LL_GPIO_PIN_6
0485   *         @arg @ref LL_GPIO_PIN_7
0486   *         @arg @ref LL_GPIO_PIN_8
0487   *         @arg @ref LL_GPIO_PIN_9
0488   *         @arg @ref LL_GPIO_PIN_10
0489   *         @arg @ref LL_GPIO_PIN_11
0490   *         @arg @ref LL_GPIO_PIN_12
0491   *         @arg @ref LL_GPIO_PIN_13
0492   *         @arg @ref LL_GPIO_PIN_14
0493   *         @arg @ref LL_GPIO_PIN_15
0494   * @param  Pull This parameter can be one of the following values:
0495   *         @arg @ref LL_GPIO_PULL_NO
0496   *         @arg @ref LL_GPIO_PULL_UP
0497   *         @arg @ref LL_GPIO_PULL_DOWN
0498   * @retval None
0499   */
0500 __STATIC_INLINE void LL_GPIO_SetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Pull)
0501 {
0502   MODIFY_REG(GPIOx->PUPDR, ((Pin * Pin) * GPIO_PUPDR_PUPD0), ((Pin * Pin) * Pull));
0503 }
0504 
0505 /**
0506   * @brief  Return gpio pull-up or pull-down for a dedicated pin on a dedicated port
0507   * @note   Warning: only one pin can be passed as parameter.
0508   * @rmtoll PUPDR        PUPDy         LL_GPIO_GetPinPull
0509   * @param  GPIOx GPIO Port
0510   * @param  Pin This parameter can be one of the following values:
0511   *         @arg @ref LL_GPIO_PIN_0
0512   *         @arg @ref LL_GPIO_PIN_1
0513   *         @arg @ref LL_GPIO_PIN_2
0514   *         @arg @ref LL_GPIO_PIN_3
0515   *         @arg @ref LL_GPIO_PIN_4
0516   *         @arg @ref LL_GPIO_PIN_5
0517   *         @arg @ref LL_GPIO_PIN_6
0518   *         @arg @ref LL_GPIO_PIN_7
0519   *         @arg @ref LL_GPIO_PIN_8
0520   *         @arg @ref LL_GPIO_PIN_9
0521   *         @arg @ref LL_GPIO_PIN_10
0522   *         @arg @ref LL_GPIO_PIN_11
0523   *         @arg @ref LL_GPIO_PIN_12
0524   *         @arg @ref LL_GPIO_PIN_13
0525   *         @arg @ref LL_GPIO_PIN_14
0526   *         @arg @ref LL_GPIO_PIN_15
0527   * @retval Returned value can be one of the following values:
0528   *         @arg @ref LL_GPIO_PULL_NO
0529   *         @arg @ref LL_GPIO_PULL_UP
0530   *         @arg @ref LL_GPIO_PULL_DOWN
0531   */
0532 __STATIC_INLINE uint32_t LL_GPIO_GetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin)
0533 {
0534   return (uint32_t)(READ_BIT(GPIOx->PUPDR, ((Pin * Pin) * GPIO_PUPDR_PUPD0)) / (Pin * Pin));
0535 }
0536 
0537 /**
0538   * @brief  Configure gpio alternate function of a dedicated pin from 0 to 7 for a dedicated port.
0539   * @note   Possible values are from AF0 to AF15 depending on target.
0540   * @note   Warning: only one pin can be passed as parameter.
0541   * @rmtoll AFRL         AFSELy        LL_GPIO_SetAFPin_0_7
0542   * @param  GPIOx GPIO Port
0543   * @param  Pin This parameter can be one of the following values:
0544   *         @arg @ref LL_GPIO_PIN_0
0545   *         @arg @ref LL_GPIO_PIN_1
0546   *         @arg @ref LL_GPIO_PIN_2
0547   *         @arg @ref LL_GPIO_PIN_3
0548   *         @arg @ref LL_GPIO_PIN_4
0549   *         @arg @ref LL_GPIO_PIN_5
0550   *         @arg @ref LL_GPIO_PIN_6
0551   *         @arg @ref LL_GPIO_PIN_7
0552   * @param  Alternate This parameter can be one of the following values:
0553   *         @arg @ref LL_GPIO_AF_0
0554   *         @arg @ref LL_GPIO_AF_1
0555   *         @arg @ref LL_GPIO_AF_2
0556   *         @arg @ref LL_GPIO_AF_3
0557   *         @arg @ref LL_GPIO_AF_4
0558   *         @arg @ref LL_GPIO_AF_5
0559   *         @arg @ref LL_GPIO_AF_6
0560   *         @arg @ref LL_GPIO_AF_7
0561   *         @arg @ref LL_GPIO_AF_8
0562   *         @arg @ref LL_GPIO_AF_9
0563   *         @arg @ref LL_GPIO_AF_10
0564   *         @arg @ref LL_GPIO_AF_11
0565   *         @arg @ref LL_GPIO_AF_12
0566   *         @arg @ref LL_GPIO_AF_13
0567   *         @arg @ref LL_GPIO_AF_14
0568   *         @arg @ref LL_GPIO_AF_15
0569   * @retval None
0570   */
0571 __STATIC_INLINE void LL_GPIO_SetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate)
0572 {
0573   MODIFY_REG(GPIOx->AFR[0], ((((Pin * Pin) * Pin) * Pin) * GPIO_AFRL_AFSEL0),
0574              ((((Pin * Pin) * Pin) * Pin) * Alternate));
0575 }
0576 
0577 /**
0578   * @brief  Return gpio alternate function of a dedicated pin from 0 to 7 for a dedicated port.
0579   * @rmtoll AFRL         AFSELy        LL_GPIO_GetAFPin_0_7
0580   * @param  GPIOx GPIO Port
0581   * @param  Pin This parameter can be one of the following values:
0582   *         @arg @ref LL_GPIO_PIN_0
0583   *         @arg @ref LL_GPIO_PIN_1
0584   *         @arg @ref LL_GPIO_PIN_2
0585   *         @arg @ref LL_GPIO_PIN_3
0586   *         @arg @ref LL_GPIO_PIN_4
0587   *         @arg @ref LL_GPIO_PIN_5
0588   *         @arg @ref LL_GPIO_PIN_6
0589   *         @arg @ref LL_GPIO_PIN_7
0590   * @retval Returned value can be one of the following values:
0591   *         @arg @ref LL_GPIO_AF_0
0592   *         @arg @ref LL_GPIO_AF_1
0593   *         @arg @ref LL_GPIO_AF_2
0594   *         @arg @ref LL_GPIO_AF_3
0595   *         @arg @ref LL_GPIO_AF_4
0596   *         @arg @ref LL_GPIO_AF_5
0597   *         @arg @ref LL_GPIO_AF_6
0598   *         @arg @ref LL_GPIO_AF_7
0599   *         @arg @ref LL_GPIO_AF_8
0600   *         @arg @ref LL_GPIO_AF_9
0601   *         @arg @ref LL_GPIO_AF_10
0602   *         @arg @ref LL_GPIO_AF_11
0603   *         @arg @ref LL_GPIO_AF_12
0604   *         @arg @ref LL_GPIO_AF_13
0605   *         @arg @ref LL_GPIO_AF_14
0606   *         @arg @ref LL_GPIO_AF_15
0607   */
0608 __STATIC_INLINE uint32_t LL_GPIO_GetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin)
0609 {
0610   return (uint32_t)(READ_BIT(GPIOx->AFR[0],
0611                              ((((Pin * Pin) * Pin) * Pin) * GPIO_AFRL_AFSEL0)) / (((Pin * Pin) * Pin) * Pin));
0612 }
0613 
0614 /**
0615   * @brief  Configure gpio alternate function of a dedicated pin from 8 to 15 for a dedicated port.
0616   * @note   Possible values are from AF0 to AF15 depending on target.
0617   * @note   Warning: only one pin can be passed as parameter.
0618   * @rmtoll AFRH         AFSELy        LL_GPIO_SetAFPin_8_15
0619   * @param  GPIOx GPIO Port
0620   * @param  Pin This parameter can be one of the following values:
0621   *         @arg @ref LL_GPIO_PIN_8
0622   *         @arg @ref LL_GPIO_PIN_9
0623   *         @arg @ref LL_GPIO_PIN_10
0624   *         @arg @ref LL_GPIO_PIN_11
0625   *         @arg @ref LL_GPIO_PIN_12
0626   *         @arg @ref LL_GPIO_PIN_13
0627   *         @arg @ref LL_GPIO_PIN_14
0628   *         @arg @ref LL_GPIO_PIN_15
0629   * @param  Alternate This parameter can be one of the following values:
0630   *         @arg @ref LL_GPIO_AF_0
0631   *         @arg @ref LL_GPIO_AF_1
0632   *         @arg @ref LL_GPIO_AF_2
0633   *         @arg @ref LL_GPIO_AF_3
0634   *         @arg @ref LL_GPIO_AF_4
0635   *         @arg @ref LL_GPIO_AF_5
0636   *         @arg @ref LL_GPIO_AF_6
0637   *         @arg @ref LL_GPIO_AF_7
0638   *         @arg @ref LL_GPIO_AF_8
0639   *         @arg @ref LL_GPIO_AF_9
0640   *         @arg @ref LL_GPIO_AF_10
0641   *         @arg @ref LL_GPIO_AF_11
0642   *         @arg @ref LL_GPIO_AF_12
0643   *         @arg @ref LL_GPIO_AF_13
0644   *         @arg @ref LL_GPIO_AF_14
0645   *         @arg @ref LL_GPIO_AF_15
0646   * @retval None
0647   */
0648 __STATIC_INLINE void LL_GPIO_SetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate)
0649 {
0650   MODIFY_REG(GPIOx->AFR[1], (((((Pin >> 8U) * (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)) * GPIO_AFRH_AFSEL8),
0651              (((((Pin >> 8U) * (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)) * Alternate));
0652 }
0653 
0654 /**
0655   * @brief  Return gpio alternate function of a dedicated pin from 8 to 15 for a dedicated port.
0656   * @note   Possible values are from AF0 to AF15 depending on target.
0657   * @rmtoll AFRH         AFSELy        LL_GPIO_GetAFPin_8_15
0658   * @param  GPIOx GPIO Port
0659   * @param  Pin This parameter can be one of the following values:
0660   *         @arg @ref LL_GPIO_PIN_8
0661   *         @arg @ref LL_GPIO_PIN_9
0662   *         @arg @ref LL_GPIO_PIN_10
0663   *         @arg @ref LL_GPIO_PIN_11
0664   *         @arg @ref LL_GPIO_PIN_12
0665   *         @arg @ref LL_GPIO_PIN_13
0666   *         @arg @ref LL_GPIO_PIN_14
0667   *         @arg @ref LL_GPIO_PIN_15
0668   * @retval Returned value can be one of the following values:
0669   *         @arg @ref LL_GPIO_AF_0
0670   *         @arg @ref LL_GPIO_AF_1
0671   *         @arg @ref LL_GPIO_AF_2
0672   *         @arg @ref LL_GPIO_AF_3
0673   *         @arg @ref LL_GPIO_AF_4
0674   *         @arg @ref LL_GPIO_AF_5
0675   *         @arg @ref LL_GPIO_AF_6
0676   *         @arg @ref LL_GPIO_AF_7
0677   *         @arg @ref LL_GPIO_AF_8
0678   *         @arg @ref LL_GPIO_AF_9
0679   *         @arg @ref LL_GPIO_AF_10
0680   *         @arg @ref LL_GPIO_AF_11
0681   *         @arg @ref LL_GPIO_AF_12
0682   *         @arg @ref LL_GPIO_AF_13
0683   *         @arg @ref LL_GPIO_AF_14
0684   *         @arg @ref LL_GPIO_AF_15
0685   */
0686 __STATIC_INLINE uint32_t LL_GPIO_GetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin)
0687 {
0688   return (uint32_t)(READ_BIT(GPIOx->AFR[1],
0689                              (((((Pin >> 8U) * (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)) * GPIO_AFRH_AFSEL8)) / ((((Pin >> 8U) *
0690                                  (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)));
0691 }
0692 
0693 
0694 /**
0695   * @brief  Lock configuration of several pins for a dedicated port.
0696   * @note   When the lock sequence has been applied on a port bit, the
0697   *         value of this port bit can no longer be modified until the
0698   *         next reset.
0699   * @note   Each lock bit freezes a specific configuration register
0700   *         (control and alternate function registers).
0701   * @rmtoll LCKR         LCKK          LL_GPIO_LockPin
0702   * @param  GPIOx GPIO Port
0703   * @param  PinMask This parameter can be a combination of the following values:
0704   *         @arg @ref LL_GPIO_PIN_0
0705   *         @arg @ref LL_GPIO_PIN_1
0706   *         @arg @ref LL_GPIO_PIN_2
0707   *         @arg @ref LL_GPIO_PIN_3
0708   *         @arg @ref LL_GPIO_PIN_4
0709   *         @arg @ref LL_GPIO_PIN_5
0710   *         @arg @ref LL_GPIO_PIN_6
0711   *         @arg @ref LL_GPIO_PIN_7
0712   *         @arg @ref LL_GPIO_PIN_8
0713   *         @arg @ref LL_GPIO_PIN_9
0714   *         @arg @ref LL_GPIO_PIN_10
0715   *         @arg @ref LL_GPIO_PIN_11
0716   *         @arg @ref LL_GPIO_PIN_12
0717   *         @arg @ref LL_GPIO_PIN_13
0718   *         @arg @ref LL_GPIO_PIN_14
0719   *         @arg @ref LL_GPIO_PIN_15
0720   *         @arg @ref LL_GPIO_PIN_ALL
0721   * @retval None
0722   */
0723 __STATIC_INLINE void LL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
0724 {
0725   __IO uint32_t temp;
0726   WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | PinMask);
0727   WRITE_REG(GPIOx->LCKR, PinMask);
0728   WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | PinMask);
0729   /* Read LCKK register. This read is mandatory to complete key lock sequence */
0730   temp = READ_REG(GPIOx->LCKR);
0731   (void) temp;
0732 }
0733 
0734 /**
0735   * @brief  Return 1 if all pins passed as parameter, of a dedicated port, are locked. else Return 0.
0736   * @rmtoll LCKR         LCKy          LL_GPIO_IsPinLocked
0737   * @param  GPIOx GPIO Port
0738   * @param  PinMask This parameter can be a combination of the following values:
0739   *         @arg @ref LL_GPIO_PIN_0
0740   *         @arg @ref LL_GPIO_PIN_1
0741   *         @arg @ref LL_GPIO_PIN_2
0742   *         @arg @ref LL_GPIO_PIN_3
0743   *         @arg @ref LL_GPIO_PIN_4
0744   *         @arg @ref LL_GPIO_PIN_5
0745   *         @arg @ref LL_GPIO_PIN_6
0746   *         @arg @ref LL_GPIO_PIN_7
0747   *         @arg @ref LL_GPIO_PIN_8
0748   *         @arg @ref LL_GPIO_PIN_9
0749   *         @arg @ref LL_GPIO_PIN_10
0750   *         @arg @ref LL_GPIO_PIN_11
0751   *         @arg @ref LL_GPIO_PIN_12
0752   *         @arg @ref LL_GPIO_PIN_13
0753   *         @arg @ref LL_GPIO_PIN_14
0754   *         @arg @ref LL_GPIO_PIN_15
0755   *         @arg @ref LL_GPIO_PIN_ALL
0756   * @retval State of bit (1 or 0).
0757   */
0758 __STATIC_INLINE uint32_t LL_GPIO_IsPinLocked(GPIO_TypeDef *GPIOx, uint32_t PinMask)
0759 {
0760   return ((READ_BIT(GPIOx->LCKR, PinMask) == (PinMask)) ? 1UL : 0UL);
0761 }
0762 
0763 /**
0764   * @brief  Return 1 if one of the pin of a dedicated port is locked. else return 0.
0765   * @rmtoll LCKR         LCKK          LL_GPIO_IsAnyPinLocked
0766   * @param  GPIOx GPIO Port
0767   * @retval State of bit (1 or 0).
0768   */
0769 __STATIC_INLINE uint32_t LL_GPIO_IsAnyPinLocked(GPIO_TypeDef *GPIOx)
0770 {
0771   return ((READ_BIT(GPIOx->LCKR, GPIO_LCKR_LCKK) == (GPIO_LCKR_LCKK)) ? 1UL : 0UL);
0772 }
0773 
0774 /**
0775   * @}
0776   */
0777 
0778 /** @defgroup GPIO_LL_EF_Data_Access Data Access
0779   * @ingroup RTEMSBSPsARMSTM32H7
0780   * @{
0781   */
0782 
0783 /**
0784   * @brief  Return full input data register value for a dedicated port.
0785   * @rmtoll IDR          IDy           LL_GPIO_ReadInputPort
0786   * @param  GPIOx GPIO Port
0787   * @retval Input data register value of port
0788   */
0789 __STATIC_INLINE uint32_t LL_GPIO_ReadInputPort(GPIO_TypeDef *GPIOx)
0790 {
0791   return (uint32_t)(READ_REG(GPIOx->IDR));
0792 }
0793 
0794 /**
0795   * @brief  Return if input data level for several pins of dedicated port is high or low.
0796   * @rmtoll IDR          IDy           LL_GPIO_IsInputPinSet
0797   * @param  GPIOx GPIO Port
0798   * @param  PinMask This parameter can be a combination of the following values:
0799   *         @arg @ref LL_GPIO_PIN_0
0800   *         @arg @ref LL_GPIO_PIN_1
0801   *         @arg @ref LL_GPIO_PIN_2
0802   *         @arg @ref LL_GPIO_PIN_3
0803   *         @arg @ref LL_GPIO_PIN_4
0804   *         @arg @ref LL_GPIO_PIN_5
0805   *         @arg @ref LL_GPIO_PIN_6
0806   *         @arg @ref LL_GPIO_PIN_7
0807   *         @arg @ref LL_GPIO_PIN_8
0808   *         @arg @ref LL_GPIO_PIN_9
0809   *         @arg @ref LL_GPIO_PIN_10
0810   *         @arg @ref LL_GPIO_PIN_11
0811   *         @arg @ref LL_GPIO_PIN_12
0812   *         @arg @ref LL_GPIO_PIN_13
0813   *         @arg @ref LL_GPIO_PIN_14
0814   *         @arg @ref LL_GPIO_PIN_15
0815   *         @arg @ref LL_GPIO_PIN_ALL
0816   * @retval State of bit (1 or 0).
0817   */
0818 __STATIC_INLINE uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)
0819 {
0820   return ((READ_BIT(GPIOx->IDR, PinMask) == (PinMask)) ? 1UL : 0UL);
0821 }
0822 
0823 /**
0824   * @brief  Write output data register for the port.
0825   * @rmtoll ODR          ODy           LL_GPIO_WriteOutputPort
0826   * @param  GPIOx GPIO Port
0827   * @param  PortValue Level value for each pin of the port
0828   * @retval None
0829   */
0830 __STATIC_INLINE void LL_GPIO_WriteOutputPort(GPIO_TypeDef *GPIOx, uint32_t PortValue)
0831 {
0832   WRITE_REG(GPIOx->ODR, PortValue);
0833 }
0834 
0835 /**
0836   * @brief  Return full output data register value for a dedicated port.
0837   * @rmtoll ODR          ODy           LL_GPIO_ReadOutputPort
0838   * @param  GPIOx GPIO Port
0839   * @retval Output data register value of port
0840   */
0841 __STATIC_INLINE uint32_t LL_GPIO_ReadOutputPort(GPIO_TypeDef *GPIOx)
0842 {
0843   return (uint32_t)(READ_REG(GPIOx->ODR));
0844 }
0845 
0846 /**
0847   * @brief  Return if input data level for several pins of dedicated port is high or low.
0848   * @rmtoll ODR          ODy           LL_GPIO_IsOutputPinSet
0849   * @param  GPIOx GPIO Port
0850   * @param  PinMask This parameter can be a combination of the following values:
0851   *         @arg @ref LL_GPIO_PIN_0
0852   *         @arg @ref LL_GPIO_PIN_1
0853   *         @arg @ref LL_GPIO_PIN_2
0854   *         @arg @ref LL_GPIO_PIN_3
0855   *         @arg @ref LL_GPIO_PIN_4
0856   *         @arg @ref LL_GPIO_PIN_5
0857   *         @arg @ref LL_GPIO_PIN_6
0858   *         @arg @ref LL_GPIO_PIN_7
0859   *         @arg @ref LL_GPIO_PIN_8
0860   *         @arg @ref LL_GPIO_PIN_9
0861   *         @arg @ref LL_GPIO_PIN_10
0862   *         @arg @ref LL_GPIO_PIN_11
0863   *         @arg @ref LL_GPIO_PIN_12
0864   *         @arg @ref LL_GPIO_PIN_13
0865   *         @arg @ref LL_GPIO_PIN_14
0866   *         @arg @ref LL_GPIO_PIN_15
0867   *         @arg @ref LL_GPIO_PIN_ALL
0868   * @retval State of bit (1 or 0).
0869   */
0870 __STATIC_INLINE uint32_t LL_GPIO_IsOutputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)
0871 {
0872   return ((READ_BIT(GPIOx->ODR, PinMask) == (PinMask)) ? 1UL : 0UL);
0873 }
0874 
0875 /**
0876   * @brief  Set several pins to high level on dedicated gpio port.
0877   * @rmtoll BSRR         BSy           LL_GPIO_SetOutputPin
0878   * @param  GPIOx GPIO Port
0879   * @param  PinMask This parameter can be a combination of the following values:
0880   *         @arg @ref LL_GPIO_PIN_0
0881   *         @arg @ref LL_GPIO_PIN_1
0882   *         @arg @ref LL_GPIO_PIN_2
0883   *         @arg @ref LL_GPIO_PIN_3
0884   *         @arg @ref LL_GPIO_PIN_4
0885   *         @arg @ref LL_GPIO_PIN_5
0886   *         @arg @ref LL_GPIO_PIN_6
0887   *         @arg @ref LL_GPIO_PIN_7
0888   *         @arg @ref LL_GPIO_PIN_8
0889   *         @arg @ref LL_GPIO_PIN_9
0890   *         @arg @ref LL_GPIO_PIN_10
0891   *         @arg @ref LL_GPIO_PIN_11
0892   *         @arg @ref LL_GPIO_PIN_12
0893   *         @arg @ref LL_GPIO_PIN_13
0894   *         @arg @ref LL_GPIO_PIN_14
0895   *         @arg @ref LL_GPIO_PIN_15
0896   *         @arg @ref LL_GPIO_PIN_ALL
0897   * @retval None
0898   */
0899 __STATIC_INLINE void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
0900 {
0901   WRITE_REG(GPIOx->BSRR, PinMask);
0902 }
0903 
0904 /**
0905   * @brief  Set several pins to low level on dedicated gpio port.
0906   * @rmtoll BSRR         BRy           LL_GPIO_ResetOutputPin
0907   * @param  GPIOx GPIO Port
0908   * @param  PinMask This parameter can be a combination of the following values:
0909   *         @arg @ref LL_GPIO_PIN_0
0910   *         @arg @ref LL_GPIO_PIN_1
0911   *         @arg @ref LL_GPIO_PIN_2
0912   *         @arg @ref LL_GPIO_PIN_3
0913   *         @arg @ref LL_GPIO_PIN_4
0914   *         @arg @ref LL_GPIO_PIN_5
0915   *         @arg @ref LL_GPIO_PIN_6
0916   *         @arg @ref LL_GPIO_PIN_7
0917   *         @arg @ref LL_GPIO_PIN_8
0918   *         @arg @ref LL_GPIO_PIN_9
0919   *         @arg @ref LL_GPIO_PIN_10
0920   *         @arg @ref LL_GPIO_PIN_11
0921   *         @arg @ref LL_GPIO_PIN_12
0922   *         @arg @ref LL_GPIO_PIN_13
0923   *         @arg @ref LL_GPIO_PIN_14
0924   *         @arg @ref LL_GPIO_PIN_15
0925   *         @arg @ref LL_GPIO_PIN_ALL
0926   * @retval None
0927   */
0928 __STATIC_INLINE void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
0929 {
0930   WRITE_REG(GPIOx->BSRR, PinMask << 16U);
0931 }
0932 
0933 /**
0934   * @brief  Toggle data value for several pin of dedicated port.
0935   * @rmtoll ODR          ODy           LL_GPIO_TogglePin
0936   * @param  GPIOx GPIO Port
0937   * @param  PinMask This parameter can be a combination of the following values:
0938   *         @arg @ref LL_GPIO_PIN_0
0939   *         @arg @ref LL_GPIO_PIN_1
0940   *         @arg @ref LL_GPIO_PIN_2
0941   *         @arg @ref LL_GPIO_PIN_3
0942   *         @arg @ref LL_GPIO_PIN_4
0943   *         @arg @ref LL_GPIO_PIN_5
0944   *         @arg @ref LL_GPIO_PIN_6
0945   *         @arg @ref LL_GPIO_PIN_7
0946   *         @arg @ref LL_GPIO_PIN_8
0947   *         @arg @ref LL_GPIO_PIN_9
0948   *         @arg @ref LL_GPIO_PIN_10
0949   *         @arg @ref LL_GPIO_PIN_11
0950   *         @arg @ref LL_GPIO_PIN_12
0951   *         @arg @ref LL_GPIO_PIN_13
0952   *         @arg @ref LL_GPIO_PIN_14
0953   *         @arg @ref LL_GPIO_PIN_15
0954   *         @arg @ref LL_GPIO_PIN_ALL
0955   * @retval None
0956   */
0957 __STATIC_INLINE void LL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
0958 {
0959   uint32_t odr = READ_REG(GPIOx->ODR);
0960   WRITE_REG(GPIOx->BSRR, ((odr & PinMask) << 16u) | (~odr & PinMask));
0961 }
0962 
0963 /**
0964   * @}
0965   */
0966 
0967 #if defined(USE_FULL_LL_DRIVER) || defined(__rtems__)
0968 /** @defgroup GPIO_LL_EF_Init Initialization and de-initialization functions
0969   * @ingroup RTEMSBSPsARMSTM32H7
0970   * @{
0971   */
0972 
0973 ErrorStatus LL_GPIO_DeInit(GPIO_TypeDef *GPIOx);
0974 ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStruct);
0975 void        LL_GPIO_StructInit(LL_GPIO_InitTypeDef *GPIO_InitStruct);
0976 
0977 /**
0978   * @}
0979   */
0980 #endif /* USE_FULL_LL_DRIVER */
0981 
0982 /**
0983   * @}
0984   */
0985 
0986 /**
0987   * @}
0988   */
0989 
0990 #endif /*defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG) || defined (GPIOH) || defined (GPIOI) || defined (GPIOJ) || defined (GPIOK) */
0991 /**
0992   * @}
0993   */
0994 
0995 #ifdef __cplusplus
0996 }
0997 #endif
0998 
0999 #endif /* STM32H7xx_LL_GPIO_H */
1000