2.嵌入式系统使用WWDG窗口看门狗模块监视用户程序运行,假设看门狗的喂狗时间为10ms,PCLK1频率为36MHz,WDGTB[1:0]=11b。请计算看门狗的定时计数值,并写出看门狗的初始化函数(注:使用寄存器方式程序)
时间: 2024-02-01 16:16:54 浏览: 102
根据WWDG的计数公式:
$T_{WWDG} = \frac{2^{WDGTB} * (W[6:0] + 1)}{PCLK1}$
其中,$T_{WWDG}$ 为WWDG的计数时间,$WDGTB$ 为分频系数,$W[6:0]$ 为计数器的初始值,$PCLK1$ 为APB1总线时钟频率。
根据题目所给条件:$WDGTB[1:0]=11b$,$PCLK1=36MHz$,喂狗时间为10ms,代入公式可得:
$10ms = \frac{2^{3} * (W[6:0] + 1)}{36MHz}$
解得 $W[6:0] = 187$。
因此,看门狗的定时计数值为187,下面是看门狗的初始化函数:
```c
void WWDG_Init(void)
{
RCC->APB1ENR |= RCC_APB1ENR_WWDGEN; // 使能WWDG时钟
WWDG->CFR = WWDG_CFR_WDGTB_1 | WWDG_CFR_WDGTB_0 | 0x7F; // 设置分频系数为11b,计数器初始值为0x7F
WWDG->CR = WWDG_CR_WDGA; // 使能看门狗
}
```
相关问题
STM32f407内部看门狗的初始化和喂狗代码
STM32F407 内部看门狗的初始化和喂狗代码可以参考以下示例代码:
```
#include "stm32f4xx.h"
// 看门狗初始化
void WDG_Init(uint32_t time)
{
// 使能看门狗时钟
RCC->APB1ENR |= RCC_APB1ENR_WWDGEN;
// 设置看门狗分频器,采用 PCLK1 / 4096
IWDG->PR = 6;
// 设置看门狗计数器,计数器值大于等于重载值时会发生看门狗复位
IWDG->RLR = time;
// 使能看门狗
IWDG->KR = 0xAAAA;
}
// 喂狗函数
void WDG_Feed(void)
{
// 重置看门狗计数器
IWDG->KR = 0xAAAA;
}
```
在上述代码中,`WDG_Init`函数用于进行看门狗的初始化,其中`time`参数表示看门狗的计数时间,单位为ms。`WDG_Feed`函数用于喂狗,在程序中定期调用该函数可以防止看门狗复位。
需要注意的是,看门狗计数器的值必须在重载寄存器的值范围内,否则看门狗会在计数器溢出时触发,导致系统复位。同时,在喂狗时也需要注意,喂狗的时间间隔不能太长,否则看门狗会超时而导致系统复位。
cubemx 看门狗
Cubemx是一个用于配置和生成嵌入式软件项目的集成开发环境(IDE)。在Cubemx中,看门狗是一个用于监控和处理系统错误的重要功能。根据引用,独立看门狗和窗口看门狗是两种不同类型的看门狗。
独立看门狗(Independent Watchdog,IWDG)是一种独立于主时钟的定时器。根据引用,独立看门狗的时钟由独立的RC振荡器提供,即使主时钟发生故障,独立看门狗仍然有效。独立看门狗的定时时间不一定非常精确,适用于对时间精度要求比较低的场合。
窗口看门狗(Window Watchdog,WWDG)则使用PCLK1作为时钟源,如引用所示。PCLK1是一个可配置的时钟源,可以根据具体的应用需求来选择。窗口看门狗的工作原理和独立看门狗有所不同,但都是用于监控并处理系统错误。
因此,根据所提供的引用内容,你可以在Cubemx中配置和使用独立看门狗和窗口看门狗来实现系统的错误监控和处理功能。具体使用方法和配置参数可以参考相应的参考资料。