
问题描述:
某客户反馈, 当 MCU 频繁的正常通断电的时候。FLASH 被异常改写,出现各种各样的异常(整片别擦除、中断向量表被改写为 0、写保护被清掉、被加上读保护 ……..)
问题调研:
首先跟客户沟通:
• 他们是延续之前的项目,进行的一些软硬件简单修改。之前的项目没有出现过类似的问题。
• 确认通断电的时间是足够,就是说他们断电后所有的 VDD 都回到 0.上电的时序也是正常。
• 原理图确认这是 follow 了我们的参考设计。
• 测量工作时的电压,只是发觉他们上电时会有一些抖动,其它一切正常。尝试让他们改善上电电路,去掉这一抖动,再次实验,仍然出现类似的问题。
到这里似乎跟硬件没有任何的问题了, 接着让客户代码进行删减又做了如下实验:
1, 去掉能 APP 部分代码,仅仅留下 IAP 代码。做相同的实验,问题再现。
2, 进一步删减程序,客户去掉程序中所有跟 flash 以及 OPTION BYTE 相关的部分,做相同的实验,问题再现。
3, 没招,再删,最后仅仅留下下面程序:



客户反应只要掉用了 delay_init 函数就会出问题,不调用就不会出问题(仅仅做了一天的实验)。到这里似乎跟我们的软件有关系了,我们进一步分析发现他们改写了我们的 systick 的 config 函数,那么我就做下一个实验。
4, 改为标准库中的 systick 例程,去掉写保护,加一个 GPIO 定时翻转程序。同时在烧录之后,加上写保护,做相同的实验,问题再现。
5, 到这里我们都怀疑是芯片真的有损伤了,我们再做了一个实验用 cubemx 生成了一个 GPIO 翻转和 systick 的延时,做相同的实验,问题再现。

从上面规格书来看,如果我们关断 mcu 内部的复位电路,需要在外部接一个复位信号保证 VDD 达到正常工作电压之前一直使 MCU 处于复位状态。
解决办法:
问题找到后解决办法就很简单,去掉 R48 这个 1k 欧姆的电阻,重做实验,再没有发现问题。
结论:
其实在之前我们的另外一个西安的客户发生过频繁上电不工作的情况。他们也是使用了就得数据手册,没有把 PDR_ON 脚拉到 VDD 所致。
对于 ST MCU 来说,这个 PDR_ON 引脚有的封装是被引出来了,有的封装没有引出,如果没有引出的是默认使能内部复位功能,如果引出的话,大家也要当心有的型号是拉低使能内部复位;有得是拉高使能内部复位。所以在检查电路时一定要当心。
来源:www.21ic.com