打印
[STM32F0]

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

[复制链接]
1259|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
goodcode|  楼主 | 2015-3-31 00:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在 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();
不过网上大部分例子是按照中文手册忽略状态寄存器等待来写的,因为也不会马上重写那些寄存器等待貌似也没啥意义.



沙发
mmuuss586| | 2015-3-31 08:26 | 只看该作者

谢谢分享,有空试下;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

粉丝