描述 #
该文件包含独立看门狗(IWDG)固件库的所有函数原型与常量定义。IWDG 是一个独立于系统时钟的硬件看门狗,用于在主程序跑飞或死循环时自动复位微控制器,提升系统可靠性。其计数器由内部低速 RC 振荡器(LSI)驱动,即使主时钟失效仍可正常工作。所有寄存器写入操作均需先启用写访问权限,且关键操作(如使能)会自动禁用后续写入,以防止误配置。
常量 #
IWDG_WriteAccess
#
控制对 IWDG 预分频器(PSCR)和重载寄存器(RLDR)的写入权限。写入前必须启用写访问,否则写入无效。此机制防止意外修改看门狗配置,增强系统稳定性。
| 名称 | 值 | 简述 |
|---|---|---|
IWDG_WriteAccess_Enable |
0x5555 |
启用对 IWDG_PSCR 和 IWDG_RLDR 的写入权限 |
IWDG_WriteAccess_Disable |
0x0000 |
禁用对 IWDG_PSCR 和 IWDG_RLDR 的写入权限 |
以上所有值都强制转换为
uint16_t
IWDG_prescaler
#
设置 IWDG 计数器的预分频系数,决定计数器递减的时钟频率。分频值越大,看门狗超时时间越长。LSI 频率通常为 40kHz,结合分频与重载值可计算出最大超时时间(约 32.7s)。
| 名称 | 值 | 简述 |
|---|---|---|
IWDG_Prescaler_4 |
0x00 |
预分频系数为 4 |
IWDG_Prescaler_8 |
0x01 |
预分频系数为 8 |
IWDG_Prescaler_16 |
0x02 |
预分频系数为 16 |
IWDG_Prescaler_32 |
0x03 |
预分频系数为 32 |
IWDG_Prescaler_64 |
0x04 |
预分频系数为 64 |
IWDG_Prescaler_128 |
0x05 |
预分频系数为 128 |
IWDG_Prescaler_256 |
0x06 |
预分频系数为 256 |
以上所有值都强制转换为
uint8_t
IWDG_Flag
#
指示 IWDG 寄存器更新状态的标志位。用于检测写入操作是否完成,避免在更新过程中读取或修改寄存器。
| 名称 | 值 | 简述 |
|---|---|---|
IWDG_FLAG_PVU |
0x0001 |
预分频器值正在更新中 |
IWDG_FLAG_RVU |
0x0002 |
重载值正在更新中 |
以上所有值都强制转换为
uint16_t
函数 #
IWDG_WriteAccessCmd
#
void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess)
启用或禁用对 IWDG 预分频器(PSCR)和重载寄存器(RLDR)的写入权限。必须在修改 PSCR 或 RLDR 前调用此函数,否则写入无效。一旦使能 IWDG,写入权限将自动关闭,防止运行时误改配置。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
IWDG_WriteAccess |
uint16_t |
写入权限状态,取值为 IWDG_WriteAccess_Enable 或 IWDG_WriteAccess_Disable |
返回值:
无
IWDG_SetPrescaler
#
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler)
设置 IWDG 计数器的预分频系数,决定计数器递减的时钟频率。分频值越大,看门狗超时时间越长。修改前必须先调用 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable)。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
IWDG_Prescaler |
uint8_t |
预分频系数,取值为 IWDG_Prescaler_4 至 IWDG_Prescaler_256 |
返回值:
无
IWDG_SetReload
#
void IWDG_SetReload(uint16_t Reload)
设置 IWDG 重载寄存器的值,决定计数器从多少开始递减。有效范围为 0x000 至 0xFFF(0~4095)。重载值越大,看门狗超时时间越长。修改前必须先启用写访问权限。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
Reload |
uint16_t |
重载值,范围为 0 ~ 0x0FFF |
返回值:
无
IWDG_ReloadCounter
#
void IWDG_ReloadCounter(void)
手动重载 IWDG 计数器,使其重新从 RLDR 寄存器的值开始递减。在正常程序流程中,需定期调用此函数以防止看门狗超时复位。
参数:
无
返回值:
无
IWDG_Enable
#
void IWDG_Enable(void)
使能 IWDG 看门狗。一旦使能,IWDG 将开始计数,且自动禁用对 PSCR 和 RLDR 的写入权限,防止运行时被修改。使能后需等待 RCC 的 IWDG 复位标志清除,确保硬件完全启动。
参数:
无
返回值:
无
注意:此函数调用后,IWDG 将无法再被禁用,只能通过系统复位(如上电、外部复位)清除。设计时需确保在使能前已正确配置重载值和分频系数。
IWDG_GetFlagStatus
#
FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG)
查询 IWDG 状态标志位,判断预分频器或重载值是否正在更新中。在写入 PSCR 或 RLDR 后,应轮询对应标志位,直到其清零,表示更新完成,方可进行下一次写入。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
IWDG_FLAG |
uint16_t |
要查询的标志,取值为 IWDG_FLAG_PVU 或 IWDG_FLAG_RVU |
返回值:
SET:指定标志位被置位(更新正在进行)RESET:指定标志位被清零(更新已完成)
建议:在调用
IWDG_SetPrescaler或IWDG_SetReload后,应等待对应标志位为RESET,以确保配置生效。