单片机iwdg实验

发布时间:2026/5/27 2:23:02

单片机iwdg实验 单片机STM32F407开发板DMF407电机开发板平台keil V5.31HSE 为8MHZHSI为16MHZIWDG的时钟是32K配置IWDG_HandleTypeDef iwdg_handler; /* 独立看门狗句柄 */ /** * brief 初始化独立看门狗 * param prer: IWDG_PRESCALER_4~IWDG_PRESCALER_256,对应4~256分频 * arg 分频因子 4 * 2^prer. 但最大值只能是256! * param rlr: 自动重装载值,0~0XFFF. * note 时间计算(大概):Tout((4 * 2^prer) * rlr) / 32 (ms). * retval 无 */ void iwdg_init(uint32_t prer, uint16_t rlr) { iwdg_handler.Instance IWDG; iwdg_handler.Init.Prescaler prer; /* 设置IWDG分频系数 */ iwdg_handler.Init.Reload rlr; /* 从加载寄存器 IWDG-RLR 重装载值 */ HAL_IWDG_Init(iwdg_handler); /* 初始化IWDG并使能 */ } /** * brief 喂独立看门狗 * param 无 * retval 无 */ void iwdg_feed(void) { HAL_IWDG_Refresh(iwdg_handler); /* 喂狗 */ }主函数int main(void) { HAL_Init(); /* 初始化HAL库 */ sys_stm32_clock_init(336, 8, 2, 7); /* 设置时钟,168Mhz */ delay_init(168); /* 延时初始化 */ led_init(); /* 初始化LED */ key_init(); /* 初始化按键 */ delay_ms(100); /* 延时100ms再初始化看门狗,LED0的变化可见 */ // iwdg_init(IWDG_PRESCALER_64, 500); /* 预分频数为64,重载值为500,溢出时间约为1s */ iwdg_init(IWDG_PRESCALER_64, 1000); /* 预分频数为64,重载值为1000,溢出时间约为2s */ LED0(0); /* 点亮LED0(红灯) */ while(1) { if (key_scan(1) KEY0_PRES) /* 如果KEY0按下,则喂狗,支持连按 */ { iwdg_feed(); /* 喂狗 */ } delay_ms(10); } }超时时间的计算Tout (4 × 2^PR × RLR) / LSI_freq‌其中 PR 0~6对应分频 4/8/16/32/64/128/256RLR 0~409512位。但是在开启独立看门狗后进行Debug调试最常见的问题是‌程序在断点处暂停后CPU停止运行无法喂狗但独立看门狗的时钟仍独立运行计数到零后会触发系统复位导致调试中断‌。对于STM32只需修改调试模块的配置位进入调试状态后在调试模块的DBG寄存器中将DBG_IWDG_STOP位置1即可让独立看门狗在CPU暂停时停止计数不会触发复位。修改后的代码int main(void) { HAL_Init(); /* 初始化HAL库 */ sys_stm32_clock_init(336, 8, 2, 7); /* 设置时钟,168Mhz */ delay_init(168); /* 延时初始化 */ led_init(); /* 初始化LED */ key_init(); /* 初始化按键 */ delay_ms(100); /* 延时100ms再初始化看门狗,LED0的变化可见 */ // iwdg_init(IWDG_PRESCALER_64, 500); /* 预分频数为64,重载值为500,溢出时间约为1s */ iwdg_init(IWDG_PRESCALER_64, 1000); /* 预分频数为64,重载值为1000,溢出时间约为2s */ LED0(0); /* 点亮LED0(红灯) */ /* 在初始化代码中调用通常在 main 函数开头或调试初始化部分 */ __HAL_DBGMCU_FREEZE_IWDG(); while(1) { if (key_scan(1) KEY0_PRES) /* 如果KEY0按下,则喂狗,支持连按 */ { iwdg_feed(); /* 喂狗 */ } delay_ms(10); } }debug时候与运行时一样2s会重启一次。但停止在一个断点上时不会再重启。

相关新闻