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