/****************************************************************************** * 版权所有:苏州领慧立芯科技有限公司 * Copyright (c) 2020-2025 Suzhou Legendsemi Technology Co., Ltd. ****************************************************************************** * All rights reserved. Distributed under MIT license. * The file is encoded in UTF-8 without signature. * @file lh32m0g30x_gpio.h * @version 2025-09-01 ******************************************************************************/ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __LH32M0G3x_GPIO_H #define __LH32M0G3x_GPIO_H #ifdef __cplusplus extern "C" { #endif /* Includes ------------------------------------------------------------------*/ #include "lh32m0xx_lhl.h" /* Public Definition ---------------------------------------------------------*/ /** * @brief GPIO Configuration Mode enumeration */ typedef enum { GPIO_MODE_INPUT = 0x00u, /*!< GPIO Input Mode */ GPIO_MODE_OUTPUT_PP, /*!< GPIO Output Push-Pull Mode */ GPIO_MODE_OUTPUT_OD, /*!< GPIO Output Open-Drain Mode */ GPIO_MODE_ANALOG, /*!< GPIO Analog Mode */ } GPIOMode_TypeDef; /** * @brief GPIO Output Maximum Current enumeration */ typedef enum { GPIO_CURRENT_2mA = 0x00u, /*!< Low current drive ability */ GPIO_CURRENT_4mA = 0x01u, /*!< Medium current drive ability */ GPIO_CURRENT_8mA = 0x02u, /*!< High current drive ability */ GPIO_CURRENT_16mA = 0x03u, /*!< Ultra high current drive ability */ } GPIOCurrent_TypeDef; /* legacy definition */ #define GPIO_Speed_2MHz GPIO_Low_Speed #define GPIO_Speed_25MHz GPIO_Medium_Speed #define GPIO_Speed_50MHz GPIO_Fast_Speed #define GPIO_Speed_100MHz GPIO_High_Speed /** * @brief GPIO Configuration PullUp PullDown enumeration */ typedef enum { GPIO_NOPULL = 0x00u, GPIO_PULLUP = 0x01u, GPIO_PULLDOWN = 0x02u, } GPIOPuPd_TypeDef; /** * @brief GPIO Bit SET and Bit RESET enumeration */ typedef enum { Bit_RESET = 0u, Bit_SET, } BitAction; /** * @brief GPIO Pin SET and Bit RESET enumeration */ typedef enum { GPIO_PIN_RESET = 0u, GPIO_PIN_SET, } GPIO_PinState; /** * @brief GPIO Init structure definition */ typedef struct { uint16_t Pin; /*!< 引脚,GPIO_PIN_x(x:0~15),参数@ref GPIO_pins_define */ GPIOMode_TypeDef Mode; /*!< 基本输入输出模式 @ref GPIOMode_TypeDef */ GPIOCurrent_TypeDef Current; /*!< 引脚输出电流驱动能力 @ref GPIOCurrent_TypeDef */ GPIOPuPd_TypeDef Pull; /*!< 上下拉及开漏设置 @ref GPIOPuPd_TypeDef */ FunctionalState SchmittTrigger; /*!< 输入施密特触发设置 ENABLE or DISABLE */ uint8_t Alternate; /*!< 引脚复用功能设置 @ref GPIO AF Mode */ uint8_t Reserved; }GPIO_InitTypeDef; /* Exported constants --------------------------------------------------------*/ /** @defgroup GPIO_pins_define * @{ */ #define GPIO_PIN_0 ((uint16_t)0x0001) /* Pin 0 selected */ #define GPIO_PIN_1 ((uint16_t)0x0002) /* Pin 1 selected */ #define GPIO_PIN_2 ((uint16_t)0x0004) /* Pin 2 selected */ #define GPIO_PIN_3 ((uint16_t)0x0008) /* Pin 3 selected */ #define GPIO_PIN_4 ((uint16_t)0x0010) /* Pin 4 selected */ #define GPIO_PIN_5 ((uint16_t)0x0020) /* Pin 5 selected */ #define GPIO_PIN_6 ((uint16_t)0x0040) /* Pin 6 selected */ #define GPIO_PIN_7 ((uint16_t)0x0080) /* Pin 7 selected */ #define GPIO_PIN_8 ((uint16_t)0x0100) /* Pin 8 selected */ #define GPIO_PIN_9 ((uint16_t)0x0200) /* Pin 9 selected */ #define GPIO_PIN_10 ((uint16_t)0x0400) /* Pin 10 selected */ #define GPIO_PIN_11 ((uint16_t)0x0800) /* Pin 11 selected */ #define GPIO_PIN_12 ((uint16_t)0x1000) /* Pin 12 selected */ #define GPIO_PIN_13 ((uint16_t)0x2000) /* Pin 13 selected */ #define GPIO_PIN_14 ((uint16_t)0x4000) /* Pin 14 selected */ #define GPIO_PIN_15 ((uint16_t)0x8000) /* Pin 15 selected */ #define GPIO_PIN_All ((uint16_t)0xFFFF) /* All pins selected */ #define GPIO_PIN_MASK ((uint32_t)0x0000FFFF) /* PIN mask for assert test */ #define IS_GPIO_PIN(PIN) (((PIN) & GPIO_PIN_MASK ) != (uint32_t)0x00) #define IS_GET_GPIO_PIN(PIN) (((PIN) == GPIO_PIN_0) || \ ((PIN) == GPIO_PIN_1) || \ ((PIN) == GPIO_PIN_2) || \ ((PIN) == GPIO_PIN_3) || \ ((PIN) == GPIO_PIN_4) || \ ((PIN) == GPIO_PIN_5) || \ ((PIN) == GPIO_PIN_6) || \ ((PIN) == GPIO_PIN_7) || \ ((PIN) == GPIO_PIN_8) || \ ((PIN) == GPIO_PIN_9) || \ ((PIN) == GPIO_PIN_10) || \ ((PIN) == GPIO_PIN_11) || \ ((PIN) == GPIO_PIN_12) || \ ((PIN) == GPIO_PIN_13) || \ ((PIN) == GPIO_PIN_14) || \ ((PIN) == GPIO_PIN_15)) /** * @} */ #define GPIO_PortSource0 ((uint8_t)0x00) #define GPIO_PortSource1 ((uint8_t)0x01) #define GPIO_PortSource2 ((uint8_t)0x02) #define GPIO_PortSource3 ((uint8_t)0x03) #define GPIO_PortSource4 ((uint8_t)0x04) /** @defgroup GPIO_PIN_sources * @{ */ #define GPIO_PinSource0 ((uint8_t)0x00) #define GPIO_PinSource1 ((uint8_t)0x01) #define GPIO_PinSource2 ((uint8_t)0x02) #define GPIO_PinSource3 ((uint8_t)0x03) #define GPIO_PinSource4 ((uint8_t)0x04) #define GPIO_PinSource5 ((uint8_t)0x05) #define GPIO_PinSource6 ((uint8_t)0x06) #define GPIO_PinSource7 ((uint8_t)0x07) #define GPIO_PinSource8 ((uint8_t)0x08) #define GPIO_PinSource9 ((uint8_t)0x09) #define GPIO_PinSource10 ((uint8_t)0x0A) #define GPIO_PinSource11 ((uint8_t)0x0B) #define GPIO_PinSource12 ((uint8_t)0x0C) #define GPIO_PinSource13 ((uint8_t)0x0D) #define GPIO_PinSource14 ((uint8_t)0x0E) #define GPIO_PinSource15 ((uint8_t)0x0F) #define IS_GPIO_PIN_SOURCE(PINSOURCE) (((PINSOURCE) == GPIO_PinSource0) || \ ((PINSOURCE) == GPIO_PinSource1) || \ ((PINSOURCE) == GPIO_PinSource2) || \ ((PINSOURCE) == GPIO_PinSource3) || \ ((PINSOURCE) == GPIO_PinSource4) || \ ((PINSOURCE) == GPIO_PinSource5) || \ ((PINSOURCE) == GPIO_PinSource6) || \ ((PINSOURCE) == GPIO_PinSource7) || \ ((PINSOURCE) == GPIO_PinSource8) || \ ((PINSOURCE) == GPIO_PinSource9) || \ ((PINSOURCE) == GPIO_PinSource10) || \ ((PINSOURCE) == GPIO_PinSource11) || \ ((PINSOURCE) == GPIO_PinSource12) || \ ((PINSOURCE) == GPIO_PinSource13) || \ ((PINSOURCE) == GPIO_PinSource14) || \ ((PINSOURCE) == GPIO_PinSource15)) /** @defgroup GPIO AF Mode * @{ */ #define GPIOx_AF_GPIO 0 #define GPIO0_0_AF_MISO1 1 #define GPIO0_0_AF_UARTDCD1 2 #define GPIO0_0_AF_UARTDCD0 3 #define GPIO0_0_AF_MIO_D0 4 #define GPIO0_0_AF_LPTIM_CH1 5 #define GPIO0_0_AF_XB_IN0 6 #define GPIO0_1_AF_SCLK1 1 #define GPIO0_1_AF_SCL 2 #define GPIO0_1_AF_SIN0 3 #define GPIO0_1_AF_MIO_D1 4 #define GPIO0_1_AF_LPTIM_CH2 5 #define GPIO0_1_AF_XB_IN1 6 #define GPIO0_2_AF_MOSI1 1 #define GPIO0_2_AF_SDA 2 #define GPIO0_2_AF_SOUT0 3 #define GPIO0_2_AF_MIO_D2 4 #define GPIO0_2_AF_LPTIM_CH1 5 #define GPIO0_2_AF_XB_IN2 6 #define GPIO0_3_AF_CSN1 1 #define GPIO0_3_AF_RTS1 2 #define GPIO0_3_AF_RTS0 3 #define GPIO0_3_AF_MIO_D3 4 #define GPIO0_3_AF_LPTIM_CH2 5 #define GPIO0_3_AF_XB_IN3 6 #define GPIO0_4_AF_RTS0 1 #define GPIO0_4_AF_ECLKOUT 2 #define GPIO0_4_AF_RTS1 3 #define GPIO0_4_AF_MIO_D0 4 #define GPIO0_4_AF_RI0 5 #define GPIO0_4_AF_XB_OUT0 6 #define GPIO0_5_AF_CTS0 1 #define GPIO0_5_AF_SDA 2 #define GPIO0_5_AF_OWI2 3 #define GPIO0_5_AF_MIO_D1 4 #define GPIO0_5_AF_TIM1_CH1 5 #define GPIO0_5_AF_XB_OUT1 6 #define GPIO0_6_AF_SIN1 1 #define GPIO0_6_AF_SIN0 3 #define GPIO0_6_AF_MIO_D2 4 #define GPIO0_6_AF_LPTIM_CH1 5 #define GPIO0_6_AF_XB_OUT2 6 #define GPIO0_7_AF_SOUT1 2 #define GPIO0_7_AF_SOUT0 3 #define GPIO0_7_AF_MIO_D3 4 #define GPIO0_7_AF_LPTIM_CH2 5 #define GPIO0_7_AF_XB_OUT3 6 #define GPIO1_0_AF_TIM1_ETR 1 #define GPIO1_0_AF_EXTCLKIN 2 #define GPIO1_0_AF_CTS1 3 #define GPIO1_0_AF_MIO_D0 4 #define GPIO1_0_AF_SIN1 5 #define GPIO1_0_AF_XB_IN0 6 #define GPIO1_1_AF_TIM2_ETR 1 #define GPIO1_1_AF_ECLKOUT 2 #define GPIO1_1_AF_DTR0 3 #define GPIO1_1_AF_MIO_D1 4 #define GPIO1_1_AF_SOUT1 5 #define GPIO1_1_AF_XB_IN1 6 #define GPIO1_2_AF_TIM1_CH1 1 #define GPIO1_2_AF_RI0 3 #define GPIO1_2_AF_MIO_D2 4 #define GPIO1_2_AF_XB_IN2 6 #define GPIO1_3_AF_TIM1_CH2 1 #define GPIO1_3_AF_SCL 2 #define GPIO1_3_AF_DSR0 3 #define GPIO1_3_AF_MIO_D3 4 #define GPIO1_3_AF_ECLKOUT 5 #define GPIO1_3_AF_XB_IN3 6 #define GPIO1_4_AF_TIM2_CH1 1 #define GPIO1_4_AF_MISO0 2 #define GPIO1_4_AF_SDA 3 #define GPIO1_4_AF_MIO_D0 4 #define GPIO1_4_AF_SIN0 5 #define GPIO1_4_AF_XB_OUT0 6 #define GPIO1_5_AF_TIM2_CH2 1 #define GPIO1_5_AF_SCLK0 2 #define GPIO1_5_AF_SIN0 3 #define GPIO1_5_AF_MIO_D1 4 #define GPIO1_5_AF_SOUT0 5 #define GPIO1_5_AF_XB_OUT1 6 #define GPIO1_5_AF_AFE_DRDY 7 #define GPIO1_6_AF_LPTIM_CH1 1 #define GPIO1_6_AF_MOSI0 2 #define GPIO1_6_AF_SOUT0 3 #define GPIO1_6_AF_MIO_D2 4 //#define GPIO1_6_AF_LPTIM_CH1 5 #define GPIO1_6_AF_XB_OUT2 6 #define GPIO1_6_AF_AFE_SCK 7 #define GPIO1_7_AF_LPTIM_CH2 1 #define GPIO1_7_AF_CSN0 2 #define GPIO1_7_AF_DSR0 3 #define GPIO1_7_AF_MIO_D3 4 //#define GPIO1_7_AF_LPTIM_CH2 5 #define GPIO1_7_AF_XB_OUT3 6 #define GPIO1_7_AF_AFE_CSN 7 #define GPIO2_0_AF_SCL 1 #define GPIO2_0_AF_UARTCLK 3 #define GPIO2_0_AF_MIO_D0 4 #define GPIO2_0_AF_LPTIM_CH1 5 #define GPIO2_0_AF_XB_IN0 6 #define GPIO2_1_AF_SDA 1 #define GPIO2_1_AF_UARTDCD1 2 #define GPIO2_1_AF_UARTDCD0 3 #define GPIO2_1_AF_MIO_D1 4 #define GPIO2_1_AF_LPTIM_CH2 5 #define GPIO2_1_AF_XB_IN1 6 #define GPIO2_2_AF_OWI2 2 #define GPIO2_2_AF_ECLKOUT 3 #define GPIO2_2_AF_MIO_D2 4 #define GPIO2_2_AF_LPTIM_CH1 5 #define GPIO2_2_AF_XB_IN2 6 #define GPIO2_3_AF_GPIO 1 #define GPIO2_3_AF_MIO_D3 4 #define GPIO2_3_AF_LPTIM_CH2 5 #define GPIO2_3_AF_XB_IN3 6 #define GPIO2_3_AF_AFE_SDO 7 #define GPIO2_4_AF_GPIO 1 #define GPIO2_4_AF_MIO_D0 4 #define GPIO2_4_AF_LPTIM_CH1 5 #define GPIO2_4_AF_XB_OUT0 6 #define GPIO2_4_AF_AFE_SDI 7 #define GPIO2_5_AF_GPIO 1 #define GPIO2_5_AF_MIO_D1 4 #define GPIO2_5_AF_XB_OUT1 6 #define GPIO2_5_AF_GPIO 1 #define GPIO2_5_AF_MIO_D2 4 #define GPIO2_5_AF_XB_OUT2 6 /* Exported macro ------------------------------------------------------------*/ /* Exported functions --------------------------------------------------------*/ /* Function used to set the GPIO configuration to the default reset state ****/ void LHL_GPIO_DeInit(void); /* Initialization and Configuration functions *********************************/ void LHL_GPIO_Init(GPIO_TypeDef* pGPIOx, GPIO_InitTypeDef* GPIO_Init); /* GPIO Read and Write functions **********************************************/ GPIO_PinState LHL_GPIO_ReadPin (GPIO_TypeDef *pGPIOx, uint16_t GPIO_Pin_x); void LHL_GPIO_WritePin (GPIO_TypeDef *pGPIOx, uint16_t GPIO_Pin_x, GPIO_PinState Pin_State); void LHL_GPIO_TogglePin (GPIO_TypeDef *pGPIOx, uint16_t GPIO_Pin_x); uint8_t LHL_GPIO_Read (GPIO_TypeDef *pGPIOx); void LHL_GPIO_Write (GPIO_TypeDef *pGPIOx, uint8_t GPIO_Port_Val); void LHL_GPIO_SetPins(GPIO_TypeDef* pGPIOx, uint16_t GPIO_Pin_x); void LHL_GPIO_ResetPins(GPIO_TypeDef* pGPIOx, uint16_t GPIO_Pin_x); /* GPIO Alternate functions configuration function ****************************/ void LHL_GPIO_SetAFIO(GPIO_TypeDef* pGPIOx, uint16_t GPIO_Pin_x, uint8_t GPIO_AFIO); void LHL_GPIO_SetCurrent(GPIO_TypeDef* pGPIOx, uint16_t GPIO_Pin_x, GPIOCurrent_TypeDef GPIO_Current); void LHL_GPIO_SetEXTILine(GPIO_TypeDef *pGPIOx, uint16_t GPIO_Pin_x); #ifdef __cplusplus } #endif #endif /*********************************End of File**********************************/