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.正常工作状态
2.上拉/下拉电阻
1.上拉输入模式
2.下拉输入模式
3.浮空输入模式
4.上拉/下拉电阻的核心作用
3.施密特触发器
1.核心工作逻辑
2.实际应用中
4.模拟输入/复用功能输入线路
1.模拟输入
2.复用功能输入
2.输出部分
1.输出数据寄存器与片上外设
1. 传统位操作法
2. BSRR直接操作法
3. 位带操作法
2.MOS管
1.推挽输出模式
2.开漏输出模式
3.关闭模式
4.GPIO的模式
5.STM32的外部设备和电路
1.LED和蜂鸣器介绍
1.LED
2.有源蜂鸣器
3.无源蜂鸣器
2.LED和蜂鸣器的硬件电路
1.LED的硬件电路
1.低电平驱动电路
2.高电平驱动电路
3.驱动方式的选择
2.蜂鸣器的硬件电路
1.PNP三极管驱动电路
2.NPN三极管驱动电路
3.布局注意事项
6.面包板结构与连接原理
1. 正面与内部构造
2. 金属爪排列规律
3. 供电注意事项
总结
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技术的起点,更是开启嵌入式开发之路的重要一步。只要保持学习热情,坚持理论结合实践,必能有所收获。由于文章篇幅有限,无法涵盖全部技术细节,建议结合官方手册深入钻研,以获取更全面、准确的技术信息。