当前位置: 首页 > news >正文

STM32 复用功能(AF)配置的常见误区

问题

USART 配好了、SPI 也配好了,代码调了HAL_UART_Transmit但引脚没波形,示波器量是 0V 或 3.3V 不动。

大概率:GPIO 没有配置成对应的复用功能(AF)。

什么是复用功能

STM32 的每个 GPIO 引脚可以干很多事:

PA9 可以是: - 普通 GPIO 输出 - 普通 GPIO 输入 - USART1_TX(复用 AF7) - TIM1_CH2(复用 AF1) - SPI2_SCK(复用 AF5)

想让引脚做 USART 的 TX,需要在 GPIO 寄存器中选择对应的复用号

典型错误

错误一:配成了普通输出

// ❌ CubeMX 里 PA9 选 GPIO_Output // 然后代码里 HAL_UART_Transmit... // 引脚只能手动高低,UART 外设控制不了它

错误二:复用号选错了

CubeMX 自动配对的,不会错。但如果你手写寄存器:

// ❌ 想配 USART1_TX(AF7),却写成了 AF1(TIM) GPIOA->AFR[1] |= (0x01 << 4); // AFRH 的 bit 4~7 = 0001 → AF1 // 实际上应该写 0111(AF7) // ✅ 正确做法——先清零再赋值: GPIOA->AFR[1] &= ~(0x0F << 4); // 先清零目标字段 GPIOA->AFR[1] |= (0x07 << 4); // 再写入 AF7

CubeMX 里的操作

选中 PA9 → 选USART1_TX(不是 GPIO_Output)→ CubeMX 自动配好 AF。

验证:在 Pinout 视图里,PA9 旁边会显示USART1_TX字样,引脚颜色也会变成复用功能的绿色。

常用复用功能速查

外设引脚AF 号AF 名称
USART1_TXPA9AF7AF7_USART1
USART1_RXPA10AF7AF7_USART1
SPI1_SCKPA5AF5AF5_SPI1
SPI1_MOSIPA7AF5AF5_SPI1
I2C1_SCLPB6AF4AF4_I2C1
I2C1_SDAPB7AF4AF4_I2C1
TIM2_CH1PA0AF1AF1_TIM2
TIM3_CH3PB0AF2AF2_TIM3

每个引脚的可用 AF 怎么看:

方法一:CubeMX 点中引脚,弹出的菜单只显示可用的功能。

方法二:查 STM32F407 的 datasheet(不是参考手册)→ Pinouts 章节 → 那几张巨大的引脚功能表。

代码层面验证

初始化后检查寄存器:

// 检查 PA9 的 MODER uint32_t moder = (GPIOA->MODER >> (9 * 2)) & 0x03; printf("PA9 MODER = %lu (2=Alternate)\r\n", moder); ​ // 检查 PA9 的 AFRH uint32_t afr = (GPIOA->AFR[1] >> ((9 - 8) * 4)) & 0x0F; printf("PA9 AF = %lu (7=USART1)\r\n", afr);

如果 MODER 不是 2(Alternate Function)或者 AF 不是 7,引脚就起不到 USART1_TX 的作用。

总结

一句话
GPIO 要做外设功能,必须配成Alternate Function + 正确的 AF 编号
CubeMX 会自动配好,不要手动改成 GPIO_Output/Input
如果怀疑引脚功能不对,读 MODER 和 AFR 寄存器确认
http://www.jsqmd.com/news/1176435/

相关文章:

  • SpringBoot 整合 Logback——日志框架从配置到实战
  • 2026年公众号迁移线上公证处挑选指南 - 跑政通
  • 需求评审被否:Demo 跑通只是入门,权限日志才是 Java 后端转 AI 的生死线
  • 深圳 IC 电子料回收|深圳市鑫鼎程科技|正规再生资源回收 - 品牌优选官
  • 5个高级技巧:如何深度定制Android Root检测库RootBeer
  • 杭州积家回收价格查询和各大回收平台实测排行(2026年7月最新) - 嘉价奢侈品回收平台
  • 如何系统学习AI视觉:从基础概念到实战应用指南
  • OpenToonz动画制作终极指南:从零开始掌握专业级2D动画创作
  • AI排名优化公司哪家好?2026年五家实力派服务商深度横评 - GEO优化
  • 构建企业级容器运行时元数据安全防护的完整解决方案
  • GhostTrack:三合一开源追踪工具,掌握数字世界的蛛丝马迹
  • AIGC 检测到底怎么判断一段话是不是 AI 写的?搞懂机制才知道怎么降 - 我要发一区
  • 2026年7月最新济南宇舶官方售后维修服务网点地址与客服电话 - 亨得利官方服务中心
  • 深度解密:如何高效掌握npx skills实战,解锁AI助手无限潜能
  • 应对数据隐私与网络依赖挑战:Argos Translate本地化翻译引擎的架构实践
  • 3个实战技巧深度解析Kimi CLI:如何让AI成为你的终端搭档
  • FMOD Studio GDExtension跨平台部署指南:Windows、Linux、Android和iOS
  • 如何快速加入Phira社区:新手贡献者的完整入门指南
  • 伯爵中国官方售后服务中心|最新地址及官方客服热线权威信息声明(2026年7月更新) - 亨得利钟表维修中心
  • Swift Metrics与OpenTelemetry集成:构建跨语言可观测性平台的完整指南
  • Webots机器人仿真进阶指南:5个技巧打造高精度物理场景
  • 3步实现浏览器AI革命:Page Assist让你的本地模型变身智能助手
  • 解锁Windows远程桌面限制:RDPWrap配置文件让多用户同时登录成为现实
  • 【Bug已解决】openclaw TLS certificate validation failed — OpenClaw TLS 证书验证失败解决方案
  • 终极指南:Arnis自定义存储路径功能如何彻底解放您的Minecraft世界管理
  • 「旺季攻略」敦煌私人订制TOP5口碑验证:专业机构认证与学生党优选实测推荐 - 互联网科技品牌测评
  • Visual Studio Code深度解析:现代代码编辑器的架构设计与扩展开发指南
  • 终极音乐扒谱指南:noteDigger让你的创作灵感瞬间成谱
  • 如何为 NuvioMobile 开发自定义插件:Stremio 生态系统扩展教程
  • 实战指南:如何高效使用Fast-FoundationStereo实现实时零样本立体匹配