You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

993 lines
37 KiB

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