63 lines
1.9 KiB
C
63 lines
1.9 KiB
C
#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();
|
||
}
|
||
|