完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#define FLASH_BASE 0x00000000U
#define FLASH_END 0x0001FFFFU #define FLASH_BANK1_END 0x0001FFFFU #define SRAM_BASE 0x20000000U #define SRAM_ENDsss 0x20003FFFU #define PERIPH_BASE 0x40000000U //#define SRAM_BB_BASE 0x22000000U //#define PERIPH_BB_BASE 0x42000000U #define DBGMCU_BASE 0x04002038U #define GPIO_SEL_OFFSET (0x100/4) //===产品身份标识 #define UID_BASE 0x00100E74U //===产品型号 #define PRODUCT_BASE 0x00100C60U //===Flash容量 #define FLASH_SIZE_BASE 0x00100C70U //===SRAM容量 #define SRAM_SIZE_BASE 0x00100C74U //===引脚数量 #define PIN_COUNT_BASE 0x00100C7AU //===总线基地址 #define APB0PERIPH_BASE PERIPH_BASE #define APB1PERIPH_BASE (PERIPH_BASE + 0x00004000U) #define AHBPERIPH_BASE (PERIPH_BASE + 0x00020000U) //===外设基地址 #define UART0_BASE (APB0PERIPH_BASE + 0x00000000U) #define UART1_BASE (APB0PERIPH_BASE + 0x00000100U) #define LPUART0_BASE (APB0PERIPH_BASE + 0x00000200U) #define I2C0_BASE (APB0PERIPH_BASE + 0x00000400U) #define SPI0_BASE (APB0PERIPH_BASE + 0x00000800U) #define TIM0_BASE (APB0PERIPH_BASE + 0x00000C00U) #define TIM1_BASE (APB0PERIPH_BASE + 0x00000D00U) #define TIM2_BASE (APB0PERIPH_BASE + 0x00000E00U) #define LPTIM0_BASE (APB0PERIPH_BASE + 0x00000F00U) #define LPTIM1_BASE (APB0PERIPH_BASE + 0x00000F40U) #define WDT_BASE (APB0PERIPH_BASE + 0x00000F80U) #define PCA_BASE (APB0PERIPH_BASE + 0x00001000U) #define RTC_BASE (APB0PERIPH_BASE + 0x00001400U) //===时钟校准 #define TRIM_BASE (APB0PERIPH_BASE + 0x00001800U) #define RCC_BASE (APB0PERIPH_BASE + 0x00002000U) #define BGR_BASE (APB0PERIPH_BASE + 0x00002400U) #define ADC0_BASE (APB0PERIPH_BASE + 0x00002404U) #define ADC_BASE (APB0PERIPH_BASE + 0x00002404U) #define VC_BASE (APB0PERIPH_BASE + 0x00002410U) #define OPA_BASE (APB0PERIPH_BASE + 0x00002430U) #define LVD_BASE (APB0PERIPH_BASE + 0x00002428U) #define DAC0_BASE (APB0PERIPH_BASE + 0x00002500U) #define DAC_BASE (APB0PERIPH_BASE + 0x00002500U) #define TIM4_BASE (APB0PERIPH_BASE + 0x00003000U) #define TIM5_BASE (APB0PERIPH_BASE + 0x00003400U) #define TIM6_BASE (APB0PERIPH_BASE + 0x00003800U) #define LPUART1_BASE (APB0PERIPH_BASE + 0x00004000U) #define I2C1_BASE (APB0PERIPH_BASE + 0x00004400U) #define SPI1_BASE (APB0PERIPH_BASE + 0x00004800U) #define RNG_BASE (APB0PERIPH_BASE + 0x00004C00U) #define PCNT_BASE (APB0PERIPH_BASE + 0x00005400U) #define TIM3_BASE (APB0PERIPH_BASE + 0x00005800U) #define LCD_BASE (APB0PERIPH_BASE + 0x00005C00U) #define UART2_BASE (APB0PERIPH_BASE + 0x00006000U) #define UART3_BASE (APB0PERIPH_BASE + 0x00006400U) #define FLASH_CTR_BASE (APB0PERIPH_BASE + 0x00020000U) #define RAM_CTR_BASE (APB0PERIPH_BASE + 0x00020400U) #define CRC_BASE (APB0PERIPH_BASE + 0x00020900U) #define DMAC_BASE (APB0PERIPH_BASE + 0x00021000U) #define AES_BASE (APB0PERIPH_BASE + 0x00021400U) //===端口功能选择寄存器 #define GPIOA_SEL_BASE (APB0PERIPH_BASE + 0x00020C00U) #define GPIOB_SEL_BASE (APB0PERIPH_BASE + 0x00020C40U) #define GPIOC_SEL_BASE (APB0PERIPH_BASE + 0x00020C80U) #define GPIOD_SEL_BASE (APB0PERIPH_BASE + 0x00020CC0U) #define GPIOE_SEL_BASE (APB0PERIPH_BASE + 0x00021C00U) #define GPIOF_SEL_BASE (APB0PERIPH_BASE + 0x00021C40U) //===端口特殊功能,辅助功能寄存器 #define GPIO_AF_BASE (APB0PERIPH_BASE + 0x00020F04U) //===定义端口功能 #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) #define GPIOC ((GPIO_TypeDef *) GPIOC_BASE) #define GPIOD ((GPIO_TypeDef *) GPIOD_BASE) #define GPIOE ((GPIO_TypeDef *) GPIOE_BASE) #define GPIOF ((GPIO_TypeDef *) GPIOF_BASE) #define GPIO_SELA ((GPIO_SEL_TypeDef *) GPIOA_BASE) #define GPIO_SELB ((GPIO_SEL_TypeDef *) GPIOB_BASE) #define GPIO_SELC ((GPIO_SEL_TypeDef *) GPIOC_BASE) #define GPIO_SELD ((GPIO_SEL_TypeDef *) GPIOD_BASE) #define GPIO_SELE ((GPIO_SEL_TypeDef *) GPIOE_BASE) #define GPIO_SELF ((GPIO_SEL_TypeDef *) GPIOF_BASE) #pragma region GPIO //===端口复用功能配置寄存器 typedef struct { __IO uint32_t SEL00; //---端口选择功能 __IO uint32_t SEL01; //---端口选择功能 __IO uint32_t SEL02; //---端口选择功能 __IO uint32_t SEL03; //---端口选择功能 __IO uint32_t SEL04; //---端口选择功能 __IO uint32_t SEL05; //---端口选择功能 __IO uint32_t SEL06; //---端口选择功能 __IO uint32_t SEL07; //---端口选择功能 __IO uint32_t SEL08; //---端口选择功能 __IO uint32_t SEL09; //---端口选择功能 __IO uint32_t SEL10; //---端口选择功能 __IO uint32_t SEL11; //---端口选择功能 __IO uint32_t SEL12; //---端口选择功能 __IO uint32_t SEL13; //---端口选择功能 __IO uint32_t SEL14; //---端口选择功能 __IO uint32_t SEL15; //---端口选择功能 } GPIO_SEL_TypeDef; //===端口通用功能配置寄存器 typedef struct { __IO uint32_t DIR; //---配置输入输出模式模式 __IO uint32_t IDR; //---输入数据寄存器 __IO uint32_t ODR; //---输出数据寄存器 __IO uint32_t ADS; //---数模配置寄存器 __IO uint32_t BSET; //---置位寄存器 __IO uint32_t BCLR; //---清零寄存器 __IO uint32_t BSETCLR; //---置位清零寄存器 __IO uint32_t DRIVER; //---驱动能力寄存器 __IO uint32_t PU; //---上拉使能寄存器 __IO uint32_t PD; //---下拉使能寄存器 __IO uint32_t OD; //---开漏输出寄存器 } GPIO_TypeDef; //===端口辅助功能配置寄存器 typedef struct { __IO uint32_t CTRL1; //---端口辅助功能配置寄存器1 __IO uint32_t CTRL2; //---端口辅助功能配置寄存器1 __IO uint32_t TIMGS; //---端口辅助定时器门控选择 __IO uint32_t TIMES; //---端口辅助定时器ETR控选择 __IO uint32_t TIMCPS; //---端口辅助定时器输入捕获选择 __IO uint32_t PCAS; //---端口辅助PCA捕获选择 __IO uint32_t PCNTS; //---端口辅助PCNT脉冲输入选择 } GPIO_AF_TypeDef; #define GPIO_AF_CTRL1_IR_POS 14 #define GPIO_AF_CTRL1_IR_MASK (0x01UL< #define GPIO_AF_CTRL1_IR GPIO_AF_CTRL1_IR_MASK #define GPIO_AF_CTRL1_HCLK_EN_POS 13 #define GPIO_AF_CTRL1_HCLK_EN_MASK (0x01UL< #define GPIO_AF_CTRL1_HCLK_EN GPIO_AF_CTRL1_HCLK_EN_MASK #define GPIO_AF_CTRL1_PCLK_EN_POS 13 #define GPIO_AF_CTRL1_PCLK_EN_MASK (0x01UL< #define GPIO_AF_CTRL1_PCLK_EN GPIO_AF_CTRL1_PCLK_EN_MASK #define GPIO_AF_CTRL1_HCLK_SEL_POS 10 #define GPIO_AF_CTRL1_HCLK_SEL_MASK (0x03UL< #define GPIO_AF_CTRL1_HCLK_SEL GPIO_AF_CTRL1_HCLK_SEL_MASK #define GPIO_AF_CTRL1_HCLK_PRS_1 (0x00UL< #define GPIO_AF_CTRL1_HCLK_PRS_2 (0x01UL< #define GPIO_AF_CTRL1_HCLK_PRS_4 (0x02UL< #define GPIO_AF_CTRL1_HCLK_PRS_8 (0x03UL< #define GPIO_AF_CTRL1_PCLK_SEL_POS 8 #define GPIO_AF_CTRL1_PCLK_SEL_MASK (0x03UL< #define GPIO_AF_CTRL1_PCLK_SEL GPIO_AF_CTRL1_PCLK_SEL_MASK #define GPIO_AF_CTRL1_PCLK_PRS_1 (0x00UL< #define GPIO_AF_CTRL1_PCLK_PRS_2 (0x01UL< #define GPIO_AF_CTRL1_PCLK_PRS_4 (0x02UL< #define GPIO_AF_CTRL1_PCLK_PRS_8 (0x03UL< #define GPIO_AF_CTRL1_SPI0_SS_POS 4 #define GPIO_AF_CTRL1_SPI0_SS_MASK (0x0FUL< #define GPIO_AF_CTRL1_SPI0_SS GPIO_AF_CTRL1_SPI0_SS_MASK #define GPIO_AF_CTRL1_EXT_CLK_POS 0 #define GPIO_AF_CTRL1_EXT_CLK_MASK (0x0FUL< #define GPIO_AF_CTRL1_EXT_CLK GPIO_AF_CTRL1_EXT_CLK_MASK #define GPIO_AF_CTRL2_AHB_POS 15 #define GPIO_AF_CTRL2_AHB_MASK (0x01UL< #define GPIO_AF_CTRL2_AHB GPIO_AF_CTRL2_AHB_MASK #define GPIO_AF_CTRL2_TCLK_DIV_POS 6 #define GPIO_AF_CTRL2_TCLK_DIV_MASK (0x03UL< #define GPIO_AF_CTRL2_TCLK_DIV GPIO_AF_CTRL2_TCLK_DIV_MASK #define GPIO_AF_CTRL2_TCLK_SEL_POS 4 #define GPIO_AF_CTRL2_TCLK_SEL_MASK (0x03UL< #define GPIO_AF_CTRL2_TCLK_SEL GPIO_AF_CTRL2_TCLK_SEL_MASK #define GPIO_AF_CTRL2_SPI1_SS_POS 0 #define GPIO_AF_CTRL2_SPI1_SS_MASK (0x0FUL< #define GPIO_AF_CTRL2_SPI1_SS GPIO_AF_CTRL2_SPI1_SS_MASK //===端口定时器门控选择 #define GPIO_AF_TIMGS_LPTIM0_POS 12 #define GPIO_AF_TIMGS_LPTIM0_MASK |
|
|
|
(0x07UL<
#define GPIO_AF_TIMGS_LPTIM0 GPIO_AF_TIMGS_LPTIM0_MASK #define GPIO_AF_TIMGS_TIM3_POS 9 #define GPIO_AF_TIMGS_TIM3_MASK (0x07UL< #define GPIO_AF_TIMGS_TIM3 GPIO_AF_TIMGS_TIM3_MASK #define GPIO_AF_TIMGS_TIM2_POS 6 #define GPIO_AF_TIMGS_TIM2_MASK (0x07UL< #define GPIO_AF_TIMGS_TIM2 GPIO_AF_TIMGS_TIM2_MASK #define GPIO_AF_TIMGS_TIM1_POS 3 #define GPIO_AF_TIMGS_TIM1_MASK (0x07UL< #define GPIO_AF_TIMGS_TIM1 GPIO_AF_TIMGS_TIM1_MASK #define GPIO_AF_TIMGS_TIM0_POS 0 #define GPIO_AF_TIMGS_TIM0_MASK (0x07UL< #define GPIO_AF_TIMGS_TIM0 GPIO_AF_TIMGS_TIM0_MASK //===定时器ETR输入选择 #define GPIO_AF_TIMES_LPTIM0_POS 12 #define GPIO_AF_TIMES_LPTIM0_MASK (0x07UL< #define GPIO_AF_TIMES_LPTIM0 GPIO_AF_TIMES_LPTIM0_MASK #define GPIO_AF_TIMES_TIM3_POS 9 #define GPIO_AF_TIMES_TIM3_MASK (0x07UL< #define GPIO_AF_TIMES_TIM3 GPIO_AF_TIMES_TIM3_MASK #define GPIO_AF_TIMES_TIM2_POS 6 #define GPIO_AF_TIMES_TIM2_MASK (0x07UL< #define GPIO_AF_TIMES_TIM2 GPIO_AF_TIMES_TIM2_MASK #define GPIO_AF_TIMES_TIM1_POS 3 #define GPIO_AF_TIMES_TIM1_MASK (0x07UL< #define GPIO_AF_TIMES_TIM1 GPIO_AF_TIMES_TIM1_MASK #define GPIO_AF_TIMES_TIM0_POS 0 #define GPIO_AF_TIMES_TIM0_MASK (0x07UL< #define GPIO_AF_TIMES_TIM0 GPIO_AF_TIMES_TIM0_MASK //===输入捕捉通道选择 #define GPIO_AF_TIMCPS_TIM3_CH0B_POS 12 #define GPIO_AF_TIMCPS_TIM3_CH0B_MASK (0x07UL< #define GPIO_AF_TIMCPS_TIM3_CH0B GPIO_AF_TIMCPS_TIM3_CH0B_MASK #define GPIO_AF_TIMCPS_TIM3_CH0A_POS 9 #define GPIO_AF_TIMCPS_TIM3_CH0A_MASK (0x07UL< #define GPIO_AF_TIMCPS_TIM3_CH0A GPIO_AF_TIMCPS_TIM3_CH0A_MASK #define GPIO_AF_TIMCPS_TIM2_CH0A_POS 6 #define GPIO_AF_TIMCPS_TIM2_CH0A_MASK (0x07UL< #define GPIO_AF_TIMCPS_TIM2_CH0A GPIO_AF_TIMCPS_TIM2_CH0A_MASK #define GPIO_AF_TIMCPS_TIM1_CH0A_POS 3 #define GPIO_AF_TIMCPS_TIM1_CH0A_MASK (0x07UL< #define GPIO_AF_TIMCPS_TIM1_CH0A GPIO_AF_TIMCPS_TIM1_CH0A_MASK #define GPIO_AF_TIMCPS_TIM0_CH0A_POS 0 #define GPIO_AF_TIMCPS_TIM0_CH0A_MASK (0x07UL< #define GPIO_AF_TIMCPS_TIM0_CH0A GPIO_AF_TIMCPS_TIM0_CH0A_MASK //===PCA捕获选择 #define GPIO_AF_PCAS_LPTIM1_ETR_POS 9 #define GPIO_AF_PCAS_LPTIM1_ETR_MASK (0x07UL< #define GPIO_AF_PCAS_LPTIM1_ETR GPIO_AF_PCAS_LPTIM1_ETR_MASK #define GPIO_AF_PCAS_LPTIM1_GATE_POS 6 #define GPIO_AF_PCAS_LPTIM1_GATE_MASK (0x07UL< #define GPIO_AF_PCAS_LPTIM1_GATE GPIO_AF_PCAS_LPTIM1_GATE_MASK #define GPIO_AF_PCAS_PCA_EC1_POS 3 #define GPIO_AF_PCAS_PCA_EC1_MASK (0x07UL< #define GPIO_AF_PCAS_PCA_EC1 GPIO_AF_PCAS_PCA_EC1_MASK #define GPIO_AF_PCAS_PCA_CH0_POS 0 #define GPIO_AF_PCAS_PCA_CH0_MASK (0x07UL< #define GPIO_AF_PCAS_PCA_CH0 GPIO_AF_PCAS_PCA_CH0_MASK //===PCNT输入选择 #define GPIO_AF_PCNTS_PCNT_S1_POS 2 #define GPIO_AF_PCNTS_PCNT_S1_MASK (0x03UL< #define GPIO_AF_PCNTS_PCNT_S1 GPIO_AF_PCNTS_PCNT_S1_MASK #define GPIO_AF_PCNTS_PCNT_S0_POS 0 #define GPIO_AF_PCNTS_PCNT_S0_MASK (0x03UL< #define GPIO_AF_PCNTS_PCNT_S0 GPIO_AF_PCNTS_PCNT_S0_MASK #pragma endregion #ifndef HC32L1XX_LL_GPIO_H_ #define HC32L1XX_LL_GPIO_H_ #ifdef __cplusplus extern "C" { #endif #include "hc32l1xx.h" #include "string.h" /// //===GPIO的复用模式 #define LL_GPIO_AF_0 (0x0000000U) #define LL_GPIO_AF_1 (0x0000001U) #define LL_GPIO_AF_2 (0x0000002U) #define LL_GPIO_AF_3 (0x0000003U) #define LL_GPIO_AF_4 (0x0000004U) #define LL_GPIO_AF_5 (0x0000005U) #define LL_GPIO_AF_6 (0x0000006U) #define LL_GPIO_AF_7 (0x0000007U) #define LL_GPIO_AF_8 (0x0000008U) #define LL_GPIO_AF_9 (0x0000009U) #define LL_GPIO_AF_10 (0x000000AU) #define LL_GPIO_AF_11 (0x000000BU) #define LL_GPIO_AF_12 (0x000000CU) #define LL_GPIO_AF_13 (0x000000DU) #define LL_GPIO_AF_14 (0x000000EU) #define LL_GPIO_AF_15 (0x000000FU) //===选择PIN的序号 #define LL_GPIO_PIN_0 (0x1U<<0) #define LL_GPIO_PIN_1 (0x1U<<1) #define LL_GPIO_PIN_2 (0x1U<<2) #define LL_GPIO_PIN_3 (0x1U<<3) #define LL_GPIO_PIN_4 (0x1U<<4) #define LL_GPIO_PIN_5 (0x1U<<5) #define LL_GPIO_PIN_6 (0x1U<<6) #define LL_GPIO_PIN_7 (0x1U<<7) #define LL_GPIO_PIN_8 (0x1U<<8) #define LL_GPIO_PIN_9 (0x1U<<9) #define LL_GPIO_PIN_10 (0x1U<<10) #define LL_GPIO_PIN_11 (0x1U<<11) #define LL_GPIO_PIN_12 (0x1U<<12) #define LL_GPIO_PIN_13 (0x1U<<13) #define LL_GPIO_PIN_14 (0x1U<<14) #define LL_GPIO_PIN_15 (0x1U<<15) #define LL_GPIO_PIN_ALL (LL_GPIO_PIN_0|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_3 LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7 LL_GPIO_PIN_8|LL_GPIO_PIN_9|LL_GPIO_PIN_10|LL_GPIO_PIN_11 LL_GPIO_PIN_12|LL_GPIO_PIN_13|LL_GPIO_PIN_14|LL_GPIO_PIN_15) //===GPIO模式 #define LL_GPIO_MODE_ANALOG 0x00000000U #define LL_GPIO_MODE_FLOATING 0x00000001U #define LL_GPIO_MODE_INPUT 0x00000002U #define LL_GPIO_MODE_OUTPUT 0x00000003U #define LL_GPIO_MODE_ALTERNATE 0x00000004U //===GPIO输出模式 #define LL_GPIO_OUTPUT_PUSHPULL 0x00000000U #define LL_GPIO_OUTPUT_OPENDRAIN 0x00000001U //===GPIO输出评率 #define LL_GPIO_MODE_OUTPUT_10MHz 0x00000000U #define LL_GPIO_MODE_OUTPUT_2MHz 0x00000001U #define LL_GPIO_MODE_OUTPUT_50MHz 0x00000002U //===GPIO熟读设置 #define LL_GPIO_SPEED_FREQ_LOW LL_GPIO_MODE_OUTPUT_2MHz #define LL_GPIO_SPEED_FREQ_MEDIUM LL_GPIO_MODE_OUTPUT_10MHz #define LL_GPIO_SPEED_FREQ_HIGH LL_GPIO_MODE_OUTPUT_50MHz //===GPIO上下拉模式 #define LL_GPIO_PULL_NO 0x00000000U #define LL_GPIO_PULL_DOWN 0x00000001U #define LL_GPIO_PULL_UP 0x00000002U //===驱动能力配置 #define LL_GPIO_DRIVER_HIGH 0 #define LL_GPIO_DRIVER_LOW 1 //===端口功能复用 #define LL_GPIO_AF_MASK 0x00000007U /// //函 数: //功 能: 读取端口输入信息 //输入参 数: //输出参 数: //说 明: // static inline uint32_t LL_GPIO_ReadInputPort(GPIO_TypeDef* GPIOx) { return (uint32_t)(READ_REG(GPIOx->IDR)); } /// //函 数: //功 能: 读取指定端口输入信息 //输入参 数: //输出参 数: 1---高电平,0---低电平 //说 明: // static inline uint32_t LL_GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, uint32_t PinMask) { return ((READ_BIT(GPIOx->IDR,PinMask)!=0)?1:0); } /// //函 数: //功 能: 设置端口输出信息 //输入参 数: //输出参 数: //说 明: // static inline void LL_GPIO_WriteOutputPort(GPIO_TypeDef* GPIOx, uint32_t PortValue) { WRITE_REG(GPIOx->ODR, PortValue); } /// //函 数: //功 能: 读取端口输出信息 //输入参 数: //输出参 数: //说 明: // static inline uint32_t LL_GPIO_ReadOutputPort(GPIO_TypeDef* GPIOx) { return (uint32_t)(READ_REG(GPIOx->ODR)); } /// //函 数: //功 能: 指定端口输出高电平 //输入参 数: //输出参 数: //说 明: // static inline void LL_GPIO_SetOutputPin(GPIO_TypeDef* GPIOx, uint32_t PinMask) { WRITE_REG(GPIOx->BSETCLR, PinMask<<16); } /// //函 数: //功 能: 指定端口输出低电平 //输入参 数: //输出参 数: //说 明: // static inline void LL_GPIO_ResetOutputPin(GPIO_TypeDef* GPIOx, uint32_t PinMask) { WRITE_REG(GPIOx->BSETCLR, PinMask); } /// //函 数: //功 能: 指定端口输出取反输出 //输入参 数: //输出参 数: //说 明: // static inline void LL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint32_t PinMask) { WRITE_REG(GPIOx->ODR, READ_REG(GPIOx->ODR) ^ PinMask); } /// //函 数: //功 能: 设置端口的输入输出模式 //输入参 数: LL_GPIO_MODE_OUTPUT,LL_GPIO_MODE_INPUT //输出参 数: //说 明: // static inline void LL_GPIO_SetPinMode(GPIO_TypeDef* GPIOx, uint32_t Pin, uint32_t Mode) { if (Mode==LL_GPIO_MODE_OUTPUT) { CLEAR_BIT(GPIOx->DIR, Pin); } else { SET_BIT(GPIOx->DIR, Pin); } } |
|
|
|
///
//函 数: //功 能: 获取端口的输入输出模式 //输入参 数: //输出参 数: LL_GPIO_MODE_OUTPUT,LL_GPIO_MODE_INPUT //说 明: // static inline uint32_t LL_GPIO_GetPinMode(GPIO_TypeDef* GPIOx, uint32_t Pin) { return (uint32_t)(READ_BIT(GPIOx->DIR, Pin)); } /// //函 数: //功 能: 调试端口复用为SWD模式 //输入参 数: //输出参 数: //说 明: // static inline void LL_GPIO_Debug_AF_SWD(void) { CLEAR_BIT(RCC->CR1, RCC_CR1_SWD_AF); } /// //函 数: //功 能: 调试端口复用为GPIO模式 //输入参 数: //输出参 数: //说 明: // static inline void LL_GPIO_Debug_AF_GPIO(void) { SET_BIT(RCC->CR1, RCC_CR1_SWD_AF); } //===GPIO初始化结构体 typedef struct { uint32_t Pin; //---引脚 uint32_t Mode; //---模式 uint32_t Speed; //---速度 uint32_t OutputType; //---输出模式 uint32_t Pull; //---上下拉模式 uint32_t Alternate; //---复用模式 uint32_t DriverLevel; //---驱动能力 } LL_GPIO_InitTypeDef; //===函数定义 uint8_t LL_GPIO_Init(GPIO_TypeDef* GPIOx, LL_GPIO_InitTypeDef* GPIO_InitStruct); /// #ifdef __cplusplus } #endif #endif /* HC32L1XX_LL_GPIO_H */ #include "hc32l1xx_ll_gpio.h" /// //函 数: //功 能: 端口复用模式的初始化 //输入参 数: //输出参 数: //说 明: // uint8_t LL_GPIO_SEL_Init(GPIO_TypeDef* GPIOx, LL_GPIO_InitTypeDef* GPIO_InitStruct) { //---端口复用功能的配置寄存器 GPIO_SEL_TypeDef* pSEl = (GPIO_SEL_TypeDef*)(((uint32_t*)GPIOx)- GPIO_SEL_OFFSET); //---依据端口序号,配置端口的复用模式 switch (GPIO_InitStruct->Pin) { case LL_GPIO_PIN_0 : { WRITE_REG(pSEl->SEL00, GPIO_InitStruct->Alternate); break; } case LL_GPIO_PIN_1 : { WRITE_REG(pSEl->SEL01, GPIO_InitStruct->Alternate); break; } case LL_GPIO_PIN_2 : { WRITE_REG(pSEl->SEL02, GPIO_InitStruct->Alternate); break; } case LL_GPIO_PIN_3 : { WRITE_REG(pSEl->SEL03, GPIO_InitStruct->Alternate); break; } case LL_GPIO_PIN_4 : { WRITE_REG(pSEl->SEL04, GPIO_InitStruct->Alternate); break; } case LL_GPIO_PIN_5 : { WRITE_REG(pSEl->SEL05, GPIO_InitStruct->Alternate); break; } case LL_GPIO_PIN_6 : { WRITE_REG(pSEl->SEL06, GPIO_InitStruct->Alternate); break; } case LL_GPIO_PIN_7 : { WRITE_REG(pSEl->SEL07, GPIO_InitStruct->Alternate); break; } case LL_GPIO_PIN_8 : { WRITE_REG(pSEl->SEL08, GPIO_InitStruct->Alternate); break; } case LL_GPIO_PIN_9 : { WRITE_REG(pSEl->SEL09, GPIO_InitStruct->Alternate); break; } case LL_GPIO_PIN_10 : { WRITE_REG(pSEl->SEL10, GPIO_InitStruct->Alternate); break; } case LL_GPIO_PIN_11 : { WRITE_REG(pSEl->SEL11, GPIO_InitStruct->Alternate); break; } case LL_GPIO_PIN_12 : { WRITE_REG(pSEl->SEL12, GPIO_InitStruct->Alternate); break; } case LL_GPIO_PIN_13 : { WRITE_REG(pSEl->SEL13, GPIO_InitStruct->Alternate); break; } case LL_GPIO_PIN_14 : { WRITE_REG(pSEl->SEL14, GPIO_InitStruct->Alternate); break; } case LL_GPIO_PIN_15 : { WRITE_REG(pSEl->SEL15, GPIO_InitStruct->Alternate); break; } default: { memset(pSEl, 0x00UL, sizeof(GPIO_SEL_TypeDef) / sizeof(uint32_t)); break; } } return 0; } /// //函 数: //功 能: 端口模式的初始化 //输入参数: //输出参数: //说 明: // uint8_t LL_GPIO_Init(GPIO_TypeDef* GPIOx, LL_GPIO_InitTypeDef* GPIO_InitStruct) { switch (GPIO_InitStruct->Mode) { case LL_GPIO_MODE_INPUT: { //---数模模式配置为数字模式 CLEAR_BIT(GPIOx->ADS, GPIO_InitStruct->Pin); //---输入输出模式配置为输入模式 SET_BIT(GPIOx->DIR, GPIO_InitStruct->Pin); break; } case LL_GPIO_MODE_OUTPUT: { //---数模模式配置为数字模式 CLEAR_BIT(GPIOx->ADS, GPIO_InitStruct->Pin); //---输入输出模式配置为输出模式 CLEAR_BIT(GPIOx->DIR, GPIO_InitStruct->Pin); break; } case LL_GPIO_MODE_ANALOG: case LL_GPIO_MODE_FLOATING: case LL_GPIO_MODE_ALTERNATE: default: { //---数模模式配置为模拟模式 SET_BIT(GPIOx->ADS, GPIO_InitStruct->Pin); //---输入输出模式配置为输入模式 SET_BIT(GPIOx->DIR, GPIO_InitStruct->Pin); //---上拉不使能 CLEAR_BIT(GPIOx->PU, GPIO_InitStruct->Pin); //---下拉不使能 CLEAR_BIT(GPIOx->PD, GPIO_InitStruct->Pin); //---低驱动能力 SET_BIT(GPIOx->DRIVER, GPIO_InitStruct->Pin); break; } } //---上下拉配置和驱动能力配置 if ((GPIO_InitStruct->Mode== LL_GPIO_MODE_INPUT)|| (GPIO_InitStruct->Mode == LL_GPIO_MODE_OUTPUT)) { //---上下拉配置 if (GPIO_InitStruct->Pull==LL_GPIO_PULL_UP) { //---上拉使能 SET_BIT(GPIOx->PU, GPIO_InitStruct->Pin); //---下拉不使能 CLEAR_BIT(GPIOx->PD, GPIO_InitStruct->Pin); } else if (GPIO_InitStruct->Pull == LL_GPIO_PULL_DOWN) { //---上拉不使能 CLEAR_BIT(GPIOx->PU, GPIO_InitStruct->Pin); //---下拉使能 SET_BIT(GPIOx->PD, GPIO_InitStruct->Pin); } else { //---上拉不使能 CLEAR_BIT(GPIOx->PU, GPIO_InitStruct->Pin); //---下拉不使能 CLEAR_BIT(GPIOx->PD, GPIO_InitStruct->Pin); } //---驱动能力配置 if (GPIO_InitStruct->DriverLevel == LL_GPIO_DRIVER_HIGH) { //---高驱动能力 CLEAR_BIT(GPIOx->DRIVER, GPIO_InitStruct->Pin); } else { //---低驱动能力 SET_BIT(GPIOx->DRIVER, GPIO_InitStruct->Pin); } } //---输出模式 if (GPIO_InitStruct->OutputType== LL_GPIO_OUTPUT_PUSHPULL) { //---推挽输出 CLEAR_BIT(GPIOx->OD, GPIO_InitStruct->Pin); } else { //---开漏输出 SET_BIT(GPIOx->OD, GPIO_InitStruct->Pin); } //---复用模式设置 LL_GPIO_SEL_Init(GPIOx, GPIO_InitStruct); return 0; } /// //函 数: //功 能: 端口模式的注销 //输入参 数: //输出参 数: //说 明: 数字输入,上下拉功能不使能 // uint8_t LL_GPIO_DeInit(GPIO_TypeDef* GPIOx,uint32_t Pin) { LL_GPIO_InitTypeDef GPIO_InitStruct = { 0 }; GPIO_InitStruct.Pin = Pin; GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT; GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; GPIO_InitStruct.DriverLevel = LL_GPIO_DRIVER_HIGH; GPIO_InitStruct.Alternate = LL_GPIO_AF_0; LL_GPIO_Init(GPIOx, &GPIO_InitStruct); return 0; } |
|
|
|
只有小组成员才能发言,加入小组>>
2991 浏览 9 评论
2708 浏览 16 评论
3227 浏览 1 评论
8476 浏览 16 评论
3789 浏览 18 评论
6983浏览 6评论
求助,请问MS51FB9AE带隙电压能作为侦测的基准电压吗?
7468浏览 3评论
6971浏览 3评论
支持UART-to-BLE透传的新唐NuTool – BLE ATCMD开发工具推荐
5812浏览 3评论
9390浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-5 21:47 , Processed in 0.807985 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号