RTEMS 6.1-rc1
stm32h7xx_ll_gpio.h
Go to the documentation of this file.
1
19/* Define to prevent recursive inclusion -------------------------------------*/
20#ifndef STM32H7xx_LL_GPIO_H
21#define STM32H7xx_LL_GPIO_H
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27/* Includes ------------------------------------------------------------------*/
28#include "stm32h7xx.h"
29
34#if defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG) || defined (GPIOH) || defined (GPIOI) || defined (GPIOJ) || defined (GPIOK)
35
41/* Private types -------------------------------------------------------------*/
42/* Private variables ---------------------------------------------------------*/
43/* Private constants ---------------------------------------------------------*/
44/* Private macros ------------------------------------------------------------*/
45#if defined(USE_FULL_LL_DRIVER) || defined(__rtems__)
54#endif /*USE_FULL_LL_DRIVER*/
55
56/* Exported types ------------------------------------------------------------*/
57#if defined(USE_FULL_LL_DRIVER) || defined(__rtems__)
66typedef struct
67{
68 uint32_t Pin;
71 uint32_t Mode;
76 uint32_t Speed;
81 uint32_t OutputType;
86 uint32_t Pull;
91 uint32_t Alternate;
95} LL_GPIO_InitTypeDef;
96
100#endif /* USE_FULL_LL_DRIVER */
101
102/* Exported constants --------------------------------------------------------*/
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 | \
133 GPIO_BSRR_BS15)
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
175
176
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)
216/* Exported macro ------------------------------------------------------------*/
234#define LL_GPIO_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
235
242#define LL_GPIO_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
251/* Exported functions --------------------------------------------------------*/
292__STATIC_INLINE void LL_GPIO_SetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Mode)
293{
294 MODIFY_REG(GPIOx->MODER, ((Pin * Pin) * GPIO_MODER_MODE0), ((Pin * Pin) * Mode));
295}
296
326__STATIC_INLINE uint32_t LL_GPIO_GetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin)
327{
328 return (uint32_t)(READ_BIT(GPIOx->MODER, ((Pin * Pin) * GPIO_MODER_MODE0)) / (Pin * Pin));
329}
330
360__STATIC_INLINE void LL_GPIO_SetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t PinMask, uint32_t OutputType)
361{
362 MODIFY_REG(GPIOx->OTYPER, PinMask, (PinMask * OutputType));
363}
364
394__STATIC_INLINE uint32_t LL_GPIO_GetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t Pin)
395{
396 return (uint32_t)(READ_BIT(GPIOx->OTYPER, Pin) / Pin);
397}
398
431__STATIC_INLINE void LL_GPIO_SetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Speed)
432{
433 MODIFY_REG(GPIOx->OSPEEDR, ((Pin * Pin) * GPIO_OSPEEDR_OSPEED0), ((Pin * Pin) * Speed));
434}
435
467__STATIC_INLINE uint32_t LL_GPIO_GetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin)
468{
469 return (uint32_t)(READ_BIT(GPIOx->OSPEEDR, ((Pin * Pin) * GPIO_OSPEEDR_OSPEED0)) / (Pin * Pin));
470}
471
500__STATIC_INLINE void LL_GPIO_SetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Pull)
501{
502 MODIFY_REG(GPIOx->PUPDR, ((Pin * Pin) * GPIO_PUPDR_PUPD0), ((Pin * Pin) * Pull));
503}
504
532__STATIC_INLINE uint32_t LL_GPIO_GetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin)
533{
534 return (uint32_t)(READ_BIT(GPIOx->PUPDR, ((Pin * Pin) * GPIO_PUPDR_PUPD0)) / (Pin * Pin));
535}
536
571__STATIC_INLINE void LL_GPIO_SetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate)
572{
573 MODIFY_REG(GPIOx->AFR[0], ((((Pin * Pin) * Pin) * Pin) * GPIO_AFRL_AFSEL0),
574 ((((Pin * Pin) * Pin) * Pin) * Alternate));
575}
576
608__STATIC_INLINE uint32_t LL_GPIO_GetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin)
609{
610 return (uint32_t)(READ_BIT(GPIOx->AFR[0],
611 ((((Pin * Pin) * Pin) * Pin) * GPIO_AFRL_AFSEL0)) / (((Pin * Pin) * Pin) * Pin));
612}
613
648__STATIC_INLINE void LL_GPIO_SetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate)
649{
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));
652}
653
686__STATIC_INLINE uint32_t LL_GPIO_GetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin)
687{
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)));
691}
692
693
723__STATIC_INLINE void LL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
724{
725 __IO uint32_t temp;
726 WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | PinMask);
727 WRITE_REG(GPIOx->LCKR, PinMask);
728 WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | PinMask);
729 /* Read LCKK register. This read is mandatory to complete key lock sequence */
730 temp = READ_REG(GPIOx->LCKR);
731 (void) temp;
732}
733
758__STATIC_INLINE uint32_t LL_GPIO_IsPinLocked(GPIO_TypeDef *GPIOx, uint32_t PinMask)
759{
760 return ((READ_BIT(GPIOx->LCKR, PinMask) == (PinMask)) ? 1UL : 0UL);
761}
762
769__STATIC_INLINE uint32_t LL_GPIO_IsAnyPinLocked(GPIO_TypeDef *GPIOx)
770{
771 return ((READ_BIT(GPIOx->LCKR, GPIO_LCKR_LCKK) == (GPIO_LCKR_LCKK)) ? 1UL : 0UL);
772}
773
789__STATIC_INLINE uint32_t LL_GPIO_ReadInputPort(GPIO_TypeDef *GPIOx)
790{
791 return (uint32_t)(READ_REG(GPIOx->IDR));
792}
793
818__STATIC_INLINE uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)
819{
820 return ((READ_BIT(GPIOx->IDR, PinMask) == (PinMask)) ? 1UL : 0UL);
821}
822
830__STATIC_INLINE void LL_GPIO_WriteOutputPort(GPIO_TypeDef *GPIOx, uint32_t PortValue)
831{
832 WRITE_REG(GPIOx->ODR, PortValue);
833}
834
841__STATIC_INLINE uint32_t LL_GPIO_ReadOutputPort(GPIO_TypeDef *GPIOx)
842{
843 return (uint32_t)(READ_REG(GPIOx->ODR));
844}
845
870__STATIC_INLINE uint32_t LL_GPIO_IsOutputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)
871{
872 return ((READ_BIT(GPIOx->ODR, PinMask) == (PinMask)) ? 1UL : 0UL);
873}
874
899__STATIC_INLINE void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
900{
901 WRITE_REG(GPIOx->BSRR, PinMask);
902}
903
928__STATIC_INLINE void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
929{
930 WRITE_REG(GPIOx->BSRR, PinMask << 16U);
931}
932
957__STATIC_INLINE void LL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
958{
959 uint32_t odr = READ_REG(GPIOx->ODR);
960 WRITE_REG(GPIOx->BSRR, ((odr & PinMask) << 16u) | (~odr & PinMask));
961}
962
967#if defined(USE_FULL_LL_DRIVER) || defined(__rtems__)
973ErrorStatus LL_GPIO_DeInit(GPIO_TypeDef *GPIOx);
974ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStruct);
975void LL_GPIO_StructInit(LL_GPIO_InitTypeDef *GPIO_InitStruct);
976
980#endif /* USE_FULL_LL_DRIVER */
981
990#endif /*defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG) || defined (GPIOH) || defined (GPIOI) || defined (GPIOJ) || defined (GPIOK) */
995#ifdef __cplusplus
996}
997#endif
998
999#endif /* STM32H7xx_LL_GPIO_H */
1000
#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
Definition: pio.h:172