20#ifndef STM32H7xx_LL_GPIO_H
21#define STM32H7xx_LL_GPIO_H
34#if defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG) || defined (GPIOH) || defined (GPIOI) || defined (GPIOJ) || defined (GPIOK)
45#if defined(USE_FULL_LL_DRIVER) || defined(__rtems__)
57#if defined(USE_FULL_LL_DRIVER) || defined(__rtems__)
112#define LL_GPIO_PIN_0 GPIO_BSRR_BS0
113#define LL_GPIO_PIN_1 GPIO_BSRR_BS1
114#define LL_GPIO_PIN_2 GPIO_BSRR_BS2
115#define LL_GPIO_PIN_3 GPIO_BSRR_BS3
116#define LL_GPIO_PIN_4 GPIO_BSRR_BS4
117#define LL_GPIO_PIN_5 GPIO_BSRR_BS5
118#define LL_GPIO_PIN_6 GPIO_BSRR_BS6
119#define LL_GPIO_PIN_7 GPIO_BSRR_BS7
120#define LL_GPIO_PIN_8 GPIO_BSRR_BS8
121#define LL_GPIO_PIN_9 GPIO_BSRR_BS9
122#define LL_GPIO_PIN_10 GPIO_BSRR_BS10
123#define LL_GPIO_PIN_11 GPIO_BSRR_BS11
124#define LL_GPIO_PIN_12 GPIO_BSRR_BS12
125#define LL_GPIO_PIN_13 GPIO_BSRR_BS13
126#define LL_GPIO_PIN_14 GPIO_BSRR_BS14
127#define LL_GPIO_PIN_15 GPIO_BSRR_BS15
128#define LL_GPIO_PIN_ALL (GPIO_BSRR_BS0 | GPIO_BSRR_BS1 | GPIO_BSRR_BS2 | \
129 GPIO_BSRR_BS3 | GPIO_BSRR_BS4 | GPIO_BSRR_BS5 | \
130 GPIO_BSRR_BS6 | GPIO_BSRR_BS7 | GPIO_BSRR_BS8 | \
131 GPIO_BSRR_BS9 | GPIO_BSRR_BS10 | GPIO_BSRR_BS11 | \
132 GPIO_BSRR_BS12 | GPIO_BSRR_BS13 | GPIO_BSRR_BS14 | \
142#define LL_GPIO_MODE_INPUT (0x00000000U)
143#define LL_GPIO_MODE_OUTPUT GPIO_MODER_MODE0_0
144#define LL_GPIO_MODE_ALTERNATE GPIO_MODER_MODE0_1
145#define LL_GPIO_MODE_ANALOG GPIO_MODER_MODE0
154#define LL_GPIO_OUTPUT_PUSHPULL (0x00000000U)
155#define LL_GPIO_OUTPUT_OPENDRAIN GPIO_OTYPER_OT0
164#define LL_GPIO_SPEED_FREQ_LOW (0x00000000U)
165#define LL_GPIO_SPEED_FREQ_MEDIUM GPIO_OSPEEDR_OSPEED0_0
166#define LL_GPIO_SPEED_FREQ_HIGH GPIO_OSPEEDR_OSPEED0_1
167#define LL_GPIO_SPEED_FREQ_VERY_HIGH GPIO_OSPEEDR_OSPEED0
171#define LL_GPIO_SPEED_LOW LL_GPIO_SPEED_FREQ_LOW
172#define LL_GPIO_SPEED_MEDIUM LL_GPIO_SPEED_FREQ_MEDIUM
173#define LL_GPIO_SPEED_FAST LL_GPIO_SPEED_FREQ_HIGH
174#define LL_GPIO_SPEED_HIGH LL_GPIO_SPEED_FREQ_VERY_HIGH
181#define LL_GPIO_PULL_NO (0x00000000U)
182#define LL_GPIO_PULL_UP GPIO_PUPDR_PUPD0_0
183#define LL_GPIO_PULL_DOWN GPIO_PUPDR_PUPD0_1
192#define LL_GPIO_AF_0 (0x0000000U)
193#define LL_GPIO_AF_1 (0x0000001U)
194#define LL_GPIO_AF_2 (0x0000002U)
195#define LL_GPIO_AF_3 (0x0000003U)
196#define LL_GPIO_AF_4 (0x0000004U)
197#define LL_GPIO_AF_5 (0x0000005U)
198#define LL_GPIO_AF_6 (0x0000006U)
199#define LL_GPIO_AF_7 (0x0000007U)
200#define LL_GPIO_AF_8 (0x0000008U)
201#define LL_GPIO_AF_9 (0x0000009U)
202#define LL_GPIO_AF_10 (0x000000AU)
203#define LL_GPIO_AF_11 (0x000000BU)
204#define LL_GPIO_AF_12 (0x000000CU)
205#define LL_GPIO_AF_13 (0x000000DU)
206#define LL_GPIO_AF_14 (0x000000EU)
207#define LL_GPIO_AF_15 (0x000000FU)
234#define LL_GPIO_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
242#define LL_GPIO_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
292__STATIC_INLINE
void LL_GPIO_SetPinMode(
GPIO_TypeDef *GPIOx, uint32_t
Pin, uint32_t Mode)
294 MODIFY_REG(GPIOx->
MODER, ((
Pin *
Pin) * GPIO_MODER_MODE0), ((
Pin *
Pin) * Mode));
326__STATIC_INLINE uint32_t LL_GPIO_GetPinMode(
GPIO_TypeDef *GPIOx, uint32_t
Pin)
328 return (uint32_t)(READ_BIT(GPIOx->
MODER, ((
Pin *
Pin) * GPIO_MODER_MODE0)) / (
Pin *
Pin));
360__STATIC_INLINE
void LL_GPIO_SetPinOutputType(
GPIO_TypeDef *GPIOx, uint32_t PinMask, uint32_t OutputType)
362 MODIFY_REG(GPIOx->
OTYPER, PinMask, (PinMask * OutputType));
394__STATIC_INLINE uint32_t LL_GPIO_GetPinOutputType(
GPIO_TypeDef *GPIOx, uint32_t
Pin)
431__STATIC_INLINE
void LL_GPIO_SetPinSpeed(
GPIO_TypeDef *GPIOx, uint32_t
Pin, uint32_t Speed)
467__STATIC_INLINE uint32_t LL_GPIO_GetPinSpeed(
GPIO_TypeDef *GPIOx, uint32_t
Pin)
469 return (uint32_t)(READ_BIT(GPIOx->
OSPEEDR, ((
Pin *
Pin) * GPIO_OSPEEDR_OSPEED0)) / (
Pin *
Pin));
500__STATIC_INLINE
void LL_GPIO_SetPinPull(
GPIO_TypeDef *GPIOx, uint32_t
Pin, uint32_t Pull)
502 MODIFY_REG(GPIOx->
PUPDR, ((
Pin *
Pin) * GPIO_PUPDR_PUPD0), ((
Pin *
Pin) * Pull));
532__STATIC_INLINE uint32_t LL_GPIO_GetPinPull(
GPIO_TypeDef *GPIOx, uint32_t
Pin)
534 return (uint32_t)(READ_BIT(GPIOx->
PUPDR, ((
Pin *
Pin) * GPIO_PUPDR_PUPD0)) / (
Pin *
Pin));
571__STATIC_INLINE
void LL_GPIO_SetAFPin_0_7(
GPIO_TypeDef *GPIOx, uint32_t
Pin, uint32_t Alternate)
573 MODIFY_REG(GPIOx->
AFR[0], ((((
Pin *
Pin) *
Pin) *
Pin) * GPIO_AFRL_AFSEL0),
608__STATIC_INLINE uint32_t LL_GPIO_GetAFPin_0_7(
GPIO_TypeDef *GPIOx, uint32_t
Pin)
610 return (uint32_t)(READ_BIT(GPIOx->
AFR[0],
648__STATIC_INLINE
void LL_GPIO_SetAFPin_8_15(
GPIO_TypeDef *GPIOx, uint32_t
Pin, uint32_t Alternate)
650 MODIFY_REG(GPIOx->
AFR[1], (((((
Pin >> 8U) * (
Pin >> 8U)) * (
Pin >> 8U)) * (
Pin >> 8U)) * GPIO_AFRH_AFSEL8),
651 (((((
Pin >> 8U) * (
Pin >> 8U)) * (
Pin >> 8U)) * (
Pin >> 8U)) * Alternate));
686__STATIC_INLINE uint32_t LL_GPIO_GetAFPin_8_15(
GPIO_TypeDef *GPIOx, uint32_t
Pin)
688 return (uint32_t)(READ_BIT(GPIOx->
AFR[1],
689 (((((
Pin >> 8U) * (
Pin >> 8U)) * (
Pin >> 8U)) * (
Pin >> 8U)) * GPIO_AFRH_AFSEL8)) / ((((
Pin >> 8U) *
690 (
Pin >> 8U)) * (
Pin >> 8U)) * (
Pin >> 8U)));
723__STATIC_INLINE
void LL_GPIO_LockPin(
GPIO_TypeDef *GPIOx, uint32_t PinMask)
726 WRITE_REG(GPIOx->
LCKR, GPIO_LCKR_LCKK | PinMask);
727 WRITE_REG(GPIOx->
LCKR, PinMask);
728 WRITE_REG(GPIOx->
LCKR, GPIO_LCKR_LCKK | PinMask);
730 temp = READ_REG(GPIOx->
LCKR);
758__STATIC_INLINE uint32_t LL_GPIO_IsPinLocked(
GPIO_TypeDef *GPIOx, uint32_t PinMask)
760 return ((READ_BIT(GPIOx->
LCKR, PinMask) == (PinMask)) ? 1UL : 0UL);
769__STATIC_INLINE uint32_t LL_GPIO_IsAnyPinLocked(
GPIO_TypeDef *GPIOx)
771 return ((READ_BIT(GPIOx->
LCKR, GPIO_LCKR_LCKK) == (GPIO_LCKR_LCKK)) ? 1UL : 0UL);
789__STATIC_INLINE uint32_t LL_GPIO_ReadInputPort(
GPIO_TypeDef *GPIOx)
791 return (uint32_t)(READ_REG(GPIOx->
IDR));
818__STATIC_INLINE uint32_t LL_GPIO_IsInputPinSet(
GPIO_TypeDef *GPIOx, uint32_t PinMask)
820 return ((READ_BIT(GPIOx->
IDR, PinMask) == (PinMask)) ? 1UL : 0UL);
830__STATIC_INLINE
void LL_GPIO_WriteOutputPort(
GPIO_TypeDef *GPIOx, uint32_t PortValue)
832 WRITE_REG(GPIOx->
ODR, PortValue);
841__STATIC_INLINE uint32_t LL_GPIO_ReadOutputPort(
GPIO_TypeDef *GPIOx)
843 return (uint32_t)(READ_REG(GPIOx->
ODR));
870__STATIC_INLINE uint32_t LL_GPIO_IsOutputPinSet(
GPIO_TypeDef *GPIOx, uint32_t PinMask)
872 return ((READ_BIT(GPIOx->
ODR, PinMask) == (PinMask)) ? 1UL : 0UL);
899__STATIC_INLINE
void LL_GPIO_SetOutputPin(
GPIO_TypeDef *GPIOx, uint32_t PinMask)
901 WRITE_REG(GPIOx->
BSRR, PinMask);
928__STATIC_INLINE
void LL_GPIO_ResetOutputPin(
GPIO_TypeDef *GPIOx, uint32_t PinMask)
930 WRITE_REG(GPIOx->
BSRR, PinMask << 16U);
957__STATIC_INLINE
void LL_GPIO_TogglePin(
GPIO_TypeDef *GPIOx, uint32_t PinMask)
959 uint32_t odr = READ_REG(GPIOx->
ODR);
960 WRITE_REG(GPIOx->
BSRR, ((odr & PinMask) << 16u) | (~odr & PinMask));
967#if defined(USE_FULL_LL_DRIVER) || defined(__rtems__)
974ErrorStatus LL_GPIO_Init(
GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStruct);
975void LL_GPIO_StructInit(LL_GPIO_InitTypeDef *GPIO_InitStruct);
#define __IO
Definition: core_cm4.h:239
CMSIS STM32H7xx Device Peripheral Access Layer Header File.
General Purpose I/O.
Definition: stm32h723xx.h:1066
__IO uint32_t OSPEEDR
Definition: stm32h723xx.h:1069
__IO uint32_t PUPDR
Definition: stm32h723xx.h:1070
__IO uint32_t ODR
Definition: stm32h723xx.h:1072
__IO uint32_t OTYPER
Definition: stm32h723xx.h:1068
__IO uint32_t LCKR
Definition: stm32h723xx.h:1074
__IO uint32_t MODER
Definition: stm32h723xx.h:1067
__IO uint32_t BSRR
Definition: stm32h723xx.h:1073
__IO uint32_t IDR
Definition: stm32h723xx.h:1071
__IO uint32_t AFR[2]
Definition: stm32h723xx.h:1075