完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我反复观察到,将正在运行的看门狗上的看门狗预分频器从 16 降低到 4 通常会导致看门狗计数器最终停止递减。我假设发生这种情况是由于将预分频器值降低到内部预分频器计数器值以下。有时它可以减少并保持运行。
无论如何,我在参考手册中找不到任何说明不要更改预分频器。IT 也是一种有意(或无意)阻止看门狗运行的解决方法! 我的代码设置正确,窗口看门狗完全按预期工作。只有当减少预分频器以减慢看门狗速度时,它才会变为并发出。如在调试器和我的调试打印输出中所见,递减计数器停止递减。如果递减计数器停止,则不会发生看门狗中断。 |
|
相关推荐
1个回答
|
|
在准备演示此问题发生的示例时,我偶然发现了正在发生的事情,这是有道理的。当它的预分频器改变时,看门狗计数器确实会停止倒计时,但不会永远停止。如果您使用的是窗口功能,则很可能足够长以导致计时问题和看门狗重置。
想象预分频器是一个递减计数器,每次达到零时它都会递减看门狗定时器,然后将其自身重置为预分频器值 (-1)。因此对于 16 的预分频因子,它每 16 个时钟计数递减一次看门狗计数器。现在,假设此预分频器计数器为 15,而您将预分频器值减小为 4。您期望看门狗计数器现在每四次计数递减一次。但是,对于第一个周期,预分频器必须一直计数到零,因此在看门狗计数器第一次递减之前需要 15 个时钟。在此期间,看门狗计数器保持恒定值。仔细想想,确实有点明显,没有影子寄存器的标准定时器行为。 在我的例子中,这额外的 11 个计数相当于 5.5 毫秒。如果不使用窗口函数,这实际上不是问题。预期的看门狗重置可能需要更长时间的风险。如果使用窗口函数,那么您将依靠另一个计时器(可能基于滴答计数)让您知道自上次踢球以来是否已经足够长以允许再次踢球。所以,你踢狗,并认为你不能再踢它 10 毫秒,但它因预分频器的变化而停滞了 5.5 毫秒。所以,当你在 10 毫秒后去踢它时,它还没有倒数足够,你把它踢进了窗口,然后 BOOM! 我附上了一个最小示例(STM32H753ZITx 和 STM32CubeIDE),展示了这种情况以供将来参考。如果您在行 wdogslowed = 1 上放置一个断点,然后在命中后,在行 155 lastWDogKickTime = now 上放置一个断点,那么您可以在 SFR 视图中看到 WWDG CR 计数器没有递减。最终你会看到它再次开始减少。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2718 浏览 1 评论
3235 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1807 浏览 1 评论
3645 浏览 6 评论
6033 浏览 21 评论
1334浏览 4评论
208浏览 3评论
195浏览 3评论
对H747I-DISCO写程序时将CN2的st-link复用为usart1,再次烧录时无法检测到stlink怎么解决?
348浏览 2评论
STM32G474RE芯片只是串口发个数据就发烫严重是怎么回事?
440浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 09:15 , Processed in 1.073893 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号