STM8休眠不定时自动复位,不是看门狗的问题,折腾好几天了,要崩溃了

2019-03-23 18:46发布

用STM8S003做了一款小报警器,使用电池供电,待机时休眠,外部中断唤醒,现在的问题是不使用休眠工作正常,使用休眠就出现不定时重启,无规律,有时一天重启一次,有时连续重启好多次,读RST_SR没复位标志,连续折腾了几天,现在没头绪了,客户还一直在催,要崩溃了 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
help008
2019-03-24 15:09
贴出IAR下的简化测试程序,有经验的朋友帮忙看下,编译器按理说不应该有这样的问题啊

#include "iostm8s103f3.h"

                                                       
#define uchar unsigned char
#define uint  unsigned int

#define beep              PD_ODR_ODR6
#define led              PD_ODR_ODR5
#define RF                PA_IDR_IDR3          

void delay_1ms(uint x)    //1毫秒延时
{
    uchar b,c;
    for(;x>0;x--)
      {
        for(b=5;b>0;b--);
           {
                  for(c=150;c>0;c--);
           }
      }
}

void delay_us(uint x)
{
    for(;x>0;x--)
    {
          x++;x--;
    }
          
}



void MJ(uint dey)
{
  for(;dey>0;dey--)
    {
      beep=!beep;
      delay_us(200);
    }
}


void BB(uint size,uchar Number)
{       
  TIM2_IER_UIE=0;
  TIM4_IER_UIE=0;
  for(;Number>0;Number--)
    {
        led=!led;
        MJ(size);
        led=!led;
        delay_1ms(size);                               
    }
led=1;
TIM2_IER_UIE=1;
}

#pragma vector=0x05  //PA

__interrupt void ext_A3(void)    //RF外部中断
   {
      ;
   }



void Init_GPIO(void)  //IO初始化
{
    PA_DDR=0xF7;
    PA_CR1=0x00;  
    PA_CR2=0x00;  //PA3中断,休眠前开启

    PD_DDR=0xff;//ef
    PD_CR1=0x60;
    PD_CR2=0x00;
    PD_ODR=0X20;

   
    CLK_CKDIVR=0X02;    //CPU 4分频   

}



void system_start()   //上电初始化
{          
          Init_GPIO();
        EXTI_CR1=0XC1;   //PD上升沿和下降沿触发,PA仅上升沿触发
        PA_CR2=0x08;  //开启PA3上升沿中断       
        asm("rim");//开全局中断            
}

void main()
{
    system_start();
    BB(200,6);
    while(1)
      {              
        led=!led;
        asm("HALT");
      }  
}

一周热门 更多>