图片取自 江协科技 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)
图片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的输入输出的一个总结.