STM32-GPIO八种输入输出模式

图片取自 江协科技 STM32入门教程-2023版 细致讲解 中文字幕 p5

【STM32入门教程-2023版 细致讲解 中文字幕】 https://www.bilibili.com/video/BV1th411z7sn/?p=5\&share_source=copy_web\&vd_source=327265f5c70f26411a53a9226af0b35c

目录

​编辑

一.STM32的四种输入方式

1、上拉输入(GPIO_Mode_IPU)

2、下拉输入(GPIO_Mode_IPD)

3、模拟输入(GPIO_Mode_AIN)

4、浮空输入(GPIO_Mode_IN_FLOATING)

二.STM32的四种输出方式

1、普通推挽输出(GPIO_Mode_Out_PP)

2、普通开漏输出(GPIO_Mode_Out_OD)

​编辑

3、复用推挽输出(GPIO_Mode_AF_PP)

4、复用开漏输出

三.结束语


一.STM32的四种输入方式

1、上拉输入(GPIO_Mode_IPU)

图片1处信号进入芯片后加了一个上拉电阻,再经过施密特触发器转换成0、1信号,读取此时的引脚电平为高电平

cpp 复制代码
// 初始化上拉输入模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;          // 上拉输入模式
GPIO_InitStruct.Pull = GPIO_PULLUP;              // 上拉输入
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);

2、下拉输入(GPIO_Mode_IPD)

图片2处信号进入芯片后加了一个上拉电阻,再经过施密特触发器转换成0、1信号,读取此时的引脚电平为高电平

cpp 复制代码
// 初始化下拉输入模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;          // 下拉输入模式
GPIO_InitStruct.Pull = GPIO_PULLDOWN;            // 下拉输入
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);

3、模拟输入(GPIO_Mode_AIN)

信号进入后不经过上拉电阻或者下拉电阻,关闭施密特触发器,经由另一线路把电压信号传送到片上外设模块。

cpp 复制代码
// 初始化模拟输入模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;         // 模拟输入模式
GPIO_InitStruct.Pull = GPIO_NOPULL;              // 不设置上拉或下拉
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);

4、浮空输入(GPIO_Mode_IN_FLOATING)

信号进入芯片内部后,既没有接上拉电阻也没有接下拉电阻,经由触发器输入。

cpp 复制代码
// 初始化浮空输入模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;          // 浮空输入模式
GPIO_InitStruct.Pull = GPIO_NOPULL;              // 不设置上拉或下拉
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);

二.STM32的四种输出方式

1、普通推挽输出(GPIO_Mode_Out_PP)

用在0V和3.3V的场合。线路经过两个P_MOS 和N_MOS 管,负责上拉和下拉电流。

可以直接使用,推挽输出的低电平是0V,高电平是3.3V。

cpp 复制代码
// 初始化复用推挽输出模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode =GPIO_Mode_Out_PP;          // 普通推挽输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL;              // 不设置上拉或下拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;    // GPIO速度设置为高速
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);

2、普通开漏输出(GPIO_Mode_Out_OD)

用在电平不匹配的场合,需要输出5V的高电平的时候。用的时候就需要再外部接一个上拉电阻,电源为5V,把GPIO设置为开漏模式,

cpp 复制代码
// 初始化复用推挽输出模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_Mode_Out_OD;          // 普通开漏输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL;              // 不设置上拉或下拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;    // GPIO速度设置为高速
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);

3、复用推挽输出(GPIO_Mode_AF_PP)

串口的输出

cpp 复制代码
// 初始化复用推挽输出模式的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);

4、复用开漏输出

IIC

cpp 复制代码
// 初始化复用开漏输出模式的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);

三.结束语

以上就是对STM的输入输出的一个总结.

相关推荐
7yewh1 分钟前
嵌入式硬件实战提升篇(一)-泰山派RK3566制作多功能小手机
linux·arm开发·驱动开发·嵌入式硬件·物联网·智能手机·硬件架构
@晓凡1 小时前
STM32编程遇到的问题随笔【一】
stm32·单片机·嵌入式硬件
虾球xz2 小时前
游戏引擎学习第11天
stm32·学习·游戏引擎
DevinLGT2 小时前
6Pin Type-C Pin脚定义:【图文讲解】
人工智能·单片机·嵌入式硬件
小A1593 小时前
STM32完全学习——系统时钟设置
stm32·嵌入式硬件·学习
CoderBob4 小时前
【EmbeddedGUI】脏矩阵设计说明
c语言·单片机
陌夏微秋5 小时前
51单片机基础02 动态数码管显示-并串转换
arm开发·单片机·嵌入式硬件·51单片机·硬件工程·信息与通信·信号处理
面包板扎5 小时前
51单片机应用开发---LCD1602显示应用
单片机·嵌入式硬件·51单片机
面包板扎5 小时前
51单片机应用开发(进阶)---定时器应用(电子时钟)
单片机
好想有猫猫5 小时前
【51单片机】LCD1602液晶显示屏
c语言·单片机·嵌入式硬件·51单片机·1024程序员节