wgcrdg 发表于 2013-9-6 15:02:06

STM8S AWU(活跃停机)功能一打开,过一会儿程序喜欢跑飞

问题描述:AWU功能一打开,过一会儿程序喜欢跑飞
                  不打开AWU功能就可以,不知道是哪个地方出了问题!编译器为IAR
#include "stdio.h"
#include  
#include
#define  _NOP()   __no_operation()
#pragma vector = 0X03
__interrupt void AWU_IRQHandler(void)
{
    unsigned char i;
    _NOP();
    i=AWU_CSR1;
    _NOP();
}

void Awu_Init(void)
{
    CLK_ICKR|= 0x08;        //打开LSI时钟
    CLK_PCKENR2 |= 0X04;   //使能AWU时钟
    AWU_APR=0x1e;           //
    AWU_TBR=0x0b;           //
    AWU_CSR1|=0x10;         //AWU使能自动唤醒功能
    CLK_ICKR|= 0x20;         //活跃停机模式(AWU使能情况)下,关闭电压调节器节省功耗
    CLK_ICKR|= 0x04;          //从停机(Halt)或活跃停机(Active Halt)模式快速唤醒使能
    FLASH_CR1 &= ~0x40;   //活跃停机模式下Flash掉电,
}
void main(void)
{
    _NOP();
    Awu_Init();
    _NOP();
    __enable_interrupt();  // 开全局中断
    while (1)
    {
        _NOP();
        __halt();               //低功耗模式(停机)
        _NOP();
    }
}

温柔的武士刀 发表于 2013-9-16 21:04:27

回复:STM8S AWU(活跃停机)功能一打开,过一会儿程序喜欢跑飞

所有未用的I/O口全部设为上拉输出低电平,把未用的的IO设置成输入试试。


 

发表于 2013-9-7 12:04:40

回复:STM8S AWU(活跃停机)功能一打开,过一会儿程序喜欢跑飞

 程序跑飞,自己单步,找到跑飞的地方。

dennywang 发表于 2013-9-8 14:29:46

RE:STM8S AWU(活跃停机)功能一打开,过一会儿程序喜欢跑飞

程序跑飞与芯片功能无关,很多时候是指针非法或访问越界。建议你根据SP指向的内存区,查看栈内数据,找出跑飞位置,然后仔细检查程序。个人调试的一点心得,希望对你有用

wgcrdg 发表于 2013-9-9 09:19:08

回复:STM8S AWU(活跃停机)功能一打开,过一会儿程序喜欢跑飞

程序单步运行时正常,是走了一会儿后,程序才跑飞的。
堆栈也是正常的,现在只有一个中断,然后是while (1)
    {
        _NOP();
        __halt();               //低功耗模式(停机)
        _NOP();
    }
 
库函数的例程,我也试了,走一段时间后(1到2分钟后),也会跑飞。

dzc2001 发表于 2013-9-14 15:57:51

RE:STM8S AWU(活跃停机)功能一打开,过一会儿程序喜欢跑飞

库函数的例程如果都能跑飞,可能是你硬件设计上的问题了

wgcrdg 发表于 2013-9-17 08:57:27

回复:STM8S AWU(活跃停机)功能一打开,过一会儿程序喜欢跑飞

回复第 5 楼 于2013-09-14 15:57:51发表:
库函数的例程如果都能跑飞,可能是你硬件设计上的问题了
硬件问题我也怀疑过,后来我用官方的实验板 STM8-DISCOVERY ,也测试了,还是出现同样的问题,不知道是什么原因。
 

abing-340056 发表于 2014-6-14 06:43:42

回复:STM8S AWU(活跃停机)功能一打开,过一会儿程序喜欢跑飞

我现在也遇到了这样的情况,你的问题怎么解决的?

ninicaoyuan 发表于 2014-8-26 09:30:31

回复:STM8S AWU(活跃停机)功能一打开,过一会儿程序喜欢跑飞

mark:lol

ninicaoyuan 发表于 2015-3-20 17:34:51

同样的问题呀,

拼命三郎 发表于 2015-3-25 12:48:16

qinhn 发表于 2015-4-12 17:53:04

与其他中断冲突,我把其他定时器中断关闭就好了。

zhanglong71 发表于 2016-5-9 15:32:20

温柔的武士刀 发表于 2013-9-16 21:04
所有未用的I/O口全部设为上拉输出低电平,把未用的的IO设置成输入试试。



这个适当设置后编译通过,在本人的stm8s207上运行符合预期。支持一下

CloseRainOpenFl 发表于 2016-11-19 15:22:38

zhanglong71 发表于 2016-5-9 15:32
这个适当设置后编译通过,在本人的stm8s207上运行符合预期。支持一下

我就把主函数改了,其他都跟楼主一样,为什么根本不会唤醒:
void main(void)
{
        /*PB5为推挽输出*/
    PB_DDR |= 0x20;/*xx1x xxxx*/
    PB_CR1 |= 0x20;/*xx1x xxxx*/
    PB_CR2 &= 0xdf;/*xx0x xxxx*/
        PB_ODR = 0x20;
    _NOP();
    Awu_Init();
    _NOP();
    __enable_interrupt();// 开全局中断

    while (1)
    {
                PB_ODR = 0x20;
                asm("HALT");
                _NOP();
                PB_ODR = 0x00;
                asm("HALT");
                _NOP();
    }
}

peter001 发表于 2016-11-20 11:06:43

标记一下,看看谁能解答
页: [1] 2
查看完整版本: STM8S AWU(活跃停机)功能一打开,过一会儿程序喜欢跑飞