STM32入门教程——GPIO输出
本教材基于B站江协科技课程整理,适合有C语言基础、刚接触STM32的新手。它梳理了STM32核心知识点,帮助大家把C语言知识应用到STM32开发中,更高效地开启STM32学习之旅。目录前言1.知识储备1.GPIO简介2.GPIO基本结构1.APB2外设总线2.GPIO的命名3.GPIO的组成1.寄存器2.驱动器3.GPIO位结构1.输入部分1.保护二极管1.正向过压保护2.负向过压保护3.正常工作
前言
本教材基于B站江协科技课程整理,适合有C语言基础、刚接触STM32的新手。它梳理了STM32核心知识点,帮助大家把C语言知识应用到STM32开发中,更高效地开启STM32学习之旅。
目录
1.知识储备
1.GPIO简介
1.GPIO (General Purpose Input Output)通用输入输出口
2.可配置为8种输入输出模式
3.引脚电平:0V~3.3V,部分引脚可容忍5V
4.输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
5.输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC 电压采集、模拟通信协议接收数据等
2.GPIO基本结构
1.APB2外设总线
在STM32中,所有的GPIO都是挂载在APB2外设总线上的

2.GPIO的命名
1.GPIO外设的名称是按照GPIOA、GPIOB、GPIOC等等这样来命名

2.每个GPIO外设,总共有16个引脚,编号是从0到15

3.GPIOA的“0”号引脚,一般称作PA0,“1”号引脚,一般称作PA1,“2”号引脚,一般称作PA2,以 此类推,一直到PA15(GPIOB也是如此)

3.GPIO的组成
在每个GPIO模块内,主要包含了寄存器和驱动器
1.寄存器
1.寄存器就是一段特殊的存储器
2.内核可以通过APB2总线对寄存器进行读写,这样就可以完成输出电平和读取电平的功能
3.寄存器的每一位对应一个引脚
其中
输出寄存器写“1”,对应的引脚就会输出高电平
输出寄存器写“0”,对应的引脚就会输出低电平
输出寄存器读取为“1”,就证明对应的端口目前是高电平
输出寄存器读取为“0”,就证明对应的端口目前是低电平
4.STM32是32位单片机,其寄存器多为32位,但端口仅16位
因此,端口寄存器只有低16位与实际端口引脚对应,高16位未使用

2.驱动器
1.作用
增加信号的驱动能力
2.寄存器只负责存储数据,如果需要进行例如点灯的操作,还是需要驱动器来负责增大驱动能力的

3.GPIO位结构
可以分为两个部分,上面是输入部分,下面是输出部分

1.输入部分
1.保护二极管

在STM32的GPIO引脚设计中,两个保护二极管构成了重要的过压保护机制,其工作原理如下:
1.正向过压保护
当GPIO引脚的输入电压高于VDD(3.3V)时,上方连接VDD的保护二极管会正向导通。此时,过
高的输入电压产生的电流会通过该二极管直接流入VDD,而不会进入内部电路,从而避免高电压对
内部电路造成损坏。
2.负向过压保护
若输入电压低于VSS(0V),下方连接VSS的保护二极管将导通。此时,电流会通过该二极管直
接流向VSS,而不会从内部电路汲取电流,以此保护内部电路免受负向过压的影响。
3.正常工作状态
当输入电压处于0V到3.3V之间的正常范围内时,两个保护二极管均处于截止状态,不会对GPIO引
脚的信号传输和内部电路工作产生任何影响,确保电路能稳定地处理输入信号 。
这种双二极管的设计,通过简单而有效的钳位机制,为GPIO引脚提供了可靠的电压保护,极大提
升了STM32系统在复杂电气环境下的稳定性和抗干扰能力。
2.上拉/下拉电阻
在STM32的GPIO引脚电路设计中,上拉电阻和下拉电阻与引脚的连接方式及工作模式紧密相关。
通过程序可灵活配置连接VDD的上拉电阻开关与连接VSS的下拉电阻开关,实现不同的输入模式:
1.上拉输入模式
当配置上拉电阻通路导通,下拉电阻通路断开时,GPIO引脚进入上拉输入模式。此时,若外部无
有效信号接入,引脚电平将默认被拉高至VDD(3.3V)。
2.下拉输入模式
当下拉电阻通路导通,上拉电阻通路断开时,引脚工作于下拉输入模式,在无外部信号时,引脚电平会被拉低至VSS(0V)。
3.浮空输入模式
若将上拉、下拉电阻通路同时断开,引脚处于浮空输入状态,其电平完全由外部输入信号决定,与
VDD和VSS无连接。
4.上拉/下拉电阻的核心作用
在于为输入引脚提供默认电平,解决引脚悬空时的信号不确定性问题。
数字端口的输入信号仅有高、低电平两种状态,若输入引脚未连接任何信号源,将处于浮空状态。
这种状态下,引脚电平极易受外界电磁干扰等因素影响而发生变化,如同太空中悬浮的物体,位置难以确定。
为避免由此引发的输入数据不稳定,需引入上拉或下拉电阻。
上拉电阻可确保引脚在悬空时保持高电平,因此上拉输入模式也被称为默认高电平输入;下拉电阻则将引脚在悬空时拉至低电平,即默认低电平输入。类比来看,这就如同太空中的物体因重力作用落地——在无外力干扰时,会保持稳定状态。
值得注意的是,STM32中采用的上拉电阻和下拉电阻阻值较大,属于弱上拉和弱下拉设计。这样
做的目的是最大限度减少电阻对正常输入信号的影响,在提供稳定默认电平的同时,确保外部输入
信号能准确作用于引脚,不被电阻过度干扰。
3.施密特触发器

施密特触发器在STM32的GPIO输入电路中主要承担信号整形功能,通过独特的双阈值机制,有效
提升数字信号的稳定性与可靠性。
1.核心工作逻辑
(基于两个关键电压阈值)
当输入电压超过上限阈值时,触发器输出将瞬间跃变为高电平;而当输入电压低于下限阈值时,输
出则立即降至低电平。在两个阈值之间的电压区间内,触发器会维持当前输出电平不变,直到输入
信号再次突破阈值范围。
2.实际应用中
GPIO引脚接收的外部数字信号常因电磁干扰、线路损耗等因素出现波形失真。例如,信号上升或
下降沿可能出现不规则抖动,导致电平判断错误。此时,施密特触发器的双阈值特性发挥重要作
用:它通过设置上限与下限阈值形成“滞回区间”,将不稳定的输入信号转化为规则的矩形波。只要
输入信号在滞回区间内波动,输出电平就保持不变,有效过滤了噪声干扰,避免因微小电压波动导
致的误触发。
经过施密特触发器整形后的信号,波形边缘变得陡峭、电平状态清晰稳定,可直接写入STM32的输入数据寄存器。后续通过编程读取寄存器对应位的数据,就能确保获取到准确、可靠的外部信号状态,为系统的稳定运行提供保障。
4.模拟输入/复用功能输入线路
在STM32的GPIO引脚功能配置中,模拟输入与复用功能输入因信号特性不同,与施密特触发器的
连接方式也存在差异:
1.模拟输入
由于ADC(模拟数字转换器)的工作特性是将模拟信号转换为数字信号,因此模拟输入引脚直接连
接到ADC模块。为确保ADC接收到原始模拟信号,避免施密特触发器将模拟信号整形为数字型信
号,模拟输入线路绕过施密特触发器,直接接入ADC,保证信号在模拟状态下完成采样和转换。
2.复用功能输入
对于如串口输入引脚等复用功能输入,其传输的是数字信号,需要稳定、规则的电平状态。因此,
复用功能输入引脚在连接到其他外设(如串口)之前,先经过施密特触发器。通过施密特触发器的
整形作用,消除数字信号的噪声干扰和波形畸变,使信号符合外设的输入要求,确保数据传输的准
确性和稳定性。

这种差异化的连接设计,充分发挥了施密特触发器对数字信号的整形优势,同时保障模拟信号的完
整性,实现不同类型信号在STM32系统中的高效处理。
2.输出部分
在STM32的GPIO数字输出控制体系中,存在两种控制路径:
1.输出数据寄存器与片上外设
二者通过数据选择器(红色框内)连接至输出控制模块。当选择输出数据寄存器控制时,GPIO呈现普通输出模式,开发者可通过对寄存器对应位的写入操作,实现端口电平的设置。

为实现对16个端口的单独控制,STM32设置了位设置/清除寄存器(BSRR) 。该寄存器仅支持整
体读写,因此单独操作某一端口时需特定方法:
1. 传统位操作法
先读取寄存器当前值,利用按位与( & )和按位或( | )运算修改目标位,再将修改后的值写回寄
存器。例如,在C语言中通过 &= 和 |= 操作符实现。但此方式需多次读写操作,步骤繁琐,效率较
低,不适用于高频I/O控制场景。
2. BSRR直接操作法
利用位设置/清除寄存器的特性,实现单步精准控制。若需将某端口置1,只需在位设置寄存器的对
应位写入1,其余位写0,内部电路将自动修改输出数据寄存器对应位为高电平;同理,若要清0某
端口,在位清除寄存器对应位写入1,即可使目标位强制拉低,而其他位保持不变。这种方法一步
到位,避免了对其他端口的干扰。
3. 位带操作法
STM32划分了特定的“位带”地址区域,该区域映射了RAM和外设寄存器的所有位。通过读写位带地
址,可直接操作对应寄存器的某一位,其功能类似于51单片机的位寻址,为开发者提供了另一种高
效的位操作方式。
在实际开发中,STM32库函数优先采用位设置/清除寄存器(BSRR)的操作方式,兼顾了操作便
捷性与控制效率,帮助开发者快速实现GPIO端口的灵活配置与精准控制。
在STM32的GPIO输出控制流程中,信号经输出控制模块处理后,连接至由PMOS和NMOS组成的驱动电路。
2.MOS管
本质为电子开关,通过控制其导通与截止状态,实现GPIO引脚与VDD或VSS的连接,进而提供推
挽输出、开漏输出和关闭三种工作模式:
1.推挽输出模式
PMOS和NMOS均参与工作,使STM32对GPIO引脚具备强驱动能力。当输出数据寄存器为1时,
PMOS导通、NMOS截止,引脚直接连接VDD,输出高电平;当输出数据寄存器为0时,PMOS截
止、NMOS导通,引脚连接VSS,输出低电平。由于该模式下高低电平均可主动驱动负载,也被称
为“强推输出模式”,适用于需要直接驱动LED、小型继电器等负载的场景。
2.开漏输出模式
仅NMOS工作,PMOS处于禁用状态。当输出数据寄存器为1时,NMOS截止,引脚呈现高阻态,
无法主动输出高电平;当输出数据寄存器为0时,NMOS导通,引脚连接VSS,输出低电平。该模
式的优势在于:其一,适用于I2C等通信协议,通过外接上拉电阻实现“线与”逻辑,避免多设备通
信时的信号冲突;其二,支持电平转换,通过将上拉电阻连接至5V电源,可使引脚在高阻态时被
拉高至5V,从而兼容5V电平的外部设备。
3.关闭模式
当GPIO引脚配置为输入模式时,PMOS和NMOS均不工作,输出功能关闭。此时,引脚电平完全
由外部输入信号控制,内部电路仅负责信号采集,不再参与电平驱动。
这三种模式通过灵活切换MOS管的工作状态,满足了不同应用场景下对GPIO引脚驱动能力、电平
兼容性和信号交互的需求,提升了STM32在各类电路设计中的适应性和可靠性。
4.GPIO的模式

5.STM32的外部设备和电路
1.LED和蜂鸣器介绍
1.LED
发光二极管,正向通电点亮,反向通电不亮
2.有源蜂鸣器
内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定
3.无源蜂鸣器
内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率
的声音
2.LED和蜂鸣器的硬件电路
1.LED的硬件电路
在使用STM32的GPIO口驱动LED电路时,存在低电平驱动和高电平驱动两种方式:
1.低电平驱动电路

LED的正极连接至3.3V电源,负极通过一个限流电阻连接到PA0引脚。当PA0引脚输出低电平时,
LED两端形成电压差,产生正向导通电流,LED点亮;当PA0引脚输出高电平时,LED两端电压均
为3.3V,无电压差,不会形成电流,LED熄灭。限流电阻必不可少,一方面可防止因电流过大烧毁
LED,另一方面通过调整其阻值能改变LED亮度,若觉得LED过亮刺眼,可适当增大阻值。
2.高电平驱动电路

LED的负极接地(GND),正极经限流电阻连接到PA0引脚。此电路为高电平点亮、低电平熄灭的工作模式。
3.驱动方式的选择
主要取决于GPIO口高低电平的驱动能力。在推挽输出模式下,GPIO口高低电平均具备较强驱动能
力,两种接法理论上都可行。但在单片机电路中,通常倾向采用第一种低电平驱动接法。这是因为
许多单片机或芯片遵循高电平弱驱动、低电平强驱动的规则,采用低电平驱动可在一定程度上避免
高低电平冲突。若GPIO口高电平驱动能力较弱,就不宜采用高电平驱动的连接方式。
2.蜂鸣器的硬件电路
在驱动功率稍大的器件时,若直接使用STM32的I/O口驱动,会使STM32负担过重,此时可采用三
极管开关驱动方案,这是较为简单的驱动电路。
1.PNP三极管驱动电路

如图所示,三极管的左边为基极,带箭头的是发射极,剩下的是集电极 。当基极输入低电平时,
三极管导通,此时通过3.3V电源和GND能为蜂鸣器提供驱动电流,使其工作;当基极输入高电平
时,三极管截止,蜂鸣器无电流通过,停止工作。
2.NPN三极管驱动电路

同样,左边是基极,带箭头的是发射极,余下的是集电极 。其驱动逻辑与PNP三极管相反,基极
输入高电平时三极管导通,输入低电平时三极管截止。
3.布局注意事项
一般来说,PNP三极管宜接在上部,NPN三极管宜接在下部。这是因为三极管的导通与截止,需
要在发射极和基极之间产生一定的开启电压。若将负载接在发射极一侧,可能致使三极管无法正常
开启,影响驱动电路的正常工作。
6.面包板结构与连接原理
1. 正面与内部构造
左上角图展示的是面包板正面。当把元件引脚插入面包板的孔中时,内部的金属爪会将引脚夹住。
左下角图呈现的是面包板反面(已撕掉背面双面胶),从反面可以看到一条条金属爪。右侧示意图
则是金属爪的具体示意。

2. 金属爪排列规律
观察面包板背面,金属爪的排列有着特定规律。中间的金属爪呈竖着放置,与之对应的是,竖着的
5个孔在内部是相互连接的。这意味着当元件引脚插在同一纵排的不同孔位时,内部金属爪能实现
线路连接。而上下各有四排金属爪,每四排分别构成一个整体,用于供电。其中,第一排和第三排
为正极,第二排和第四排为负极。

3. 供电注意事项
若需从面包板获取供电,可从上下这些用于供电的孔位,使用跳线引出。需额外注意的是,部分面
包板的供电引脚并非一整排全部连通,中间会有四个断开的地方。遇到这种情况,就需要用跳线将
断开处的两边连接起来,以保证供电线路的畅通。
总结
本文为个人学习江协科技STM32课程的知识总结,内容聚焦基础原理与电路结构,旨在为新手提供系统入门指导。在学习STM32的过程中,初期往往充满挑战,但这不仅是探索STM32技术的起点,更是开启嵌入式开发之路的重要一步。只要保持学习热情,坚持理论结合实践,必能有所收获。由于文章篇幅有限,无法涵盖全部技术细节,建议结合官方手册深入钻研,以获取更全面、准确的技术信息。
更多推荐



所有评论(0)