【江科协-STM32】1. GPIO

GPIO简介

GPIO(General Purpose Input/Output)通用输入输出口

可配置为8种输入输出模式。引脚电平0-3.3V,部分引脚可容忍5V,输出模式下可控制端口输出高低电平,用来驱动LED、控制蜂鸣器、模拟通信协议输出时序等。

输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据。

如果需要接入功率比较大的设备,需要接入驱动电路。

GPIO基本结构

在这里插入图片描述

APB2是外设总线。在STM32中,所有的GPIO都挂载在APB2外设总线上。

每个GPIO外设有16个引脚,顺序是第0-15号引脚。每个GPIO模块内,主要包含了寄存器和驱动器,寄存器是一段特殊的存储器,内核可以通过APB2总线对寄存器进行读写。

输入寄存器读取为1,证明目前端口是高电平,为0则是低电平。

STM32是32位的单片机,所以STM32内部的寄存器都是32位的。驱动器增加信号的驱动能力,寄存器只负责存储数据。

如果需要点灯,还是需要驱动器增大信号的驱动能力。

GPIO位结构

在这里插入图片描述

由图可见,左边三个寄存器,右边则是驱动器,最右边则是引脚。上半部分是输入部分,下半部分是输出部分。

输入

输入部分由IO引脚和两个保护二极管组成,上面的二极管接VDD(3.3V),下面的二极管接VSS(0V),输入电压如果比3.3V高,那么上方二极管将导通,输入电压产生的电流将不会流入主电路;如果输入电压低于VSS(负电压),那么下方二极管将导通。

来到左边,上拉电阻至VDD,下拉电阻至VSS,开关通过程序进行配置。上面导通,下面断开,就是上拉输入模式;下面导通,上面断开,就是下拉输入模式。两个都断开,就是浮空。输入引脚如果什么都不接,输入就是浮空,它的位置不确定,极易受到外界影响,所以要避免引脚悬空,就要加上上拉或者下拉电阻。

:::tip
上拉输入可以称作默认为高电平的输入模式,下拉则相反,是低电平的输入模式。
:::

由于翻译问题,TTL肖特基触发器应为施密特触发器。它负责为输入电压进行整形。如果输入电压大于某一个阈值,就会升为高电平。如果小于某值就会降为低电平(参考数电)。

最左边的模拟输入线,连接到ADC(需要接收模拟量)。另一个是复用功能输入(接收数字量),连接到其他需要读取端口的外设上,比如串口的输入引脚等。

输出

数字部分可以由输出数据寄存器或片上外设控制,通过数据选择器接到了输出控制部分。

选择输出数据寄存器进行控制,就是普通IO口输出,写该寄存器的某一位即可操作对应端口;位设置/清除寄存器可以用来单独操作输出数据寄存器的某一位,不影响其他位,如果想单独控制其中某个端口,需要几种方式:

  1. 读出寄存器,按位与(&=)和按位或(|=)的方式更改某一位,再将更改后的数据写回。(效率不高)
  2. 设置位设置/清除寄存器,对某一位进行置1,在位设置寄存器的对应位写1,不需操作的写0。清除则在位清除寄存器对应位写1。(主要使用)
  3. 读写STM32的位带区域(映射了RAM和外设寄存器的所有的位)。读写这段地址中的数据,相当于读写所映射位置的某一位。

右边的MOS管控制开关的导通和关闭,开关负责将IO口接到VDD或者VSS,可以选择推挽、开漏或关闭三种输出方式。

在推挽输出模式下,P-MOS和N-MOS均有效。数据寄存器为1时,上管导通,下管断开,输出直接接到VDD,即输出高电平。这样高低电平均有较强的驱动能力,因此也称为强推输出模式。这种模式下,STM32对IO口的控制权极大。

在开漏输出模式下,P-MOS是无效的,只有N-MOS在工作。数据寄存器为1时,下管断开,输出相当于断开,即高阻模式。数据寄存器为0时,下管导通,输出直接接到VSS,即输出低电平。该模式下,仅有低电平有驱动能力,高电平则没有。乍一看没有什么用,但它可以作为通信协议的驱动方式(I2C),可以在多机输入的情况下减小干扰。此外,还可以用于输出5V的电平信号。

在关闭输出模式下,两个MOS管都无效,即输出关闭,端口的电平由外部信号来控制。

GPIO输入模式

模式性质特征
浮空输入数字输入可读取引脚电平,若引脚悬空,则电平不确定
上拉输入数字输入可读取引脚电平,内部连接上拉电阻,悬空时默认高电平
下拉输入数字输入可读取引脚电平,内部连接下拉电阻,悬空时默认低电平
模拟输入模拟输入GPIO无效,引脚直接接入内部ADC
开漏输出数字输出可输出引脚电平,高电平为高阻态,低电平接VSS
推挽输出数字输出可输出引脚电平,高电平为VDD,低电平接VSS
复用开漏输出数字输出由片上外设控制,高电平为高阻态,低电平接VSS
复用推挽输出数字输出由片上外设控制,高电平为VDD,低电平接VSS

前三个模式的电路结构基本一样(刚刚也讲过),都属于数字输入口,都可以读取端口的高低电平。使用浮空输入时,端口一定要接一个连续的驱动源。

模拟输入:基本上是ADC模数转换器的专属,使用ADC的时候,将引脚配置为模拟输入。其他时候基本用不到。

开漏和推挽:结构也基本一样。区别刚刚讲过。

Reference

[1]. 江协科技.STM32入门教程-2023版 细致讲解 中文字幕[M/OL](2021-07-29)[2024-10-25]. https://www.bilibili.com/video/BV1th411z7sn/?p=5&share_source=copy_web&vd_source=8b2bc57e71349607b55c9fde6b078ebd

### 关于科协 STM32 开发教程及相关资源 #### 1. **STM32开发概述** STM32是一款由STMicroelectronics推出的基于ARM Cortex-M架构的微控制器系列,广泛应用于工业自动化、消费电子以及物联网等领域。对于初学者而言,协科技提供的STM32教学视频是一个非常不错的起点[^1]。 #### 2. **STM32开发方式的选择** 针对STM32的学习和开发,目前主流的方式有三种: - **基于寄存器的开发**:这种方式最为底层,适合对硬件细节深入了解的人群,但由于其复杂性和较高的学习成本,并不适合初学者[^2]。 - **基于标准库(库函数)的开发**:这种方法通过调用已经封装好的函数实现功能,降低了开发难度,同时也保留了一定程度上的灵活性[^2]。 - **基于HAL库的开发**:这是当前较为流行的开发模式之一,尤其适用于希望快速上手并完成项目的开发者。不过需要注意的是,这种开发方式可能会影响对底层逻辑的理解[^2]。 #### 3. **学习资源推荐** 为了更好地掌握STM32开发技能,可以参考以下几种资源: - **官方文档**:包括数据手册和技术参考手册在内的资料提供了详尽的技术参数说明及API接口描述等内容[^3]。 - **STM32CubeMX 工具**:该工具能够自动生成初始化代码框架,极大简化了项目初期设置过程中的繁琐操作步骤[^3]。 - **Keil MDK 集成环境**:作为一款专业的嵌入式应用编程平台,它集成了编辑器、编译链接器等多个必要模块于一体,便于用户构建完整的应用程序解决方案[^4]。 以下是几个具体建议供您考虑采用: - 结合实际案例练习巩固理论知识; - 多利用网络社区交流经验技巧; - 不断尝试新特性以拓宽视野范围; ```c // 示例代码展示如何点亮LED灯泡 #include "stm32f1xx_hal.h" void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while (1){ HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); // 切换PC13引脚状态 HAL_Delay(500); // 延迟半秒时间 } } /** * @brief 初始化GPIO端口配置. */ static void MX_GPIO_Init(void){ __HAL_RCC_GPIOC_CLK_ENABLE(); // 启动GPIOC时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; /* PC13 设置为输出模式 */ GPIO_InitStruct.Pin = GPIO_PIN_13; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOC,&GPIO_InitStruct); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

城主_全栈开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值