stm32l5xx_ll_gpio.h 41 KB

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