【单片机】如何理解GPIO的配置寄存器?

下面把 5 组"藏在幕后"的寄存器一口气讲透,用"装修房子"来打比方,保证看完就能在代码里一眼认出它们的小动作。


  1. CRL / CRH ------ "户型图+装修许可证"
  • 每 4 bit 管一只引脚,32 bit 正好 8 只脚,于是 CRL 管 0-7 号房,CRH 管 8-15 号房。

  • 4 bit 里又分成两家:

-- MODE:决定这间房"当仓库(输入)"还是"当店铺(输出)";要是店铺,再分 2 M、10 M、50 M 三档"客流速度"。

-- CNF:决定"门窗款式"。

‧ 仓库模式:

00 → 毛坯(模拟输入,ADC 专用,数字部分直接断电)

01 → 敞开式(浮空,高阻,爱咋咋地)

10 → 带弹簧门(上下拉,具体是上还是下由 ODR 那一位说了算)

11 → 保留,别用

‧ 店铺模式:

00/01 → 普通玻璃门(推挽,既能灌电流也能拉电流)

10 → 卷帘门(开漏,想亮灯得自己外挂上拉)

11 → 外挂招牌(复用功能,由片上外设接管)

写错一半字节,比如把 PA8 配成模拟输入,却指望它输出 PWM,等于把店铺门封死还在外面喊"为啥没客人",这就是"串腿"。


  1. BSRR / BRR ------ "遥控电闸,停电也不跳闸"
  • BSRR 低 16 位写 1 → 立刻把对应位置 1(高电平)

高 16 位写 1 → 立刻把对应位清 0(低电平)

写 0 啥事不干,读出来永远是 0

  • BRR 低 16 位写 1 → 也是清 0,高 16 位保留

  • 原子操作:一条 STR 指令搞定,中断插进来也撕不了票。

想象你在 16 个房间同时按开关,别人闯进来也改不了你的"同时"节奏。

  • 实战技巧:

想翻转 LED?直接 BSRR = (1<<5) | (1<<21); // 第 5 脚先置 1,再清 0,一条语句完成"亮-灭"。


  1. LCKR ------ "装修完上封条,谁也别想再砸墙"
  • 开锁序列像老式保险箱:
  1. 写 1 到 LCKR16(钥匙位)

  2. 写 0

  3. 再写 1

  4. 读一次(必须为 0)

  5. 再读一次(变成 1)→ 锁定成功

  • 一旦锁定,对应脚的 CRL/CRH、AFIO remap 全部变成"只读",软件跑飞也改不了。

  • 典型场景:

-- 电机大电流 PWM、逆变桥,万一程序失控把引脚重配成输入,上下桥直通 → boom!

-- 上电初始化完立即 LCKR 上锁,后面即使缓冲区溢出也翻不了浪。


  1. AFIO ------ "户型改造,决定厨房搬到哪一间"
  • STM32 特有,别的厂叫 Pin-Mux、IO-Mux。

  • 关键寄存器:AFIO_MAPR、AFIO_EXTICR1~4

例如 TIM3_CH2 默认在 PB5,但你可以 AFIO_MAPR |= (1<<10); 把它搬到 PC7,PCB 布线立刻从"绕山绕水"变"直通"。

  • 注意:

-- 重映射后原引脚自动变回 GPIO,不会"一脚踏两船"。

-- 部分重映射和完全重映射有区别,别写错位段,否则波形依旧在原脚。

  • 一句话:不翻 AFIO,你焊对芯片也量不到波形,像极了"钥匙找对了门,却开错了单元楼"。

  1. 内部弱上拉/下拉 ------ "免费门弹簧,方向别装反"
  • 仅当 CNF=10(上下拉输入)时有效。

  • ODR 对应位 =1 → 上拉 ≈ 40 kΩ

ODR 对应位 =0 → 下拉 ≈ 40 kΩ

  • 优点:省一颗 10 k 电阻,中断脚、按键脚、I²C 脚都能白嫖。

  • 坑点:

-- 如果忘记配 CNF=10,ODR 那位就是个"幽灵位",看起来写了 1,其实引脚依旧浮空,EMC 一干扰就鬼跳。

-- 开漏输出时,ODR=0 会把脚硬拉到低,ODR=1 则释放,必须外部上拉才能高电平;别把"内部上拉"当成"开漏救命稻草",它只在输入模式下有效!


一句话总结

IDR/ODR 只是"灯泡和开关",真正让房子住得舒服、住得安全的是:

  • CRL/CRH(先给每间房发装修许可证)

  • BSRR/BRR(原子遥控,不怕停电)

  • LCKR(装修完贴封条)

  • AFIO(厨房想搬哪就搬哪)

  • 内部上下拉(免费门弹簧,方向别装反)

把这 5 张底牌全部翻完,再遇到"引脚怎么没反应""中断里被撕裂""电机跑飞炸管"这类玄学问题,你就能像老监理一样一眼指出:

"先查 CRL,再看 AFIO,最后确认 LCKR 是不是上了锁------别在 OD 位上瞎打转!"

欢迎大佬评论!!!

相关推荐
碧海银沙音频科技研究院22 分钟前
实现炬芯ATS308X的usb cdc 串口IAP 固件升级功能实现
人工智能·嵌入式硬件·深度学习·算法
恒锐丰科技林技术员1 小时前
EG1160 高压半桥驱动芯片:高压功率变换的实用驱动方案
经验分享·嵌入式硬件·硬件工程
智购科技自动售卖机厂家2 小时前
双摄像头方案F1-score只有0.85,排查发现是上下视角的融合逻辑写反了~YH
python·单片机·嵌入式硬件·算法·eclipse
llilian_162 小时前
脉冲时间间隔及计数如何精准测试?
功能测试·嵌入式硬件·51单片机·软件工程
路上有只喵2 小时前
认识元器件 · 牛角型电解电容· 规格书解读
嵌入式硬件
weixin_452600692 小时前
高精密运放——D8629
单片机·嵌入式硬件·dc-dc 转换器·水/气表阀门·共享单车锁舌电机
硅基手札3 小时前
SPI技术系列 12 · SPI 设备驱动实战
linux·驱动开发·单片机·嵌入式硬件·mcu·性能优化·系统架构
深圳市青牛科技实业有限公司3 小时前
GC4928|8‑28V 带霍尔三相 BLDC 栅极,OA 设备专用驱动芯片
单片机·嵌入式硬件
国科安芯3 小时前
开放指令集的空间之路:RISC-V微控制器在商业航天中的生态价值与自主性评述
嵌入式硬件·mcu·risc-v·低轨卫星·商业航天·抗辐射
Yiran_G3 小时前
从模组接口到平台解析:ZigBee通信正常但数据异常的逐级排查指南
嵌入式硬件·物联网·智能家居