通用io结构体设置
①typedef struct
{
uint32_t GPIO_Pin; //针脚
This parameter can be any value of @ref GPIO_pins_define */
GPIOMode_TypeDef GPIO_Mode; //模式
This parameter can be a value of @ref GPIOMode_TypeDef */
GPIOSpeed_TypeDef GPIO_Speed; //速度
This parameter can be a value of @ref GPIOSpeed_TypeDef */
GPIOOType_TypeDef GPIO_OType; //输出物理模式 推挽or 开漏
This parameter can be a value of @ref GPIOOType_TypeDef */
GPIOPuPd_TypeDef GPIO_PuPd; //上下拉电阻设置
This parameter can be a value of @ref GPIOPuPd_TypeDef */
}GPIO_InitTypeDef;
Pin选择:
#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 */
Mode选择:
typedef enum
{
GPIO_Mode_IN = 0x00, /*!< GPIO Input Mode */
GPIO_Mode_OUT = 0x01, /*!< GPIO Output Mode */
GPIO_Mode_AF = 0x02, /*!< GPIO Alternate function Mode */
GPIO_Mode_AN = 0x03 /*!< GPIO Analog Mode */
}GPIOMode_TypeDef;
Speed速度设置:
typedef enum
{
GPIO_Speed_2MHz = 0x00, /*!< Low speed */
GPIO_Speed_25MHz = 0x01, /*!< Medium speed */
GPIO_Speed_50MHz = 0x02, /*!< Fast speed */
GPIO_Speed_100MHz = 0x03 /*!< High speed on 30 pF (80 MHz Output max speed on 15 pF) */
}GPIOSpeed_TypeDef;
OType输出物理性质设置:
typedef enum
{
GPIO_OType_PP = 0x00,
GPIO_OType_OD = 0x01
}GPIOOType_TypeDef;
PuPd上下拉电阻设置:
typedef enum
{
GPIO_PuPd_NOPULL = 0x00,
GPIO_PuPd_UP = 0x01,
GPIO_PuPd_DOWN = 0x02
}GPIOPuPd_TypeDef;
②开相关寄存器时钟:(注意开syscfg在APB2)
void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState);
void RCC_AHB2PeriphClockCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState);
void RCC_AHB3PeriphClockCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
AHB1首位形参:
RCC_AHB1Periph_GPIOA: GPIOA clock
RCC_AHB1Periph_GPIOB: GPIOB clock
RCC_AHB1Periph_GPIOC: GPIOC clock
RCC_AHB1Periph_GPIOD: GPIOD clock
RCC_AHB1Periph_GPIOE: GPIOE clock
RCC_AHB1Periph_GPIOF: GPIOF clock
RCC_AHB1Periph_GPIOG: GPIOG clock
RCC_AHB1Periph_GPIOG: GPIOG clock
RCC_AHB1Periph_GPIOI: GPIOI clock
RCC_AHB1Periph_CRC: CRC clock
RCC_AHB1Periph_BKPSRAM: BKPSRAM interface clock
RCC_AHB1Periph_CCMDATARAMEN: CCM data RAM interface clock
RCC_AHB1Periph_DMA1: DMA1 clock
RCC_AHB1Periph_DMA2: DMA2 clock
RCC_AHB1Periph_ETH_MAC: Ethernet MAC clock
RCC_AHB1Periph_ETH_MAC_Tx: Ethernet Transmission clock
RCC_AHB1Periph_ETH_MAC_Rx: Ethernet Reception clock
RCC_AHB1Periph_ETH_MAC_PTP: Ethernet PTP clock
RCC_AHB1Periph_OTG_HS: USB OTG HS clock
RCC_AHB1Periph_OTG_HS_ULPI: USB OTG HS ULPI clock
AHB2首位形参:
RCC_AHB2Periph_DCMI: DCMI clock
RCC_AHB2Periph_CRYP: CRYP clock
RCC_AHB2Periph_HASH: HASH clock
RCC_AHB2Periph_RNG: RNG clock
RCC_AHB2Periph_OTG_FS: USB OTG FS clock
AHB3首位形参:
RCC_AHBPeriph: specifies the AHB3 peripheral to gates its clock.
This parameter must be: RCC_AHB3Periph_FSMC
APB1首位形参:
RCC_APB1Periph_TIM2: TIM2 clock
RCC_APB1Periph_TIM3: TIM3 clock
RCC_APB1Periph_TIM4: TIM4 clock
RCC_APB1Periph_TIM5: TIM5 clock
RCC_APB1Periph_TIM6: TIM6 clock
RCC_APB1Periph_TIM7: TIM7 clock
RCC_APB1Periph_TIM12: TIM12 clock
RCC_APB1Periph_TIM13: TIM13 clock
RCC_APB1Periph_TIM14: TIM14 clock
RCC_APB1Periph_WWDG: WWDG clock
RCC_APB1Periph_SPI2: SPI2 clock
RCC_APB1Periph_SPI3: SPI3 clock
RCC_APB1Periph_USART2: USART2 clock
RCC_APB1Periph_USART3: USART3 clock
RCC_APB1Periph_UART4: UART4 clock
RCC_APB1Periph_UART5: UART5 clock
RCC_APB1Periph_I2C1: I2C1 clock
RCC_APB1Periph_I2C2: I2C2 clock
RCC_APB1Periph_I2C3: I2C3 clock
RCC_APB1Periph_CAN1: CAN1 clock
RCC_APB1Periph_CAN2: CAN2 clock
RCC_APB1Periph_PWR: PWR clock
RCC_APB1Periph_DAC: DAC clock
APB2首位形参:
RCC_APB2Periph_TIM1: TIM1 clock
RCC_APB2Periph_TIM8: TIM8 clock
RCC_APB2Periph_USART1: USART1 clock
RCC_APB2Periph_USART6: USART6 clock
RCC_APB2Periph_ADC1: ADC1 clock
RCC_APB2Periph_ADC2: ADC2 clock
RCC_APB2Periph_ADC3: ADC3 clock
RCC_APB2Periph_SDIO: SDIO clock
RCC_APB2Periph_SPI1: SPI1 clock
RCC_APB2Periph_SYSCFG: SYSCFG clock
RCC_APB2Periph_TIM9: TIM9 clock
RCC_APB2Periph_TIM10: TIM10 clock
RCC_APB2Periph_TIM11: TIM11 clock
③GPIO_Init(GPIOx ,&GPIO_InitStructure); //与①共同协作,port与结构体为形参
控制io逻辑的方法:
GPIOx->BSRRL = GPIO_Pin_xx; //置1
GPIOx->BSRRH = GPIO_Pin_xx; //置0
GPIOx->ODR ^= GPIO_Pin_xx; //翻转