// 初始化复用推挽输出模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // 复用推挽输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 不设置上拉或下拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // GPIO速度设置为高速
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);
- 复用开漏输出(AF Open-Drain Output):复用开漏输出模式允许将GPIO引脚用作特定外设功能。在该模式下,引脚只能输出低电平,要输出高电平需要通过外部上拉电阻或其他方式。
// 初始化复用开漏输出模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; // 复用开漏输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 不设置上拉或下拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // GPIO速度设置为高速
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);
- 浮空输入(Floating Input):浮空输入模式是一种高阻抗输入模式。在该模式下,引脚不连接到外部电路,处于高阻抗状态。可以通过读取引脚电平来检测外部信号。
// 初始化浮空输入模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 浮空输入模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 不设置上拉或下拉
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);
- 上拉输入(Pull-up Input):上拉输入模式是一种具有内部上拉电阻的GPIO输入模式。在该模式下,引脚连接到外部电路,通过内部上拉电阻来维持默认电平为高电平。
// 初始化上拉输入模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 上拉输入模式
GPIO_InitStruct.Pull = GPIO_PULLUP; // 上拉输入
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);
- 下拉输入(Pull-down Input):下拉输入模式是一种具有内部下拉电阻的GPIO输入模式。在该模式下,引脚连接到外部电路,通过内部下拉电阻来维持默认电平为低电平。
// 初始化下拉输入模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 下拉输入模式
GPIO_InitStruct.Pull = GPIO_PULLDOWN; // 下拉输入
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);
- 模拟输入(Analog Input):模拟输入模式是一种用于ADC(模数转换器)输入的特殊模式。在该模式下,引脚可以接收连续变化的模拟信号。
// 初始化模拟输入模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; // 模拟输入模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 不设置上拉或下拉
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);
区别
-
推挽输出(Push-Pull Output):
- 特点:可以输出高电平和低电平,具有一定的驱动能力。
- 应用场景:用于驱动外部电路,如控制LED灯、驱动其他逻辑电路等。
-
开漏输出(Open-Drain Output):
- 特点:只能输出低电平,需要外部上拉电阻将引脚拉高;具有一定的驱动能力。
- 应用场景:与外部器件连接时,如I2C总线,用于与其他设备进行通信。
-
复用推挽输出(AF Push-Pull Output):
- 特点:具有推挽输出的特性,可用于将GPIO引脚用作特定外设的功能。
- 应用场景:连接到外设的特殊功能引脚,如UART串口通信引脚、PWM输出等。
-
复用开漏输出(AF Open-Drain Output):
- 特点:具有开漏输出的特性,可用于将GPIO引脚用作特定外设的功能。
- 应用场景:连接到外设的特殊功能引脚,如I2C总线通信引脚、故障信号输出等。
-
浮空输入(Floating Input):
- 特点:引脚处于高阻抗状态,未连接到外部电路,测量外部信号电平。
- 应用场景:接收外部信号的状态,如按键输入、传感器输入等。
-
上拉输入(Pull-up Input):
- 特点:具有内部上拉电阻,引脚的默认电平为高电平。
- 应用场景:检测外部信号为低电平时,例如按键按下。
-
下拉输入(Pull-down Input):
- 特点:具有内部下拉电阻,引脚的默认电平为低电平。
- 应用场景:检测外部信号为高电平时,例如按键抬起。
-
模拟输入(Analog Input):
- 特点:用于接收连续变化的模拟信号,通常与ADC(模数转换器)配合使用。
- 应用场景:测量传感器信号、音频输入等模拟信号的变化。
初始化和配置
例程
#include "stm32xxxx.h" // 包含特定的STM32系列头文件
void GPIO\_Init(void)
{
GPIO_InitTypeDef gpio_init; // 定义GPIO初始化结构体
// 1. 配置引脚
gpio_init.GPIO_Pin = GPIO_Pin_x; // x为需要初始化的引脚编号
gpio_init.GPIO_Mode = GPIO_Mode_x; // x为引脚模式,如GPIO\_Mode\_IN、GPIO\_Mode\_OUT等
gpio_init.GPIO_Speed = GPIO_Speed_x; // x为引脚速度,如GPIO\_Speed\_2MHz、GPIO\_Speed\_50MHz等
gpio_init.GPIO_OType = GPIO_OType_x; // x为输出模式,如GPIO\_OType\_PP(推挽输出)、GPIO\_OType\_OD(开漏输出)等
gpio_init.GPIO_PuPd = GPIO_PuPd_x; // x为上下拉配置,如GPIO\_PuPd\_NOPULL(无上下拉)、GPIO\_PuPd\_UP(上拉)等
GPIO\_Init(GPIOx, &gpio_init); // GPIOx为对应的GPIO端口,如GPIOA、GPIOB等
// 将上面代码中的 GPIO\_Pin\_x 替换为你要初始化和配置的具体引脚编号
// 将 GPIO\_Mode\_x 替换为你需要的引脚模式
// 将 GPIO\_Speed\_x 替换为你需要的引脚速度
// 将 GPIO\_OType\_x 替换为你需要的输出模式
// 将 GPIO\_PuPd\_x 替换为你需要的上下拉配置
// 2. 配置引脚复用功能(如果需要)
GPIO\_PinAFConfig(GPIOx, GPIO_PinSource_x, GPIO_AF_x);
// GPIOx 替换为对应的GPIO端口,GPIO\_PinSource\_x 替换为需要配置复用功能的引脚编号,GPIO\_AF\_x 替换为复用功能选择
// 其他操作,如设置引脚输出、读取引脚输入状态、配置中断等
}
int main(void)
{
// 初始化MCU和其他外设
// 初始化GPIO引脚
GPIO\_Init();
// 其他代码逻辑
while (1)
{
// 主循环代码
}
}
请替换代码中的以下部分:
-
stm32xxxx.h
:使用适用于你的STM32系列的具体头文件,例如stm32f4xx.h
。 -
GPIO_Init()
函数中的GPIO_Pin_x
:将其替换为你要初始化和配置的特定引脚编号。 -
GPIO_Mode_x
:将其替换为你需要的引脚模式,例如GPIO_Mode_IN
、GPIO_Mode_OUT
等。 -
GPIO_Speed_x
:将其替换为你需要的引脚速度,例如GPIO_Speed_2MHz
、GPIO_Speed_50MHz
等。 -
GPIO_OType_x
:将其替换为你需要的输出模式,例如GPIO_OType_PP
(推挽输出)或GPIO_OType_OD
(开漏输出)。 -
GPIO_PuPd_x
:将其替换为你需要的上下拉配置,例如GPIO_PuPd_NOPULL
(无上下拉)或GPIO_PuPd_UP
(上拉)。 -
GPIOx
和GPIO_PinSource_x
:将其替换为你需要的具体GPIO端口和引脚编号。 -
GPIO_AF_x
:将其替换为你需要的复用功能选择,例如GPIO_AF_USART1
(USART1复用功能)、GPIO_AF_SPI2
(SPI2复用功能)等。
步骤解释
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)
最后
资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!文章来源:https://www.toymoban.com/news/detail-860088.html
式)**
最后
资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!
更多资料点击此处获qu!!文章来源地址https://www.toymoban.com/news/detail-860088.html
到了这里,关于【物联网】详解STM32的GPIO八种输入输出模式,GPIO各种输入输出的区别、初始化的步骤详解,看这文章就行了(超详细)_stm32输出模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!