[STM32F0] IWWDG 初始化顺序中文手册中是错误的

[复制链接]
1574|1
 楼主| goodcode 发表于 2015-3-31 00:54 | 显示全部楼层 |阅读模式
在 RM0091_STM32F051x Reference Manual_Chinese Version.pdf Doc ID 018940 Rev 1 中不使用窗口选项

  1. 当窗口选项被禁止时配置 IWWDG
  2. 当窗口选项未被使用, 可按下列顺序配置 IWWDG。
  3. 1 . 向 IWWDG_KR 寄存器写 0x00005555 打开寄存器访问许可。
  4. 2. 向 IWWDG_PR 写 0 ~ 7 的值, 以配置 IWWDG 的预分频器。
  5. 3. 配置重加载寄存器 (IWWDG_RLR)。
  6. 4. 等待状态寄存器 IWWDG_SR 的值更新为 0x00000000。
  7. 5. 将 IW_RLR 的值刷新到看门狗定时器 (IWWDG_KR = 0x0000 AAAA)。
  8. 6. 将 0x0000CCCC 写到 IWWDG_KR 寄存器, 使能 IWWDG。

在 RM0360 Reference manual.pdf DocID025023 Rev 2 中

  1. Configuring the IWDG when the window option is disabled
  2. When the window option it is not used, the IWDG can be configured as follows:
  3. 1. Enable the IWDG by writing 0x0000 CCCC in the IWDG_KR register.
  4. 2. Enable register access by writing 0x0000 5555 in the IWDG_KR register.
  5. 3. Write the IWDG prescaler by programming IWDG_PR from 0 to 7.
  6. 4. Write the reload register (IWDG_RLR).
  7. 5. Wait for the registers to be updated (IWDG_SR = 0x0000 0000).
  8. 6. Refresh the counter value with IWDG_RLR (IWDG_KR = 0x0000 AAAA)

按中文手册的步骤会在等待 IWWDG_SR 清零时进入死循环...
应该改是因为未使能硬件看门狗, 但是IWDG_SR相关位已经置为了.

  1.     /*LSI 使能 */
  2.     RCC_LSICmd(ENABLE);
  3.     /*等到 LSI 已准备就绪 */
  4.     while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);

  5.     /* 配置IWDG 不使用窗口选项 */
  6.     //1.将 0x0000CCCC 写到 IWWDG_KR 寄存器, 使能 IWWDG
  7.     IWDG_Enable();
  8.     //2.打开寄存器访问许可
  9.     IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
  10.     //3.配置 IWWDG 的预分频器
  11.     IWDG_SetPrescaler(IWDG_Prescaler_32);
  12.     //4.配置重加载寄存器
  13.     IWDG_SetReload(0xfff);
  14.     //5.等待状态寄存器 IWWDG_SR 的值更新为 0x00000000
  15.     while (IWDG->SR != 0);
  16.     //6.将 IW_RLR 的值刷新到看门狗定时器 (IWWDG_KR = 0x0000 AAAA)
  17.     IWDG_ReloadCounter();
不过网上大部分例子是按照中文手册忽略状态寄存器等待来写的,因为也不会马上重写那些寄存器等待貌似也没啥意义.



mmuuss586 发表于 2015-3-31 08:26 | 显示全部楼层

谢谢分享,有空试下;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部