STM32的看门狗原理和示例代码

看门狗基础:
stm32微控制器上的看门狗主要有两种类型:独立看门狗(iwdg)和窗口看门狗(wwdg),这两者都是用于监控系统运行状态的机制,但它们在实现和应用上有一些区别:独立看门狗(iwdg):
iwdg是一个定时器,其计数器在启用后开始递增。在程序中,你需要定期喂狗(通过向iwdg的寄存器写入特定的值),以防止看门狗超时。否则,如果超过了预定的时间,系统将被认为是失效的,iwdg将生成复位信号,导致系统重启。
窗口看门狗(wwdg):
wwdg是一种更灵活的看门狗类型,允许设置时间窗口。wwdg的计数器在启用后开始递增,但与iwdg不同,wwdg的计数器可以在一个特定的窗口内进行喂狗。这个时间窗口由上限和下限值确定。如果在窗口内喂狗,系统被认为是正常的。如果超出窗口或在窗口内未喂狗,wwdg将生成复位信号,导致系统重启。
在stm32微控制器中,启动看门狗有几种方式,具体取决于使用的是独立看门狗(iwdg)还是窗口看门狗(wwdg)。
 启动独立看门狗(iwdg)的方式:通过写入寄存器:配置iwdg的预分频器和重装载寄存器,并在启用iwdg后,定期写入iwdg_kr中的特定值(例如0xaaaa),以喂狗。 hal_iwdg_refresh(&hiwdg); // 喂狗
通过stm32cubemx和hal库:在cubemx中启用iwdg并生成代码,hal库提供了相应的api来初始化和刷新iwdg。
 启动窗口看门狗(wwdg)的方式:通过写入寄存器:配置wwdg的计数器窗口上下限值,使能wwdg,并在程序中定期写入wwdg_cr中的特定值(例如0x7f),以喂狗。 hal_wwdg_refresh(&hwwdg); // 喂狗
看门狗相关寄存器:
 在stm32微控制器中,看门狗(iwdg和wwdg)的控制和配置主要通过特定的寄存器完成。以下是关键的看门狗寄存器:
 独立看门狗寄存器(iwdg):iwdg_kr(0x40003000+0x00):写入特定的值(0xcccc)来启动或重新加载独立看门狗。
iwdg_pr(0x40003000 + 0x04):
预分频器寄存器,用于设置iwdg的时钟源的分频系数。
iwdg_rlr(0x40003000 + 0x08):重装载寄存器,用于设置iwdg的超时值。当iwdg倒计数到0时,会生成复位信号。
iwdg_sr(0x40003000 + 0x0c):状态寄存器,用于指示iwdg的状态,如是否在运行。
 窗口看门狗(wwdg):wwdg_cr(0x40002c00 + 0x00):控制寄存器,包含使能wwdg的位和计数器窗口值的设置。wwdg_cfr(0x40002c00 + 0x04):配置寄存器,包含wwdg的分频系数和计数器窗口的设置。wwdg_sr(0x40002c00 + 0x08):状态寄存器,用于指示wwdg的状态,如是否在运行。
wwdg_cr (0x40002c00 + 0x0c):窗口寄存器,用于设置wwdg的计数器窗口值。
看门狗寄存器代码:
                                     #include stm32f4xx.hvoid iwdg_configuration(void);void delay(__io uint32_t ncount);int main(void){ iwdg_configuration(); while (1) { // 定期喂狗 iwdg->kr = 0xaaaa; // 你的主要代码 // ... // 延时,模拟主循环的执行时间 delay(500000); }}void iwdg_configuration(void){ // 使能iwdg时钟 rcc->apb1enr |= rcc_apb1enr_iwdgen; // 设置iwdg的时钟源为lsi(低速内部时钟) rcc->csr |= rcc_csr_lsion; while ((rcc->csr & rcc_csr_lsirdy) == 0); // 配置iwdg的预分频器和重装载寄存器 iwdg->kr = 0x5555; // 使能对iwdg_pr和iwdg_rlr寄存器的写操作 iwdg->pr = iwdg_prescaler_256; // 预分频器,配置iwdg的时钟 iwdg->rlr = 4095; // 超时时间,根据需求调整 // 启动独立看门狗 iwdg->kr = 0xcccc;}void delay(__io uint32_t ncount){ while(ncount--) { }}
看门狗hal库代码:
                                                                           #include main.h#include stm32f4xx_hal.hiwdg_handletypedef hiwdg;void systemclock_config(void);static void mx_gpio_init(void);static void mx_iwdg_init(void);int main(void){ hal_init(); systemclock_config(); mx_gpio_init(); mx_iwdg_init(); while (1) { // 定期喂狗 hal_iwdg_refresh(&hiwdg); // 你的主要代码 }}void systemclock_config(void){ rcc_oscinittypedef rcc_oscinitstruct = {0}; rcc_clkinittypedef rcc_clkinitstruct = {0}; __hal_rcc_pwr_clk_enable(); __hal_pwr_voltagescaling_config(pwr_regulator_voltage_scale1); rcc_oscinitstruct.oscillatortype = rcc_oscillatortype_hsi; rcc_oscinitstruct.hsistate = rcc_hsi_on; rcc_oscinitstruct.hsicalibrationvalue = rcc_hsicalibration_default; rcc_oscinitstruct.pll.pllstate = rcc_pll_on; rcc_oscinitstruct.pll.pllsource = rcc_pllsource_hsi; rcc_oscinitstruct.pll.pllm = 8; rcc_oscinitstruct.pll.plln = 160; rcc_oscinitstruct.pll.pllp = rcc_pllp_div2; rcc_oscinitstruct.pll.pllq = 4; if (hal_rcc_oscconfig(&rcc_oscinitstruct) != hal_ok) { error_handler(); } rcc_clkinitstruct.clocktype = rcc_clocktype_hclk | rcc_clocktype_sysclk | rcc_clocktype_pclk1 | rcc_clocktype_pclk2; rcc_clkinitstruct.sysclksource = rcc_sysclksource_pllclk; rcc_clkinitstruct.ahbclkdivider = rcc_sysclk_div1; rcc_clkinitstruct.apb1clkdivider = rcc_hclk_div4; rcc_clkinitstruct.apb2clkdivider = rcc_hclk_div2; if (hal_rcc_clockconfig(&rcc_clkinitstruct, flash_latency_5) != hal_ok) { error_handler(); }}void mx_iwdg_init(void){ hiwdg.instance = iwdg; hiwdg.init.prescaler = iwdg_prescaler_256; hiwdg.init.reload = 4095; if (hal_iwdg_init(&hiwdg) != hal_ok) { error_handler(); }}void error_handler(void){ while (1) { // 处理错误 }}#ifdef use_full_assertvoid assert_failed(uint8_t *file, uint32_t line){ while (1) { // 处理断言失败的情况 }}#endif

Skylum发布了Luminar AI,利用人工智能执行复杂的编辑任务
中科同志科技被评为2020年北京专精特新中小企业
什么是PLC以及PLC的组成结构
ST为业界领先的NFC芯片最大供应商
土壤肥料养分速测仪的技术参数
STM32的看门狗原理和示例代码
Fitbit推出了两款B2B手环 三星Galaxy A8s新粉嫩配色发布
如何快速分辨以太网与千兆以太网
MM32F5330微控制器基本介绍 TinyUSB Host基本移植介绍
我们争取5G全球领先的底气是什么
5G FR1 O-RAN 无线电单元 (O-RU)简化测试解决方案
包含Wi Fi的Acer Chromebook低价发售
为什么静音机箱越来越受欢迎,它的优势是什么
浅谈充电桩系统对电能质量的影响
制造系统如何发展以实现工业IOT
处理器中断的本质 硬中断、软中断与异常的区别
什么是数据中心复杂性 如何提升数据中心的工作持续性
一文了解PLC编程及技术指标
应用案例 | 晶圆全自动切割工艺中,微米级精度检测方案
HTC推出VIVEPORT无线串流VR的新体验