STM32库函数GPIO口开发 资料参考正点原子F1开发资料
void GPIO_Init(GPIO_TypeDef GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);* 使用方式: GPIO_Init(GPIOB, &GPIO_InitStructure); 库的原理: 1、先定义一个结构体,(方便多次定义端口) 上面创建一个结构体,用他来创建一个结构体:GPIO_InitTypeDef GPIO_InitStructure; 2、配置结构体 将结构体内部对应的成员赋值;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 端口配置;范围:0~15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 //对应方式: //GPIO_Mode_AIN = 0x00, 模拟输入 //GPIO_Mode_IN_FLOATING = 0x04, 输入浮空 //GPIO_Mode_IPD = 0x28, 输入下降沿 //GPIO_Mode_IPU = 0x48, 输入上升沿 //GPIO_Mode_Out_OD = 0x14, 开漏输出 //GPIO_Mode_Out_PP = 0x10, 推挽输出 //GPIO_Mode_AF_OD = 0x1C, 复用开漏 //GPIO_Mode_AF_PP = 0x18 复用推挽 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz 、2MHZ 、10MHZuint8_t GPIO_ReadInputDataBit(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin);* 作用:读取某个GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。 例如: GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5);//读取GPIOA.5的输入电平,第一个是定义哪一个组。第二个是定义哪一个口
uint16_t GPIO_ReadInputData(GPIO_TypeDef GPIOx);* 作用:读取某组GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。 例如: GPIO_ReadInputData(GPIOA);//读取GPIOA组中所有io口输入电平,返回一个16位值
uint8_t GPIO_ReadOutputDataBit (GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 作用:读取某个GPIO的输出电平。实际操作的是GPIO_ODR寄存器。 例如: GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_5);//读取GPIOA.5的输出电平
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); 作用:读取某组GPIO的输出电平。实际操作的是GPIO_ODR寄存器。 例如: GPIO_ReadOutputData(GPIOA);//读取GPIOA组中所有io口输出电平
void GPIO_SetBits(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin);* 作用:设置某个IO口输出为高电平(1)。实际操作BSRR寄存器
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 作用:设置某个IO口输出为低电平(0)。实际操作的BRR寄存器。
void GPIO_WriteBit(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin, BitAction BitVal);* void GPIO_Write(GPIO_TypeDef GPIOx, uint16_t PortVal);* 这两个函数不常用,也是用来设置IO口输出电平。
eg: 跑马灯例程: 1、使能IO口时钟。 调用函数RCC_APB2PeriphColckCmd();(不同IO组,调用时钟使能不一样) 2、初始化IO口模式。 调用函数:GPIO_Init(); 3、操作IO口,输出高低电平。 GPIO_SetBits(); GPIO_ResetBits();