完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
程序开启了WWDG的Early wakeup(EWI)中断,在中断中喂狗,但系统不停地复位。
HCLK=72MHz, PCLK1=4.5MHz, PCLK2=72MHz 程序如下: 不过只要去掉RCC_PCLK1Config(RCC_HCLK_Div16)这句话,让PCLK1回到默认的36MHz,系统就不再复位了。 于是配置DBGMCU_Config(DBGMCU_WWDG_STOP, ENABLE),设置调试时WWDG暂停。然后打开ST-Link调试,发现系统复位前WWDG_IRQHandler中断函数连续执行了两次,第一次执行时T=0x40,正常喂狗,紧接着又再次重入了中断,T=0x5e,这个时候喂狗就引发了系统复位,因为此时计数值T》窗口值W。 问题的原因找到了,这是因为程序的执行速度(HCLK)太快,而中断标志位EWIF的清除需要一定的时间(PCLK1),前者的速度是后者的16倍,虽然在中断函数里面调用了清除中断标志位的函数,但是到了中断执行完毕后EWIF都还未来得及清除,所以中断又再次重入了,第二次喂狗就引发了系统复位。 解决办法就是,清除标志位后等待一下标志位真正清除,然后再喂狗,退出中断。保证中断只执行一次。 当HCLK=2*PCLK2时不需要等待,因为标志位的清除速度能够跟得上中断的执行速度。 程序一开始的时候就在RCC中打开了WWDG外设的时钟,这时WDGA=0,窗口看门狗未启用但处于空转状态,EWIF的置位规律如下: 在一个计数周期内EWIF会自动置位两次。但在窗口看门狗启动之前(WDGA=0),即使打开了EWI中断,也不会进入中断函数WWDG_IRQHandler执行。只有WDGA=1且EWIF=1时才会触发中断。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1927 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1698 浏览 1 评论
1180 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
779 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1745 浏览 2 评论
1984浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
820浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
268浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
633浏览 3评论
637浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-31 17:48 , Processed in 0.836184 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号