[STM32 GPIO配置]
- GPIO初始化结构体:
//定义结构体
GPIO_InitTypeDef GPIO_InitStructure;
//配置GPIO_Mode
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
//GPIO_Pin选择
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
//GPIO_Speed设置
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- 关于
GPIO_Mode
:
在程序函数里是这么写的:
/**
* @brief Configuration Mode enumeration
*/
typedef enum
{ GPIO_Mode_AIN = 0x0,
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
}GPIOMode_TypeDef;
其中,具体的模式及使用说明如下:
GPIO_Mode_AIN
为模拟输入模式(Analog Input Mode)。 在该模式下,GPIO引脚被配置为模拟信号输入。ADC模块可以将引脚读取到的模拟信号转换成数字信号进行处理。这种模式适用于需要精确模拟量信号输入的场合,如温度传感器、光传感器等。
GPIO_Mode_IN_FLOATING
为浮空输入模式(Floating Input Mode)。 在该模式下,GPIO引脚处于高阻态且未选通上拉或下拉电阻。这种模式适用于数字输入信号不需要精度要求的场合,例如控制系统中一些状态量检测、接近传感器等的信号输入。但是,在使用输入浮空模式时,需要注意防止静电干扰和误操作。
GPIO_Mode_IPD
为下拉输入模式(Input with Pull-up Mode)。 在该模式下,GPIO引脚通过一个上拉电阻与VDD相连。当外部电路未连接时,引脚被拉向高电平。这种模式适用于需要稳定输入信号的场合,如按键开关、震动传感器等的信号输入。此模式适用于数字输入信号需要精度要求的场合。
GPIO_Mode_IPU
为上拉输入模式(Input with Pull-down Mode)。 在该模式下,GPIO引脚通过一个下拉电阻与GND相连。当外部电路未连接时,引脚被拉向低电平。这种模式同样适用于需要稳定输入信号的场合,如按键开关、震动传感器等的信号输入。此模式同样适用于数字输入信号需要精度要求的场合。
GPIO_Mode_Out_OD
为开漏输出模式(Open-drain Output Mode)。 在该模式下,GPIO引脚可以输出低电平信号,但输出高电平信号时变为高阻态。需搭配一个外部上拉电阻使引脚运作正确。开漏输出模式适用于驱动外部设备,如LED灯、数码管等。此模式适用于外部设备控制信号输出的场合。
GPIO_Mode_Out_PP
为推挽输出模式(Push-pull Output Mode)。 在该模式下,GPIO引脚可以输出高、低电平信号。推挽输出模式适用于直接驱动负载场合,如电机、继电器等的输出驱动。此模式适用于直接驱动负载的控制信号输出的场合。
GPIO_Mode_AF_OD
为开漏式复用功能模式(Open-drain Alternate Function Mode) 在该模式下,GPIO引脚可以被配置为一些标准的或自定义的功能,例如I2C总线通讯的SCL时钟线。这种模式下,GPIO引脚被配置为开漏输出模式,适用于驱动外部设备或总线通讯。
GPIO_Mode_AF_PP
推挽式复用功能模式(Push-pull Alternate Function Mode) 在该模式下,GPIO引脚可以被配置为一些标准的或自定义的功能,例如USART通信的TX、RX数据线。这种模式下,GPIO引脚被配置为推挽输出模式,适用于直接驱动负载或者数据通讯。
- 关于
GPIO_Speed
:
在程序函数里是这么写的:
typedef enum
{
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
说实话,我也不太清楚Speed具体有什么用,站内查了一下资料,是这么说的:
GPIO 引脚速度,又称输出驱动电路的响应速度:(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路,通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。)
可理解为: 输出驱动电路的带宽:即一个驱动电路可以不失真地通过信号的最大频率。
这里给出链接stm32引脚速度GPIO_Speed的区别
这样一来,GPIO的基本参数就了解完成了,下面给出完整的配置函数:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
这里将GPIOA的Pin_1引脚配置为了上拉输入。因为是从按键函数里拽过来的
给出GPIO的使用函数文章来源:https://www.toymoban.com/news/detail-826902.html
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//设置为高电平
- GPIOx:要操作的GPIO端口,可以是GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF或GPIOG。
- GPIO_Pin:要设置为高电平的引脚编号,取值范围为0-15。
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//设置为低电平
- GPIOx:要操作的GPIO端口,可以是GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF或GPIOG。
- GPIO_Pin:要设置为高电平的引脚编号,取值范围为0-15。
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);//写电平
- GPIOx:要操作的GPIO端口,可以是GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF或GPIOG。
- PortVal:要输出的值,取值范围为0到FFFF(16位)。
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//读取指定GPIO端口和引脚号对应的输入状态
- GPIOx:GPIO端口号(例如GPIOA、GPIOB等)。
- GPIO_Pin:引脚号(例如GPIO_Pin_0、GPIO_Pin_1等)。
- 函数返回值为uint8_t类型。
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);//读取指定GPIO端口的输入数据
- GPIOx:可以是A、B、C、D、E、F或G端口之一。
- 返回值是一个16位的无符号整数,表示指定GPIO端口上各个引脚的电平状态(1为高电平,0为低电平)。
END文章来源地址https://www.toymoban.com/news/detail-826902.html
到了这里,关于[STM32 GPIO配置]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!