少女祈祷中...

几种输入模式

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
2
3
4
5
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

读写函数

读取输入寄存器某一个端口的输入值的,返回值代表这个端口的高低电平。

读取按键需要用到这个函数。

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
2
3
4
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

GPIO输出函数

指定端口高电平

1
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

指定端口低电平

1
2
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
GPIO_ResetBits (GPIOA ,GPIO_Pin_0);

来根据第三个参数的值设定端口

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
2
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
GPIO_Write(GPIOA ,~0x0001); //低电平点亮,加一个按位取反的符号~