几种输入模式
1.浮空输入
1 | GPIO_Mode_IN_FLOATING = 0x04; |
在这种模式下,GPIO引脚没有内部上拉或下拉电阻,因此它的电平状态取决于外部电路。这种模式常用于读取开关状态,如按钮或传感器的输出。
2.上拉输入
1 | GPIO_Mode_IPU = 0x48; |
与下拉输入相反,这种模式在GPIO引脚内部连接了一个上拉电阻到电源(VCC),使得引脚在没有外部信号时保持高电平。这同样用于防止悬空状态,并且适用于那些需要默认高电平信号的输入。
3.开漏输出
1 | GPIO_Mode_Out_OD = 0x14; |
在开漏输出模式下,GPIO引脚可以输出低电平,但不能直接输出高电平。高电平相当于高阻态,无驱动能力。要实现高电平,需要外部上拉电阻。这种模式常用于连接到其他设备的输入,这些设备可以提供高电平信号。
4.推挽输出
1 | GPIO_Mode_Out_PP = 0x10; |
推挽输出模式允许GPIO引脚直接输出高电平和低电平,都有驱动能力。这种模式提供了更强的驱动能力,适用于直接驱动负载,如LED或继电器。
5.复用开漏
1 | GPIO_Mode_AF_OD = 0x1C |
这种模式将GPIO引脚配置为复用功能(如USART、SPI等)的开漏输出。这意味着引脚可以作为特定外设的信号线,同时保持开漏输出的特性。
6.复用推挽
1 | GPIO_Mode_AF_PP = 0x18; |
类似于复用开漏,但这种模式允许GPIO引脚作为复用功能时,能够输出推挽信号。这使得引脚可以作为高速通信接口的一部分,如I2C或SPI。
时钟控制函数
1 | void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState); |
读写函数
读取输入寄存器某一个端口的输入值的,返回值代表这个端口的高低电平。
读取按键需要用到这个函数。
1 | uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); |
用来读取整个输入寄存器,返回值16位,每一位代表一个端口值。
1 | uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); |
用来读取输出寄存器的某一个位,常用于查看输出模式下自己的输出值
按键按下,LED的状态取反
1 | uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); |
用来读取整个输出数据寄存器,常用于查看输出模式下自己的输出值
1 | uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); |
GPIO写入函数
1 | void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); |
GPIO输出函数
指定端口高电平
1 | void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); |
指定端口低电平
1 | void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); |
来根据第三个参数的值设定端口
1 | void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal); |
比如GPIO_WriteBit(GPIOA ,GPIO_Pin_0,Bit_SET);置高电平
比如GPIO_WriteBit(GPIOA ,GPIO_Pin_0,Bit_RESET);置低电平
写入端口
1 | void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); |