操作GPIO
1.使用RCC开启GPIO的时钟
2.使用GPIO_Init函数初始化GPIO
3.使用输出或输入函数控制时钟
RCC主要函数
使能或失能相应时钟
RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
GPIO部分函数
GPIO_DeInit(GPIO_TypeDef* GPIOx)
所指定的GPIO被复位
GPIO_AFIODeInit(void)
可复位AFIO
GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
用结构体的参数初始化GPIO口
GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
给结构体变量赋默认值
读取函数
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
写入函数
GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
把指定端口设置成高电平
GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
把指定端口设置成高电平
GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
指定端口,并设置其高低电平
GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
可以一次性给多个IO口赋值
GPIO_Write(GPIOA,~0X0002);//0000 0000 0000 0010
GPIO8种工作模式
GPIO_Mode_AIN = 0x0, 模拟输入(Analog IN)
GPIO_Mode_IN_FLOATING = 0x04, 浮空输入
GPIO_Mode_IPD = 0x28, 下拉输入(In Pull Down)
GPIO_Mode_IPU = 0x48, 上拉输入(In Pull Up)
GPIO_Mode_Out_OD = 0x14, 开漏输出(Out Open Drain)
GPIO_Mode_Out_PP = 0x10, 推挽输出(Out Push Pull)
GPIO_Mode_AF_OD = 0x1C, 复用开漏(Atl Open Drain)
GPIO_Mode_AF_PP = 0x18 复用推挽(Atl Push Pull)