STM32F103看门狗使用记录


看门狗分两种

1.独立看门狗,IWDG

只是简单的设置一个数,然后递减,减到0之前,还没有喂狗,狗就死了,系统重启。

没有中断。只有自己代码里去喂狗。

频率是内部时钟40K,可以分频。


2.窗口看门狗,WWDG

频率是PLCK1 我这是36M最多8分频,然后呢除以4096,就是WWDG的时钟


有个2个值比较重要,

1.一个是窗口值,W,在这个值之前不能喂狗,喂了狗就撑死了,reset。

2.一个是临界值,0x3F到这个值还没喂狗,狗就饿死了,reset。

我也不知道为什么设置是0x3F,挺奇怪的,为什么不设0x00?

WWDG有一个中断函数HAL_WWDG_WakeupCallback,在倒计时到0x40的时候会掉这个,你得赶紧Refresh一下。


这些都是基本的,我搞的时候遇到2个问题:

1.

一个是Hal库版本的问题,HAL库升级到1.6版本后WWDG只有init函数,没有StartIT接口了,不知道是不是Bug,还是ST有新的用法,折腾我半天。后来我退回到1.4版本就OK了,但是新版本的Cube用就版本的HAL库竟然也有Bug,哎。无语。

2.

我自己项目需求是,板子USB通信,然后将内容与I2C进行读写,但是当接线不当的时候(比如没有接GND),I2C会挂掉,Systick不更新,然后就While死循环了,板子也就挂掉了,所以我就用了一个看门狗。

然后我发现就算这样也不行,好像USB的中断级别比WWDG高(在Cube里设的时候是一样都是0),USB当数据量大的时候,只用中断喂狗,来不及,所以特别容易死机。

后来我把窗口值设成126,每次刷新就刷到125,在我自己的逻辑代码里也增加了喂狗程序,然后就OK了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值