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的输入输出的一个总结.

相关推荐
xduryan3 小时前
16.1 - VDMA视频转发实验之TPG
嵌入式硬件
逼子格6 小时前
硬件工程师笔记——二极管Multisim电路仿真实验汇总
笔记·嵌入式硬件·硬件工程师·multisim·硬件工程师学习·电子器件·电路图
「QT(C++)开发工程师」7 小时前
STM32 | FreeRTOS 递归信号量
python·stm32·嵌入式硬件
芯眼7 小时前
ALIENTEK精英STM32F103开发板 实验0测试程序详解
开发语言·c++·stm32·单片机·嵌入式硬件·社交电子
百里东风8 小时前
STM32IIC协议基础及Cube配置
stm32·单片机·嵌入式硬件
2301_800399728 小时前
stm32 DMA
stm32·单片机·嵌入式硬件
一只川页13 小时前
arduino平台读取鼠标光电传感器
驱动开发·单片机·嵌入式硬件·计算机外设
qq_4017004114 小时前
电容触摸按键PCB设计
stm32
爱学习的张哥15 小时前
UDP--DDR--SFP,FPGA实现之模块梳理及AXI读写DDR读写上板测试
单片机·fpga开发·udp·axi·ddr
LaoZhangGong12315 小时前
W5500使用ioLibrary库创建TCP客户端
网络·经验分享·stm32·网络协议·tcp/ip