Skip to content

第 1 章 · 4 读手册的能力

1.4.0 引子:芯片也有 bug,而且官方认

软件有 bug,你认;芯片有 bug,很多人没想过。硅片流片一次成本惊人,设计上的小缺陷没法像软件那样发个补丁就改——只能改下一版硅片。那已经卖出去的这版怎么办?ST 的做法是:写进 errata,告诉你「这地方别这么用,变通办法是这样」

所以 errata(ES096)就是 ST 给自家芯片发的「召回公告」——不是召回芯片,是召回你的某些用法。


1.4.1 errata 长什么样

ES096 结构很清晰:

  • 开头一张 Summary 表:每个 bug 编号、一句话标题、它出现在哪些硅片版本、状态码;
  • 后面逐条详述:Description(这个 bug 具体什么表现)+ Workaround(变通办法,或「无变通」)。

状态码四个,记住含义:

  • A:有变通方案;
  • P:部分变通(只能减轻,或对部分场景有效);
  • N:无变通;
  • -:该版本无此问题。

1.4.2 「硅片版本」是个关键概念

同一个 STM32F103C8T6,不同批次可能对应不同的硅片版本号(silicon revision),ES096 里列出了 A / B / Z / Y / X / 1 / 2 / 3 等好几版。版本不同,中招的 bug 也不同。你手头那颗芯片是哪一版?可以用调试器读 DBGMCU_IDCODE 寄存器里的 REV_ID 字段查出来。

1.4.3 三个真实的坑(只点名,不展开)

随便举几条 ES096 里记录在案的,感受一下:

  • 2.1.1:一条叫 LDRD 的指令,如果在执行中被中断,基址寄存器可能出错(状态 A,有变通)——影响中断密集的代码;
  • 2.6.7:通用定时器想做 100% 占空比的 PWM 会有问题(状态 N,无变通)——你要是正好需要满占空比输出,这是个死坑,得换实现方案;
  • 2.2.9:与较新版本的编译器有兼容问题(状态 P,部分变通)。

踩坑提醒:debug 一晚上没结果、明明配置全对行为就是怪——先去 errata 搜关键词。很多「玄学」其实是官方记录在案的硅片缺陷,变通办法白纸黑字写在 ES096 里,比你重新啃一遍 RM0008 管用一百倍。强烈建议项目选定芯片后,把 errata 通读一遍,标出和你项目相关的坑。


1.4.4 要点

  • errata 是 ST 自认的芯片 bug 清单(「召回公告」),最该被新手看见、却最常被忽视
  • 每条 bug 带 A / P / N / - 状态码;不同硅片版本中招的 bug 不同(读 DBGMCU_IDCODE 查版本)。
  • 玄学问题先查 errata,再 debug;项目初期通读一遍标坑。

参考说明:参考 ST 官方 errata ES096 Rev 15(2022),仅作理解线索与条目指路;本文为结合自己理解重新整理的学习笔记,不涉及对原文档的复制或翻译。

7c8f671 · 7c8f671 · 2026-07-04