/**
* @brief IWDG写访问使能
*
* 允许对IWDG寄存器进行写操作。
*
* @param IWDG_WriteAccess IWDG写访问使能控制。通常为特定的值以允许写操作。
*/
void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);
/**
* @brief IWDG设置预分频器
*
* 设置IWDG的预分频器值。预分频器用于降低LSI(低速内部时钟)的频率,从而延长看门狗的超时时间。
*
* @param IWDG_Prescaler IWDG预分频器值。
*/
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);
/**
* @brief IWDG设置重装载值
*
* 设置IWDG的重装载值。当看门狗计数器达到这个值时,它会被重装载。
*
* @param Reload IWDG重装载值。
*/
void IWDG_SetReload(uint16_t Reload);
/**
* @brief IWDG重新装载计数器
*
* 触发IWDG计数器的重装载。在达到重装载值之前调用此函数可以避免看门狗复位。
*/
void IWDG_ReloadCounter(void);
/**
* @brief IWDG使能
*
* 启动IWDG。在使能后,看门狗计数器开始递减,并在达到0时触发复位。
*/
void IWDG_Enable(void);
/**
* @brief IWDG获取标志状态
*
* 检查指定的IWDG标志的状态。
*
* @param IWDG_FLAG 要检查的IWDG标志。
* @return 标志状态(SET 或 RESET)。
*/
FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);
- IWDG初始化
超时时间:TIWDG = TLSI × PR预分频系数 × (RL + 1)
其中:TLSI = 1 / FLSI
TLSI = 1/40khz = 0.025ms
例:TIWDG = 1000,PR预分频系数 × (RL + 1)=1000/0.025=40000;PR预分频系数=16那么RL = 2499
/*IWDG初始化*/
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //独立看门狗写使能
IWDG_SetPrescaler(IWDG_Prescaler_16); //设置预分频为16
IWDG_SetReload(2499); //设置重装值为2499,独立看门狗的超时时间为1000ms
IWDG_ReloadCounter(); //重装计数器,喂狗
IWDG_Enable(); //独立看门狗使能
// 定义IWDG预分频器为4,即看门狗时钟源频率被4分频
#define IWDG_Prescaler_4 ((uint8_t)0x00)
// 定义IWDG预分频器为8,即看门狗时钟源频率被8分频
#define IWDG_Prescaler_8 ((uint8_t)0x01)
// 定义IWDG预分频器为16,即看门狗时钟源频率被16分频
#define IWDG_Prescaler_16 ((uint8_t)0x02)
// 定义IWDG预分频器为32,即看门狗时钟源频率被32分频
#define IWDG_Prescaler_32 ((uint8_t)0x03)
// 定义IWDG预分频器为64,即看门狗时钟源频率被64分频
#define IWDG_Prescaler_64 ((uint8_t)0x04)
// 定义IWDG预分频器为128,即看门狗时钟源频率被128分频
#define IWDG_Prescaler_128 ((uint8_t)0x05)
// 定义IWDG预分频器为256,即看门狗时钟源频率被256分频
// 注意:通常预分频器的最大值和可用值会在硬件文档或数据手册中指定
// 这里假设了预分频器可以设置为256,但请确保在实际硬件上支持这个值
#define IWDG_Prescaler_256 ((uint8_t)0x06)
- 喂狗
IWDG_ReloadCounter(); //重装计数器,喂狗