#include "../main/SystemInclude.h" /**------------------------------------------------------------------------ * @brief 系统 IWDG 初始化 * @note 该函数执行以下操作: * - 停止默认运行的 IWDG(上电后默认约20秒复位) * - 解锁写保护 * - 设置预分频器为 32 分频(LSI 约 32kHz / 32 = 1kHz) * - 设置重装载值为 4000,得到约 4 秒的复位周期 * - 启动 IWDG * @warning 一旦调用本函数,IWDG 即开始运行,必须在复位周期内喂狗, * 否则系统复位。推荐在主循环或定时中断中调用 Clear_WDT()。 * @param 无 * @example SystemIWDGInit(); **/ void SystemIWDGInit(void) { // 1. IWDG上电后默认是运行状态,时钟源32K LSI,默认复位周期约20秒 LHL_IWDG_Stop(); // 2. 写入WDG必须先解锁,注意WDG一旦Reload就自动启用写保护 LHL_IWDG_Unlock(); // 3. 设定LSI 32分频(约1KHz),默认为256分频 LHL_IWDG_SetPrescaler(IWDG_PRESCALER_32, LHL_NRM_TIMEOUT); // 4. IWDG是12bit寄存器,最大值4095(默认重装载值0x9C0) LHL_IWDG_SetReload(4000, LHL_NRM_TIMEOUT); // 5. 自动装载并开始运行,大约4000*1KHz=4S复位 LHL_IWDG_Start(); } /* //void LHL_IWDG_Reload(void);//写入0xAAAA重装载IWDG //LHL_StatusTypeDef LHL_IWDG_Stop(void); //暂停运行IWDG //LHL_StatusTypeDef LHL_IWDG_Resume(void);//继续运行IWDG //LHL_StatusTypeDef LHL_IWDG_Start(void);//写入0xAAAA重装载并启动IWDG */ /**------------------------------------------------------------------------ * @brief 停止 IWDG(暂停计数) * @note 调用此函数可暂时关闭看门狗,例如在低功耗模式下。 * 若需要完全关闭,也可直接调用。 * @param 无 * @example Stop_WDT(); **/ void Stop_WDT(void) { LHL_IWDG_Stop(); } /**------------------------------------------------------------------------ * @brief 喂狗(清除看门狗计数器) * @note 应在 IWDG 复位超时前周期性调用,防止系统复位。 * 建议在主循环或固定时间中断中调用。 * @param 无 * @example Clear_WDT(); **/ void Clear_WDT(void) { //LHL_IWDG_Reload(); }