Subversion Repositories DashDisplay

Rev

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