?? ?#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<<GPIO_AF_CTRL1_IR_POS) ?? ?#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<<GPIO_AF_CTRL1_HCLK_EN_POS) ?? ?#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<<GPIO_AF_CTRL1_PCLK_EN_POS) ?? ?#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<<GPIO_AF_CTRL1_HCLK_SEL_POS) ?? ?#define GPIO_AF_CTRL1_HCLK_SEL?? ??? ??? ?GPIO_AF_CTRL1_HCLK_SEL_MASK
?? ?#define GPIO_AF_CTRL1_HCLK_PRS_1?? ??? ?(0x00UL<<GPIO_AF_CTRL1_HCLK_SEL_POS) ?? ?#define GPIO_AF_CTRL1_HCLK_PRS_2?? ??? ?(0x01UL<<GPIO_AF_CTRL1_HCLK_SEL_POS) ?? ?#define GPIO_AF_CTRL1_HCLK_PRS_4?? ??? ?(0x02UL<<GPIO_AF_CTRL1_HCLK_SEL_POS) ?? ?#define GPIO_AF_CTRL1_HCLK_PRS_8?? ??? ?(0x03UL<<GPIO_AF_CTRL1_HCLK_SEL_POS)
?? ?#define GPIO_AF_CTRL1_PCLK_SEL_POS?? ??? ?8 ?? ?#define GPIO_AF_CTRL1_PCLK_SEL_MASK?? ??? ?(0x03UL<<GPIO_AF_CTRL1_PCLK_SEL_POS) ?? ?#define GPIO_AF_CTRL1_PCLK_SEL?? ??? ??? ?GPIO_AF_CTRL1_PCLK_SEL_MASK
?? ?#define GPIO_AF_CTRL1_PCLK_PRS_1?? ??? ?(0x00UL<<GPIO_AF_CTRL1_PCLK_SEL_POS) ?? ?#define GPIO_AF_CTRL1_PCLK_PRS_2?? ??? ?(0x01UL<<GPIO_AF_CTRL1_PCLK_SEL_POS) ?? ?#define GPIO_AF_CTRL1_PCLK_PRS_4?? ??? ?(0x02UL<<GPIO_AF_CTRL1_PCLK_SEL_POS) ?? ?#define GPIO_AF_CTRL1_PCLK_PRS_8?? ??? ?(0x03UL<<GPIO_AF_CTRL1_PCLK_SEL_POS)
?? ?#define GPIO_AF_CTRL1_SPI0_SS_POS?? ??? ?4 ?? ?#define GPIO_AF_CTRL1_SPI0_SS_MASK?? ??? ?(0x0FUL<<GPIO_AF_CTRL1_SPI0_SS_POS) ?? ?#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<<GPIO_AF_CTRL1_EXT_CLK_POS) ?? ?#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<<GPIO_AF_CTRL2_AHB_POS) ?? ?#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<<GPIO_AF_CTRL2_TCLK_DIV_POS) ?? ?#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<<GPIO_AF_CTRL2_TCLK_SEL_POS) ?? ?#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<<GPIO_AF_CTRL2_SPI1_SS_POS) ?? ?#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<<GPIO_AF_TIMGS_LPTIM0_POS) ?? ?#define GPIO_AF_TIMGS_LPTIM0?? ??? ??? ?GPIO_AF_TIMGS_LPTIM0_MASK
?? ?#define GPIO_AF_TIMGS_TIM3_POS?? ??? ??? ?9 ?? ?#define GPIO_AF_TIMGS_TIM3_MASK?? ??? ??? ?(0x07UL<<GPIO_AF_TIMGS_TIM3_POS) ?? ?#define GPIO_AF_TIMGS_TIM3?? ??? ??? ??? ?GPIO_AF_TIMGS_TIM3_MASK
?? ?#define GPIO_AF_TIMGS_TIM2_POS?? ??? ??? ?6 ?? ?#define GPIO_AF_TIMGS_TIM2_MASK?? ??? ??? ?(0x07UL<<GPIO_AF_TIMGS_TIM2_POS) ?? ?#define GPIO_AF_TIMGS_TIM2?? ??? ??? ??? ?GPIO_AF_TIMGS_TIM2_MASK
?? ?#define GPIO_AF_TIMGS_TIM1_POS?? ??? ??? ?3 ?? ?#define GPIO_AF_TIMGS_TIM1_MASK?? ??? ??? ?(0x07UL<<GPIO_AF_TIMGS_TIM1_POS) ?? ?#define GPIO_AF_TIMGS_TIM1?? ??? ??? ??? ?GPIO_AF_TIMGS_TIM1_MASK
?? ?#define GPIO_AF_TIMGS_TIM0_POS?? ??? ??? ?0 ?? ?#define GPIO_AF_TIMGS_TIM0_MASK?? ??? ??? ?(0x07UL<<GPIO_AF_TIMGS_TIM0_POS) ?? ?#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<<GPIO_AF_TIMES_LPTIM0_POS) ?? ?#define GPIO_AF_TIMES_LPTIM0?? ??? ??? ?GPIO_AF_TIMES_LPTIM0_MASK
?? ?#define GPIO_AF_TIMES_TIM3_POS?? ??? ??? ?9 ?? ?#define GPIO_AF_TIMES_TIM3_MASK?? ??? ??? ?(0x07UL<<GPIO_AF_TIMES_TIM3_POS) ?? ?#define GPIO_AF_TIMES_TIM3?? ??? ??? ??? ?GPIO_AF_TIMES_TIM3_MASK
?? ?#define GPIO_AF_TIMES_TIM2_POS?? ??? ??? ?6 ?? ?#define GPIO_AF_TIMES_TIM2_MASK?? ??? ??? ?(0x07UL<<GPIO_AF_TIMES_TIM2_POS) ?? ?#define GPIO_AF_TIMES_TIM2?? ??? ??? ??? ?GPIO_AF_TIMES_TIM2_MASK
?? ?#define GPIO_AF_TIMES_TIM1_POS?? ??? ??? ?3 ?? ?#define GPIO_AF_TIMES_TIM1_MASK?? ??? ??? ?(0x07UL<<GPIO_AF_TIMES_TIM1_POS) ?? ?#define GPIO_AF_TIMES_TIM1?? ??? ??? ??? ?GPIO_AF_TIMES_TIM1_MASK
?? ?#define GPIO_AF_TIMES_TIM0_POS?? ??? ??? ?0 ?? ?#define GPIO_AF_TIMES_TIM0_MASK?? ??? ??? ?(0x07UL<<GPIO_AF_TIMES_TIM0_POS) ?? ?#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<<GPIO_AF_TIMCPS_TIM3_CH0B_POS) ?? ?#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<<GPIO_AF_TIMCPS_TIM3_CH0A_POS) ?? ?#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<<GPIO_AF_TIMCPS_TIM2_CH0A_POS) ?? ?#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<<GPIO_AF_TIMCPS_TIM1_CH0A_POS) ?? ?#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<<GPIO_AF_TIMCPS_TIM0_CH0A_POS) ?? ?#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<<GPIO_AF_PCAS_LPTIM1_ETR_POS) ?? ?#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<<GPIO_AF_PCAS_LPTIM1_GATE_POS) ?? ?#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<<GPIO_AF_PCAS_PCA_EC1_POS) ?? ?#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<<GPIO_AF_PCAS_PCA_CH0_POS) ?? ?#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<<GPIO_AF_PCNTS_PCNT_S1_POS) ?? ?#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<<GPIO_AF_PCNTS_PCNT_S0_POS) ?? ?#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; }
|