Subversion Repositories DashDisplay

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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