在 RM0091_STM32F051x Reference Manual_Chinese Version.pdf Doc ID 018940 Rev 1 中不使用窗口选项
当窗口选项被禁止时配置 IWWDG
当窗口选项未被使用, 可按下列顺序配置 IWWDG。
1 . 向 IWWDG_KR 寄存器写 0x00005555 打开寄存器访问许可。
2. 向 IWWDG_PR 写 0 ~ 7 的值, 以配置 IWWDG 的预分频器。
3. 配置重加载寄存器 (IWWDG_RLR)。
4. 等待状态寄存器 IWWDG_SR 的值更新为 0x00000000。
5. 将 IW_RLR 的值刷新到看门狗定时器 (IWWDG_KR = 0x0000 AAAA)。
6. 将 0x0000CCCC 写到 IWWDG_KR 寄存器, 使能 IWWDG。
在 RM0360 Reference manual.pdf DocID025023 Rev 2 中
Configuring the IWDG when the window option is disabled
When the window option it is not used, the IWDG can be configured as follows:
1. Enable the IWDG by writing 0x0000 CCCC in the IWDG_KR register.
2. Enable register access by writing 0x0000 5555 in the IWDG_KR register.
3. Write the IWDG prescaler by programming IWDG_PR from 0 to 7.
4. Write the reload register (IWDG_RLR).
5. Wait for the registers to be updated (IWDG_SR = 0x0000 0000).
6. Refresh the counter value with IWDG_RLR (IWDG_KR = 0x0000 AAAA)
按中文手册的步骤会在等待 IWWDG_SR 清零时进入死循环...
应该改是因为未使能硬件看门狗, 但是IWDG_SR相关位已经置为了.
/*LSI 使能 */
RCC_LSICmd(ENABLE);
/*等到 LSI 已准备就绪 */
while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);
/* 配置IWDG 不使用窗口选项 */
//1.将 0x0000CCCC 写到 IWWDG_KR 寄存器, 使能 IWWDG
IWDG_Enable();
//2.打开寄存器访问许可
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
//3.配置 IWWDG 的预分频器
IWDG_SetPrescaler(IWDG_Prescaler_32);
//4.配置重加载寄存器
IWDG_SetReload(0xfff);
//5.等待状态寄存器 IWWDG_SR 的值更新为 0x00000000
while (IWDG->SR != 0);
//6.将 IW_RLR 的值刷新到看门狗定时器 (IWWDG_KR = 0x0000 AAAA)
IWDG_ReloadCounter();
不过网上大部分例子是按照中文手册忽略状态寄存器等待来写的,因为也不会马上重写那些寄存器等待貌似也没啥意义.
|