stm32l4xx_ll_gpio.h 41 KB

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