打印

STM8 要使用HALT模式和IWDG的问题?求解

[复制链接]
10888|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jgphu|  楼主 | 2011-5-25 15:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一个项目用到低功耗,所以放弃了活跃停机模式(采用AWU自动唤醒)。

现使用HALT模式,靠外部中断唤醒。

现在的问题是:我在程序中加了IWDG,HALT后MCU复位了。

SPEC中说:在HALT下,只有外部中断能唤醒。为什么IWDG还会工作。
沙发
zhjun| | 2011-5-25 15:50 | 只看该作者
需要在选项字节中设置IWDG在HALT下STOP,默认是继续RUN

使用特权

评论回复
板凳
jgphu|  楼主 | 2011-5-25 16:25 | 只看该作者
STM8选择字节有这个功能吗?

使用特权

评论回复
地板
jgphu|  楼主 | 2011-5-25 17:25 | 只看该作者
为什么我还没有结帖,就说这帖已结啊???:curse:

使用特权

评论回复
5
jgphu|  楼主 | 2011-5-25 17:55 | 只看该作者
这个是在网上找的

        IWDG_HALT:=1;IWDG在停机模式下停止运行。

                       =0;IWDG在停机模式下继续运行。


但是在STVP上的选项之节真的没有找到这个。只IWDG_HW.

使用特权

评论回复
6
香水城| | 2011-5-26 10:38 | 只看该作者
这个是在网上找的

        IWDG_HALT:=1;IWDG在停机模式下停止运行。

                       =0;IWDG在停机模式下继续运行。

但是在STVP上的选项之节真的没有找到这个。只IWDG_HW. ...
jgphu 发表于 2011-5-25 17:55


没注意有这种设置,ST的哪个手册中有说明?

使用特权

评论回复
7
香水城| | 2011-5-26 10:51 | 只看该作者
请看看STM8的参考手册,在HALT模式下,除CPU之外,所有fMASTER驱动的外设都会停止,但IWDG却不是由fMASTER驱动的外设,所以在HALT模式下IWDG不会停止,而WWDG才有可能停止。

STM8_HALT_Mode.gif (16.57 KB )

STM8_HALT_Mode.gif

STM8_Clock_Tree.GIF (27.72 KB )

STM8_Clock_Tree.GIF

使用特权

评论回复
8
jgphu|  楼主 | 2011-5-26 12:59 | 只看该作者
已了解,只是觉得SPEC没有说得很明白,就拿上来问问。

使用特权

评论回复
9
Symbol_X| | 2015-3-5 14:37 | 只看该作者
IWDG_HALT选项在程序里面设置无效,如在程序中加入以下代码:
OPT->WDG = 0x02;
在MCU进入HALT之后,IWDG还在运行,导致MCU RESET。
正确的做法是在烧录时配置好,使用STVP烧录的配置选项如下:
这样在MCU进入HALT状态后IWDG就会停止工作

使用特权

评论回复
10
小胖电子| | 2015-6-11 11:42 | 只看该作者
请问楼主找到同时开IWDG和HALT的方法了吗?还是必须舍弃一个?

使用特权

评论回复
11
lakelake1991| | 2015-8-26 17:21 | 只看该作者
本帖最后由 lakelake1991 于 2015-9-8 15:50 编辑
Symbol_X 发表于 2015-3-5 14:37
IWDG_HALT选项在程序里面设置无效,如在程序中加入以下代码:
OPT->WDG = 0x02;
在MCU进入HALT之后,IWDG还 ...

OPT->WDG = 0x02;
不是在程序里设置无效 而是寄存器在EEPROM区域。要写入需要先解锁EEPROM
do
    {
        FLASH->DUKR = 0xae; // 写入第一个密钥
        FLASH->DUKR = 0x56; // 写入第二个密钥
    }
    while((FLASH->IAPSR & 0x08) == 0);//e2解锁
    FLASH->CR2 |= 0x80;
    OPT->WDG |= 0x02;//低功耗停止看门狗计数
    while((FLASH->IAPSR & 0x04) == 0)//写入完成
    {
        ;
    }
这样可以在低功耗时停止看门狗计数了。

使用特权

评论回复
12
ooffran| | 2015-12-23 17:20 | 只看该作者
真还是假的?我回去试试看。

使用特权

评论回复
13
simon_lost| | 2016-3-8 10:51 | 只看该作者
11楼对的,我也这么用的了~~

使用特权

评论回复
14
jj1989| | 2016-6-13 17:01 | 只看该作者
lakelake1991 发表于 2015-8-26 17:21
OPT->WDG = 0x02;
不是在程序里设置无效 而是寄存器在EEPROM区域。要写入需要先解锁EEPROM
do

感谢,先试试。

使用特权

评论回复
15
ynkady| | 2017-2-21 16:41 | 只看该作者
OPT->WDG在头文件的定义里没有啊?
typedef struct OPT_struct
{
  __IO uint8_t OPT0;  /*!< Option byte 0: Read-out protection (not accessible in IAP mode) */
  __IO uint8_t OPT1;  /*!< Option byte 1: User boot code */
  __IO uint8_t NOPT1; /*!< Complementary Option byte 1 */
  __IO uint8_t OPT2;  /*!< Option byte 2: Alternate function remapping */
  __IO uint8_t NOPT2; /*!< Complementary Option byte 2 */
  __IO uint8_t OPT3;  /*!< Option byte 3: Watchdog option */
  __IO uint8_t NOPT3; /*!< Complementary Option byte 3 */
  __IO uint8_t OPT4;  /*!< Option byte 4: Clock option */
  __IO uint8_t NOPT4; /*!< Complementary Option byte 4 */
  __IO uint8_t OPT5;  /*!< Option byte 5: HSE clock startup */
  __IO uint8_t NOPT5; /*!< Complementary Option byte 5 */
  uint8_t RESERVED1;  /*!< Reserved Option byte*/
  uint8_t RESERVED2; /*!< Reserved Option byte*/
  __IO uint8_t OPT7;  /*!< Option byte 7: flash wait states */
  __IO uint8_t NOPT7; /*!< Complementary Option byte 7 */
}
OPT_TypeDef;

使用特权

评论回复
16
18636120780| | 2017-4-15 10:13 | 只看该作者
香水城 发表于 2011-5-26 10:38
没注意有这种设置,ST的哪个手册中有说明?

datasheet手册第7章  选项字节

使用特权

评论回复
17
windows100| | 2017-4-15 16:35 | 只看该作者
18636120780 发表于 2017-4-15 10:13
datasheet手册第7章  选项字节

STM8S003第8章没有这个,这个应该是与芯片型号有关??

使用特权

评论回复
18
yiy| | 2017-4-16 18:25 | 只看该作者
没想到这么复杂。。。。

使用特权

评论回复
19
yiy| | 2017-4-16 18:28 | 只看该作者
还好我不做电池供电的系统。。。

使用特权

评论回复
20
18636120780| | 2017-9-1 09:48 | 只看该作者
windows100 发表于 2017-4-15 16:35
STM8S003第8章没有这个,这个应该是与芯片型号有关??

我用的stm8l的  在第7章  你找哪一章讲选项字节的就有啊

使用特权

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

本版积分规则

7

主题

642

帖子

2

粉丝