optical/NxBase/iwdog.c
2025-09-04 09:45:08 +08:00

75 lines
1.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "iwdog.h"
/*
独立看门狗有一个40KHz的时钟通过预分频值和重装载值来确定看门狗复位周期
公式:
Tout = ((4 × 2^prer) × rlr) / 40;
Tout 为复位时间单位是ms
prer 为看门狗时钟预分频值,写入值是 0--7是分频系数/4的幂数。例如: 4分频的值是0, 64 分频的 写入值是4
rlr 是看门狗的重装载值
*/
//-------------------------------------------------------------------------------
#define MAX_IWD_MS 6553
#ifdef USE_STDPERIPH_DRIVER
#define IWDG_PRE IWDG_Prescaler_4 // 4分频分频后是0.1ms
#endif
#ifdef USE_FULL_LL_DRIVER
#define IWDG_PRE LL_IWDG_PRESCALER_4 // 4分频分频后是0.1ms
#endif
//-------------------------------------------------------------------------------
void InitIWDog(u16 ms)
{
if (ms < MAX_IWD_MS)
{
ms *= 10;
}
else
{
ms = 65535;
}
#if (USE_IWDOG == 1)
#ifdef USE_STDPERIPH_DRIVER
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); // 取消寄存器写保护
IWDG_SetPrescaler(IWDG_PRE); // 设置独立看门狗的预分频系数
IWDG_SetReload(ms); // 设置独立看门狗的重装载值
IWDG_ReloadCounter(); // 重载计数值, 第一次喂狗
IWDG_Enable(); // 启动看门狗
#endif
#ifdef USE_FULL_LL_DRIVER
LL_IWDG_EnableWriteAccess(IWDG); // 取消寄存器写保护
LL_IWDG_SetPrescaler(IWDG, IWDG_PRE); // 设置独立看门狗的预分频系数
LL_IWDG_SetWindow(IWDG, ms); // 设置窗口
LL_IWDG_SetReloadCounter(IWDG, ms); // 设置独立看门狗的重装载值
LL_IWDG_ReloadCounter(IWDG); // 重载计数值, 第一次喂狗
LL_IWDG_Enable(IWDG); // 启动看门狗
#endif
#endif
}
void FeedIWDog(void)
{
#if (USE_IWDOG == 1)
#ifdef USE_STDPERIPH_DRIVER
IWDG_ReloadCounter();
#endif
#ifdef USE_FULL_LL_DRIVER
LL_IWDG_ReloadCounter(IWDG);
#endif
#endif
}