发表于 2018-8-27 10:05:40

测试一下晶振是否正常工作。我发生过类似的问题,是因为晶振停止导致的。

wenyangzeng 发表于 2018-8-27 10:24:12

linalinb 发表于 2018-8-27 09:50
实验测试不喂狗是可以正常复位,说明配置应该是正确的,我配置的是6秒次溢出,但在车间使用是还会偶尔出 ...

看门狗好像要做到6秒有点困难,楼主不妨缩短时间。2秒差不多了。

linalinb 发表于 2018-8-27 10:27:12

wenyangzeng 发表于 2018-8-27 10:24
看门狗好像要做到6秒有点困难,楼主不妨缩短时间。2秒差不多了。

// 硬件看门狗配置
void IWDG_Config(void)
{
    /* Enable write access to IWDG_PR and IWDG_RLR registers */
    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
    /* IWDG counter clock: LSI/32 */
    IWDG_SetPrescaler(IWDG_Prescaler_64); //40khz/64=0.625khz=1.6ms
    /* Set counter reload value to obtain 250ms IWDG TimeOut.
       Counter Reload Value = 250ms/IWDG counter clock period
                            = 250ms / (LSI/32)
                            = 0.25s / (LsiFreq/32)
                            = LsiFreq/(32 * 4)
                            = LsiFreq/128
   */
    IWDG_SetReload(4000); // 1.6msX4000=6.4s   0xfff is max
    /* Reload IWDG counter */
    IWDG_ReloadCounter();
    /* Enable IWDG (the LSI oscillator will be enabled by hardware) */
    IWDG_Enable();
}
这个配置是6秒多,应该是没错的

wenyangzeng 发表于 2018-8-27 10:29:47

本帖最后由 wenyangzeng 于 2018-8-27 10:34 编辑

linalinb 发表于 2018-8-27 09:50
实验测试不喂狗是可以正常复位,说明配置应该是正确的,我配置的是6秒次溢出,但在车间使用是还会偶尔出 ...

太长延时,看门狗i容易受外部干扰



linalinb 发表于 2018-8-27 10:37:27

安 发表于 2018-8-27 10:05
测试一下晶振是否正常工作。我发生过类似的问题,是因为晶振停止导致的。 ...

这个倒没注意到,说不定真有可能这个原因,不过晶振停振一般会是什么原因造成的呢?难道是干扰造成吗?

linalinb 发表于 2018-8-27 10:42:25

wenyangzeng 发表于 2018-8-27 10:29
太长延时,看门狗i容易受外部干扰

因为程序执行量比较大,执行完整个周期需要4秒左右,为了保险一点就设为6秒,如果看门狗受了干扰就会停吗?还有假设外部晶振停振的话, 会不会影响看门狗的工作呢?

发表于 2018-8-27 10:48:01

linalinb 发表于 2018-8-27 10:37
这个倒没注意到,说不定真有可能这个原因,不过晶振停振一般会是什么原因造成的呢?难道是干扰造成吗? ...

干扰造成的。

wenyangzeng 发表于 2018-8-27 10:55:45

linalinb 发表于 2018-8-27 10:42
因为程序执行量比较大,执行完整个周期需要4秒左右,为了保险一点就设为6秒,如果看门狗受了干扰就会停吗 ...

就是担心那么长的延时,看门狗计数器受干扰失效。

linalinb 发表于 2018-8-27 11:09:50

wenyangzeng 发表于 2018-8-27 10:55
就是担心那么长的延时,看门狗计数器受干扰失效。

有道理,不过设短了就要在其它地方再加喂狗指令了,我担心在其它地方加多了喂狗指令,如果跑飞会更容易被死循环喂狗,因为在客户2班倒生产,产线上24小时长期不停机工作,要求非常严格,不允许出现死机的情况。

wenyangzeng 发表于 2018-8-27 13:26:43

linalinb 发表于 2018-8-27 11:09
有道理,不过设短了就要在其它地方再加喂狗指令了,我担心在其它地方加多了喂狗指令,如果跑飞会更容易被 ...

其实喂狗只放在主循环并不很安全。在所有do{}while()都要放。你不能保证这些do{}while()里会出现何种意外。
页: 1 [2] 3 4
查看完整版本: STM32死机,内部硬件看门狗也不复位