37 #ifndef __STM32F4xx_LL_GPIO_H
38 #define __STM32F4xx_LL_GPIO_H
45 #include "stm32f4xx.h"
51 #if defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG) || defined (GPIOH) || defined (GPIOI) || defined (GPIOJ) || defined (GPIOK)
61 #if defined(USE_FULL_LL_DRIVER)
72 #if defined(USE_FULL_LL_DRIVER)
109 } LL_GPIO_InitTypeDef;
124 #define LL_GPIO_PIN_0 GPIO_BSRR_BS_0
125 #define LL_GPIO_PIN_1 GPIO_BSRR_BS_1
126 #define LL_GPIO_PIN_2 GPIO_BSRR_BS_2
127 #define LL_GPIO_PIN_3 GPIO_BSRR_BS_3
128 #define LL_GPIO_PIN_4 GPIO_BSRR_BS_4
129 #define LL_GPIO_PIN_5 GPIO_BSRR_BS_5
130 #define LL_GPIO_PIN_6 GPIO_BSRR_BS_6
131 #define LL_GPIO_PIN_7 GPIO_BSRR_BS_7
132 #define LL_GPIO_PIN_8 GPIO_BSRR_BS_8
133 #define LL_GPIO_PIN_9 GPIO_BSRR_BS_9
134 #define LL_GPIO_PIN_10 GPIO_BSRR_BS_10
135 #define LL_GPIO_PIN_11 GPIO_BSRR_BS_11
136 #define LL_GPIO_PIN_12 GPIO_BSRR_BS_12
137 #define LL_GPIO_PIN_13 GPIO_BSRR_BS_13
138 #define LL_GPIO_PIN_14 GPIO_BSRR_BS_14
139 #define LL_GPIO_PIN_15 GPIO_BSRR_BS_15
140 #define LL_GPIO_PIN_ALL (GPIO_BSRR_BS_0 | GPIO_BSRR_BS_1 | GPIO_BSRR_BS_2 | \
141 GPIO_BSRR_BS_3 | GPIO_BSRR_BS_4 | GPIO_BSRR_BS_5 | \
142 GPIO_BSRR_BS_6 | GPIO_BSRR_BS_7 | GPIO_BSRR_BS_8 | \
143 GPIO_BSRR_BS_9 | GPIO_BSRR_BS_10 | GPIO_BSRR_BS_11 | \
144 GPIO_BSRR_BS_12 | GPIO_BSRR_BS_13 | GPIO_BSRR_BS_14 | \
153 #define LL_GPIO_MODE_INPUT (0x00000000U)
154 #define LL_GPIO_MODE_OUTPUT GPIO_MODER_MODER0_0
155 #define LL_GPIO_MODE_ALTERNATE GPIO_MODER_MODER0_1
156 #define LL_GPIO_MODE_ANALOG GPIO_MODER_MODER0
164 #define LL_GPIO_OUTPUT_PUSHPULL (0x00000000U)
165 #define LL_GPIO_OUTPUT_OPENDRAIN GPIO_OTYPER_OT_0
173 #define LL_GPIO_SPEED_FREQ_LOW (0x00000000U)
174 #define LL_GPIO_SPEED_FREQ_MEDIUM GPIO_OSPEEDER_OSPEEDR0_0
175 #define LL_GPIO_SPEED_FREQ_HIGH GPIO_OSPEEDER_OSPEEDR0_1
176 #define LL_GPIO_SPEED_FREQ_VERY_HIGH GPIO_OSPEEDER_OSPEEDR0
184 #define LL_GPIO_PULL_NO (0x00000000U)
185 #define LL_GPIO_PULL_UP GPIO_PUPDR_PUPDR0_0
186 #define LL_GPIO_PULL_DOWN GPIO_PUPDR_PUPDR0_1
194 #define LL_GPIO_AF_0 (0x0000000U)
195 #define LL_GPIO_AF_1 (0x0000001U)
196 #define LL_GPIO_AF_2 (0x0000002U)
197 #define LL_GPIO_AF_3 (0x0000003U)
198 #define LL_GPIO_AF_4 (0x0000004U)
199 #define LL_GPIO_AF_5 (0x0000005U)
200 #define LL_GPIO_AF_6 (0x0000006U)
201 #define LL_GPIO_AF_7 (0x0000007U)
202 #define LL_GPIO_AF_8 (0x0000008U)
203 #define LL_GPIO_AF_9 (0x0000009U)
204 #define LL_GPIO_AF_10 (0x000000AU)
205 #define LL_GPIO_AF_11 (0x000000BU)
206 #define LL_GPIO_AF_12 (0x000000CU)
207 #define LL_GPIO_AF_13 (0x000000DU)
208 #define LL_GPIO_AF_14 (0x000000EU)
209 #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__)
290 __STATIC_INLINE
void LL_GPIO_SetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Mode)
292 MODIFY_REG(GPIOx->MODER, (GPIO_MODER_MODER0 << (POSITION_VAL(Pin) * 2U)), (Mode << (POSITION_VAL(Pin) * 2U)));
324 __STATIC_INLINE uint32_t LL_GPIO_GetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin)
326 return (uint32_t)(READ_BIT(GPIOx->MODER,
327 (GPIO_MODER_MODER0 << (POSITION_VAL(Pin) * 2U))) >> (POSITION_VAL(Pin) * 2U));
359 __STATIC_INLINE
void LL_GPIO_SetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t PinMask, uint32_t OutputType)
361 MODIFY_REG(GPIOx->OTYPER, PinMask, (PinMask * OutputType));
393 __STATIC_INLINE uint32_t LL_GPIO_GetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t Pin)
395 return (uint32_t)(READ_BIT(GPIOx->OTYPER, Pin) >> POSITION_VAL(Pin));
430 __STATIC_INLINE
void LL_GPIO_SetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Speed)
432 MODIFY_REG(GPIOx->OSPEEDR, (GPIO_OSPEEDER_OSPEEDR0 << (POSITION_VAL(Pin) * 2U)),
433 (Speed << (POSITION_VAL(Pin) * 2U)));
467 __STATIC_INLINE uint32_t LL_GPIO_GetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin)
469 return (uint32_t)(READ_BIT(GPIOx->OSPEEDR,
470 (GPIO_OSPEEDER_OSPEEDR0 << (POSITION_VAL(Pin) * 2U))) >> (POSITION_VAL(Pin) * 2U));
501 __STATIC_INLINE
void LL_GPIO_SetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Pull)
503 MODIFY_REG(GPIOx->PUPDR, (GPIO_PUPDR_PUPDR0 << (POSITION_VAL(Pin) * 2U)), (Pull << (POSITION_VAL(Pin) * 2U)));
533 __STATIC_INLINE uint32_t LL_GPIO_GetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin)
535 return (uint32_t)(READ_BIT(GPIOx->PUPDR,
536 (GPIO_PUPDR_PUPDR0 << (POSITION_VAL(Pin) * 2U))) >> (POSITION_VAL(Pin) * 2U));
573 __STATIC_INLINE
void LL_GPIO_SetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate)
575 MODIFY_REG(GPIOx->AFR[0], (GPIO_AFRL_AFSEL0 << (POSITION_VAL(Pin) * 4U)),
576 (Alternate << (POSITION_VAL(Pin) * 4U)));
610 __STATIC_INLINE uint32_t LL_GPIO_GetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin)
612 return (uint32_t)(READ_BIT(GPIOx->AFR[0],
613 (GPIO_AFRL_AFSEL0 << (POSITION_VAL(Pin) * 4U))) >> (POSITION_VAL(Pin) * 4U));
650 __STATIC_INLINE
void LL_GPIO_SetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate)
652 MODIFY_REG(GPIOx->AFR[1], (GPIO_AFRH_AFSEL8 << (POSITION_VAL(Pin >> 8U) * 4U)),
653 (Alternate << (POSITION_VAL(Pin >> 8U) * 4U)));
688 __STATIC_INLINE uint32_t LL_GPIO_GetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin)
690 return (uint32_t)(READ_BIT(GPIOx->AFR[1],
691 (GPIO_AFRH_AFSEL8 << (POSITION_VAL(Pin >> 8U) * 4U))) >> (POSITION_VAL(Pin >> 8U) * 4U));
724 __STATIC_INLINE
void LL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
727 WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | PinMask);
728 WRITE_REG(GPIOx->LCKR, PinMask);
729 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));
769 __STATIC_INLINE uint32_t LL_GPIO_IsAnyPinLocked(GPIO_TypeDef *GPIOx)
771 return (READ_BIT(GPIOx->LCKR, GPIO_LCKR_LCKK) == (GPIO_LCKR_LCKK));
788 __STATIC_INLINE uint32_t LL_GPIO_ReadInputPort(GPIO_TypeDef *GPIOx)
790 return (uint32_t)(READ_REG(GPIOx->IDR));
817 __STATIC_INLINE uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)
819 return (READ_BIT(GPIOx->IDR, PinMask) == (PinMask));
829 __STATIC_INLINE
void LL_GPIO_WriteOutputPort(GPIO_TypeDef *GPIOx, uint32_t PortValue)
831 WRITE_REG(GPIOx->ODR, PortValue);
840 __STATIC_INLINE uint32_t LL_GPIO_ReadOutputPort(GPIO_TypeDef *GPIOx)
842 return (uint32_t)(READ_REG(GPIOx->ODR));
869 __STATIC_INLINE uint32_t LL_GPIO_IsOutputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)
871 return (READ_BIT(GPIOx->ODR, PinMask) == (PinMask));
898 __STATIC_INLINE
void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
900 WRITE_REG(GPIOx->BSRR, PinMask);
927 __STATIC_INLINE
void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
929 WRITE_REG(GPIOx->BSRR, (PinMask << 16));
956 __STATIC_INLINE
void LL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
958 WRITE_REG(GPIOx->ODR, READ_REG(GPIOx->ODR) ^ PinMask);
965 #if defined(USE_FULL_LL_DRIVER)
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);