
问题:/ z3 I! S5 ^; G% O1 B 该问题由某客户提出,发生在 STM32F207VET6 器件上。6 T' Q, c, ^$ A9 Q2 m- j 据其工程师讲述:部分芯片无法通过拉低 NRST PIN 产生复位。该现象一旦上电复位后无法重现。 X R2 P4 t1 N" ^/ X# y& ^ 客户的应用中通过外部硬件看门狗定时给 NRST PIN 送低电平产生复位。正常情况下,MCU 会给外部硬件看门狗喂狗。 7 t! ?) D3 N9 H4 S. v; q$ o# c 调研:7 g$ L& a0 r! S! ]7 W4 { 拉低 NRST PIN 产生复位是一种常用的复位手段。由于复位电路是在芯片内部,因此复位时的动作仅仅需要将 NRST PIN 拉低并持续一段时间然后释放为高即可。持续时间在数据手册中有说明,参见参数VNF(NRST)。 而 NRST 引脚硬件连接也非常简单,只需一个 0.1uF 电容接到地即可;MCU 芯片内部具有上拉电阻。检查其 NRST PIN 硬件电路,没有发现重大的问题。进一步检查其他外围电路,也未发现重大问题。$ v; z @9 u' ]5 ~5 b 由于客户坚持不能掉电再上电,因此无法通过重新烧写测试代码来进行调试。 考虑到在客户的应用中使用了外部振荡器 HSE,因此用示波器观测振荡器引脚上的波形。观测结果表明振荡器波形呈周期性;进一步观测 NRST 引脚波形,发现 NRST 引脚波形也呈周期性,且周期和 HSE 引脚波形吻合。测量 NRST 引脚波形周期,发现其与外部看门狗的复位周期相同。 由于 STM32F207 在上电后的默认配置是使用 HIS 而不使用 HSE,所以 HSE 引脚上的波形一定是在程序中打开了 HSE 后才产生的。至此可以得出结论,MCU 在 NRST PIN 的控制下能够正常产生复位并且 MCU 正确的运行了代码。 / \* I8 K2 { \% e( |! d. Z* k 结论: 通过以上的测试分析可以得知,该问题并非如客户描述是由 NRST 无法复位造成的,而恰恰是 MCU 的NRST 引脚能够正常复位芯片。" Z% C* U9 |( ` 4 B0 ~. o w$ y9 F 6 V7 O/ J6 j6 \1 ] p 处理:( u/ t- j6 Z9 O4 e# q5 Y; \0 ]) b 根据上述分析,进一步查找原因。最终确定是 MCU 在与外部器件通讯时,外部器件状态异常从而导致MCU 一直等待;而程序中没有对此情况进行处理从而导致外部看门狗复位 MCU。解决办法是在程序中增加异常状态处理同时进一步检查外部器件的使用要求。* L3 K- X9 {* [, W; @8 l7 M+ T8 y 建议:5 w# j4 p4 O3 w: t0 b 1) 描述问题应准确。以本例来说,NRST PIN 不能复位芯片和芯片复位后运行没有产生预期结果是两个完全不同的概念。准确地描述问题是解决问题的第一步。 2) 关于 STM32 和 STM8,对于硬件的基本要求并不多。通过检查这些基本配置,配以简单的测试代码(例如 IO 翻转),可以确定硬件平台是否能够工作。这可以为后续调试打下一个基础。 3) 以下对 STM32/STM8 的硬件基本配置进行简单说明。 - 首先是检查电源部分。 一般来说,一是要保证电源在正常工作范围以内;其次是检查一下电源部分的去耦电容是否都已经加上。" V- h* R5 \% c5 ` 对于 STM32 来说,在数据手册里有一节是“Power supply scheme”,这里给出了如何配置电源去耦电容的说明。下图选自 STM32F20xxx 数据手册:7 q' K- f$ ]. x. z' O* K& g ; N6 ?4 T' Z0 Y2 P8 N2 S ![]() ( V+ q- O' E6 ?7 i1 O1 U+ l 注意关于此图的说明也需要加以注意。例如在 STM32F103x8/B 的数据手册中有以下注释:- {2 t- ~. x3 b( @; @ “Caution: In Figure 13, the 4.7 µF capacitor must be connected to VDD3.”这些说明随着器件不同可能有变化,因此要加以核对。8 ]" T4 e" v/ }4 _- \: P [1 Q1 f8 y - 对于 STM8,数据手册中没有类似的说明。一般来说,电源上多是并联一个大电容和一个小电容起到去耦的作用。例如在 STM8A/128-EVAL 板上,使用了一个 10uF 和一个 10nF 电容;或者,至少要有一个小去耦电容。例如,在 STM8SVLDISCOVERY 板上,则使用了一个 100nF 的电容。 - VCAP 引脚。 在 STM8A/S 上,有 VCAP 引脚;在 STM8L 上则没有此引脚。/ A6 E- r- c' m" n 在 STM32 上,不同的产品不同。例如 STM32F2 有 VCAP 引脚,而 STM32F1 没有 VCAP 引脚。" ]) z, n- w) g" x 对于具有 VCAP 引脚的器件来说,必须按照手册说明添加 VCAP 电容。# h m2 I* y2 n 例如对于 STM32F2,VCAP 电容是 2.2uF;而对于 STM8S/A 来说,VCAP 可以是 470nF~3300nF。一般来说,考虑到电容容值的偏差,这个电容可以加大一点,例如 1uF 或者 680nF。 - NRST 引脚。* M: X; A0 f: i& |) f4 |+ M* _ STM32/STM8 的 NRST 引脚都具有内部上拉,因此复位电路比较简单。去耦电容参见相应数据手册中的说明。下图选自 STM32F103x8/B 数据手册。 ![]() - Boot0/1 对于 STM32 来说,Boot0/1 是选择启动模式的引脚。根据需要,将它们通过一个电阻(例如STM3210E-EVAL 板上使用了 10Kohm)接到 H/L 即可。9 t& k* ~! m4 z6 v 需要注意的是,有些产品的 Boot1 是引脚,而有些产品的 Boot1 是 option byte。 - 振荡器设计 振荡器设计参考 AN2867:* M; T* J [) \" ]# _: y 此外还需要核对相应器件的勘误手册看有无说明。 由于 STM32/STM8 在复位后默认是使用 HSI 作为时钟,因此在调试时可以先使用 HSI 看是否能运行起来。即先看平台是否工作,需要时再看 HSE 是否工作。 - 对于 STM8 来说,有一点要特别注意:IO 上电不能早于电源上电。否则有可能导致器件不能正常启动。 - 硬件检查完毕后,可以通过一个测试代码(例如 IO 口翻转)来查看平台是否可以工作。要注意的是 STM32/STM8 大部分 IO 口复位后默认是 Input floating 状态,因此要在程序中设置成输出状态。6 E. [. j* N; S/ Y% C : }2 F4 m( Y. |9 U0 S |
STM8自学笔记(推荐STM8很好的入门电子书)
基于STM8的DALI (数字可寻址调光协议)
分享STM8 风驰光盘的资料,是完整的(包括原理图+例程+PDF注释)
《无刷直流电机控制应用 基于STM8S系列单片机》
STM8S库函数中文参考 小软件
【资料分享】STM8L的智能手持血糖监测设备的源码
基于STM8S207工程模板
【培训资料】STM8系列PPT培训资料
STM8S 直流电机例程及相关资料
无刷直流电机控制应用+基于STM8S系列单片机---电子书