近期,我们团队使用APM32F003F6P6芯片进行小型项目开发。项目前期调试阶段一切正常,于是我们决定进行20块PCB的小批量测试。
在这20块测试板中,有19块表现正常。然而,有1块板子展现出异常行为。预期中,根据程序代码,板上LED灯应为常亮状态。但该板子的LED灯却持续闪烁,功能表现也不稳定,这让我们觉得像是芯片处于持续复位状态。
经过深入测试和对比,我们发现问题确实出在这一块芯片上。相同的代码和硬件环境下,仅有这一块芯片表现出持续复位的问题。通过进行对比测试,我们初步推断问题与芯片自身有关。
我们认为可能的复位原因有两个:静电放电(ESD)或看门狗(WDT)。考虑到该问题板子是裸板,并未接入高电流或高电压,因此ESD的可能性较小。因此,问题更可能是由于看门狗导致的复位。
为验证这一点,我们尝试关闭了看门狗功能。关闭后,发现问题芯片开始正常工作。这一结果让我们确定,问题确实是由看门狗导致的复位。
在使用APM官方提供的库函数进行配置时,我们注意到一个细节。看门狗的喂狗值并不是固定的,而是根据LIRC的频率动态计算得出的。由于LIRC的精度本身不高,我们怀疑是重载值溢出,导致喂狗时间过短,从而引发了看门狗复位。
通过参考APM32F003的手册,我们注意到重载值是8位的。然而,在实际测试中,读取的重载值却超过了255。这个发现使我们确信是重载值溢出,导致喂狗时间显著缩短。
为了解决这个问题,我们决定将重载值固定设定为255。经过一轮测试,结果显示问题已得到解决。这一修改确保了芯片能够在预定的条件下正常工作。
|