某些STM32芯片在开启看门狗后仿真到断点处看门狗不会停止计数导致程序复位的问题
我在使用STM32F767和STM32F407VG的时候,程序跑到断点处一会儿程序就复位了,关闭看门狗不出现这种问题。
解决方法(在初始化看门狗之前添加下面代码):
#define DBGMCU_APB1_FZ_REG (*(__IO uint32_t*)0xE0042008) #define IWDG_HALT_DISABLE() (DBGMCU_APB1_FZ_REG |= (1<<12)) void main() { ..... IWDG_HALT_DISABLE(); IWDG_Init(IWDG_PRESCALER_64,1000); ..... }
问题原因:我通过参考手册,确认问题出在了DBGMCU寄存器的DBG_IWDG_STOP位,这个位的作用是调试模式时内核停止(断点)看门狗计数是否停止,内容如下。
我在KEIL中查看该寄存器状态发现这个位置零了,而在STM32F407VE的仿真中该位是置高的(正常情况),因为STM32F407VG被置零了所以才会出现这种情况,具体为什么这个芯片会这样,我还没有找到原因,如果有网友知道请告知,感激不尽!