STM32(6)-- GPIO外设
1. GPIO跟引脚有什么区别引脚包含GPIO引脚还包括电源引脚BOOT引脚复位引脚等下图是STM32数据手册中的引脚分类2. GPIO简介3. GPIO功能框图3.1 保护二极管、上下拉电阻保护二极管STM32的引脚除了ADC都是可以容忍5V供电如输入电压大于5V则通过上面的保护二极管如输入电压小于0V如-1V则由VSS经下面的二极管从I/O出去。上下拉电阻“弱上拉weak pull-up”可以把它理解成STM32 在引脚内部偷偷帮你接了一根“很大电阻”的上拉到 VDD让引脚在没人驱动时不要飘floating但它拉不动大电流。1) 弱上拉到底“弱”在哪因为内部上拉并不是直接硬连到 VDD而是类似这样VDD ──几十 kΩ 的电阻── GPIO 引脚这个“电阻很大”常见量级30kΩ~50kΩ不同芯片略有差异所以电流很小假设 3.3V、40kΩ电流约3.3V / 40kΩ ≈ 0.082mA82µA这点电流只能做一件事给输入脚一个默认高电平它不适合拿来供电、驱动 LED、拉动继电器之类的负载。2) 弱上拉的典型用途✅给输入脚提供默认电平比如按键一端接 GND另一端接 GPIO打开弱上拉后不按GPIO 被弱上拉 →读到 1按下GPIO 被按键直接拉到 GND →读到 0✅避免悬空导致乱跳输入脚悬空时会因为噪声随机读 0/1弱上拉/下拉就是为了稳定它。3) 为什么说“要大电流还得外部上拉”因为外部上拉可以用更小的电阻比如 4.7kΩ / 10kΩ3.3V 4.7kΩ电流约0.7mA比内部弱上拉大很多上升沿更快、抗干扰更强、能拉住更“重”的外部电路输入内部弱上拉电流小抗干扰一般对长线、强干扰环境可能不够稳上下拉电阻的控制通过上拉/下拉寄存器控制如下所示PUPDR0[1:0]里的[1:0]表示这个字段field占用 2 个比特从bit1 到 bit0。[高位:低位]是寄存器手册里描述“位范围”的常见写法所以PUPDR0[1:0]两位二进制数bit1、bit0 组成这两位合起来编码含义你截图里那张表00无上拉/下拉01上拉10下拉11保留同理PUPDR3[1:0]不是寄存器的 bit1..0而是“第3组字段也有两位”它在整个 32-bit 寄存器里的位置是bit(231 : 23) bit7:6。记住一句话[1:0]说的是字段宽度2 bit字段在寄存器里的实际位置要看它对应的 bit 范围比如 7:6、25:24 等。中间那张“31…0 的大表”这是位段分布图GPIOx_PUPDR 这个寄存器是 32 位每个引脚用2 位控制所以刚好 16 个引脚 ×2 32 位。表里你看到PUPDR15[1:0]对应 bit31..30PUPDR0[1:0]对应 bit1..0……下面的rw意思是read/write可读可写。3.2 输出模式P-MOS 和 N-MOS 本质都是 MOSFET场效应管区别主要在沟道类型、需要的栅极驱动方向、导通特性以及常见用法高边/低边。1最核心的区别N-MOSNMOS多数载流子电子栅极相对源极为正才导通Vgs Vth → 导通一般导通电阻更小、同尺寸下电流能力更强、价格常更友好P-MOSPMOS多数载流子空穴栅极相对源极为负才导通Vgs −Vth → 导通也可理解为“栅极比源极低”才开一般导通电阻更大同工艺同尺寸下通常不如 NMOS推挽输出开漏输出在 GPIO 里“MOS 导通”≈“强上拉/强下拉”推挽输出push-pull时上面的P-MOS 导通输出被主动拉向 VDD→ 可理解为强上拉下面的N-MOS 导通输出被主动拉向 GND/VSS→ 可理解为强下拉相比之下弱上拉/弱下拉是通过很大的电阻几十 kΩ拉不是用 MOS 管“硬拉”。但别把“强”理解成“无限强”MOS 导通也不是理想短路它有Rds(on)等效导通电阻所以输出高电平并不一定等于 VDD带大电流时会掉一点输出低电平也不一定等于 0V带大电流时会抬一点STM32 每个 IO 口都有最大灌/拉电流限制具体数值看 datasheet所以更准确的说法是MOS 导通 低阻驱动strong drive但受限于导通电阻和电流规格。还有一种情况开漏不是“强上拉”开漏输出open-drain时只有N-MOS那条“强下拉”“上拉”要靠外部电阻或内部弱上拉→ 这时候就不是“强上拉”了输出类型寄存器两种输出模式通过输出类型寄存器控制输出速度寄存器3.3 数据输出端口置位/复位寄存器输出数据寄存器也就是说BSRR寄存器会影响ODR寄存器3.4 复用功能输出端口模式寄存器以上说的输出模式都是通用输出模式复用功能模式的输入输出就是片上的外设来控制IO口了另外复用输出时就是片上外设直接控制输出数据寄存器了ODR不用置位/复位寄存器了。3.5 输入数据寄存器3.6 复用功能输入下面把TTL 电平和CMOS 电平讲清楚它们本质是两套“数字 0/1 怎么判定”的电压门限和对应的输出能力/输入特性。工程里最重要的是能不能互连、需不需要电平转换。1TTL 电平是什么TTL 来自早期5V TTL 逻辑芯片74xx 系列等的标准。它的门限特点是相对固定不太随电源比例变化典型经典 TTL输入低0VIL ≤ 0.8V输入高1VIH ≥ 2.0V输出保证典型输出低VOL ≤ 0.4V输出高VOH ≥ 2.4V注意不一定到 5V特点总结高电平判定门限比较低≥2.0V 就算 1输出高电平不必接近 5V早期 TTL 输入需要一定电流输入特性与老 CMOS 不同2CMOS 电平是什么CMOS 是另一类逻辑家族门限通常跟供电电压VDD 成比例不同系列会有差异但“比例型”是典型特征。常见经验值很多 CMOS/MCU 输入大致如此具体看 datasheet输入低0VIL ≤ 0.3 × VDD输入高1VIH ≥ 0.7 × VDD例如 VDD3.3V低≤ 0.99V高≥ 2.31V特点总结门限随 VDD 变化3.3V 和 5V 的门限不同静态输入电流非常小高阻输入输出高电平通常更接近 VDD“摆幅更满”3.7 模拟输入输出4. GPIO工作模式4.1 输入模式上拉/下拉/浮空4.2 输出模式推挽/开漏上拉/下拉4.3 复用功能推挽/开漏上拉/下拉4.4 模拟输入输出