N32G45x 窗口看门狗(WWDG)使用
本帖最后由 Afanx 于 2022-10-31 14:12 编辑窗口看门狗(WWDG)
时钟源:APB1时钟/4096
功能:7位递减计数器,具有上下限(0x7F~0x40),当计数器小于0x40时产生复位,另外只能在计数器小于设定的窗口值才能对计数器重装载。
计数时间:PCLK1=36MHz
预分配 计数频率(Hz) 步进时间(ms) 最大计数时间(ms)
2^0 = 1 8.789k 0.113 7.28
2^1 = 2 4.394k 0.227 14.56
2^2 = 4 2.197k 0.445 29.12
2^3 = 8 1.098k 0.910 58.25
软件配置流程:
1. 配置 RCC_APB1PCLKEN.WWDGEN位使能 WWDG 模块的时钟
2. 软件设置 WWDG_CFG.TIMERB位来配置 WWDG 的预分频因子
3. 软件配置 WWDG_CTRL.T位,设置计数器的起始值。需要将 WWDG_CTRL.T位设置为 1,以防止在启用后立即复位
4. 配置 WWDG_CFG.W位配置上边界窗口值
5. 设置 WWDG_CTRL.ACTB位使能 WWDG
6. 软件操作 WWDG_STS.EWINTF位清除唤醒中断标志
7. 配置 WWDG_CFG.EWINT位使能提前唤醒中断
配置代码:
/**
* @briefWWDG初始化
*/
void WWDG_Initial(void)
{
/* Enable WWDG clock */
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_WWDG, ENABLE);
/* WWDG clock counter = (PCLK1(36MHz)/4096)/8 = 1099 Hz (~910 us)*/
WWDG_SetPrescalerDiv(WWDG_PRESCALER_DIV8);
/* Set Window value to 80; WWDG counter should be refreshed only when the counter
is below 80 (and greater than 64) otherwise a reset will be generated */
WWDG_SetWValue(80);
/* Enable WWDG and set counter value to 127, WWDG timeout = ~910 us * 64 = 58.25 ms
In this case the refresh window is: ~910 us * (127-80) = 42.77 ms < refresh window < ~910 us * 64 = 58.25ms */
WWDG_Enable(127);
}
/**
* @briefWWDG测试
*/
void WWDG_Task(void)
{
/* Check if the system has resumed from WWDG reset */
if (RCC_GetFlagStatus(RCC_FLAG_WWDGRST) != RESET) {
/* WWDGRST flag set */
printf("\r\n reset by WWDG \r\n");
/* Clear reset flags */
RCC_ClrFlag();
}
/* Enable WWDG and set counter value to 127, WWDG timeout = ~910 us * 64 = 58.25 ms
In this case the refresh window is: ~910 us * (127-80) = 42.77 ms < refresh window < ~910 us * 64 = 58.25ms */
while (1) {
/* Delay */
DelayMs(50);
/* Update WWDG counter */
WWDG_SetCnt(127);
/* Toggle LED */
GPIO_ToggleBit(GPIOA, GPIO_PIN_8);
}
}
高于窗口上限喂狗也会发生复位吗
页:
[1]