STM32
直播中

陈游斗

7年用户 1073经验值
擅长:控制/MCU
私信 关注
[问答]

用STM8S003做了一款小报警器,不定时重启怎么解决?

用STM8S003做了一款小报警器,电池供电,平时休眠,外部中断唤醒,测试过程中开启休眠就出现无规律重启,不使用休眠就一切正常,折腾了几天,一直没找到问题。最后逐步简化程序,发现只保留休眠和唤醒,也是一样的重启,已经没思路了,求各位朋友帮忙,贴出最后测试的程序,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--);
           }
      }
}

#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();
    beep=1;
    delay_1ms(500);
    beep=0;
    while(1)
      {              
        led=!led;
        asm("HALT");
      }  
}


只保留这点都不行,无规律重启,有时是连续重启,有时要几个小时


回帖(1)

地方

2024-5-10 16:52:54
从您提供的信息来看,您的STM8S003小报警器在开启休眠模式时出现无规律重启的问题。这可能是由于以下几个原因导致的:

1. 电源问题:电池供电可能导致电压不稳定,从而影响休眠和唤醒过程。请检查电池电压是否稳定,或者尝试使用稳定的电源供电。

2. 外部干扰:外部电磁干扰可能导致STM8S003误触发外部中断,从而唤醒设备。请检查周围环境是否存在强电磁干扰,并尝试使用屏蔽线或滤波器来减少干扰。

3. 唤醒条件设置不当:请检查您的唤醒条件设置是否正确。例如,确保唤醒条件与外部中断触发条件匹配。

4. 程序问题:请检查您的程序是否存在死循环、无限等待或其他可能导致重启的问题。

5. 硬件问题:STM8S003本身可能存在硬件问题,导致无法正常进入休眠和唤醒。请尝试使用其他STM8S003进行测试。

针对您的问题,我建议您按照以下步骤进行排查:

1. 确保电池电压稳定,或者使用稳定的电源供电。

2. 检查周围环境是否存在强电磁干扰,并尝试使用屏蔽线或滤波器来减少干扰。

3. 仔细检查您的程序,确保唤醒条件设置正确,没有死循环或无限等待等问题。

4. 尝试使用其他STM8S003进行测试,以排除硬件问题。

5. 如果以上步骤都无法解决问题,您可以考虑寻求专业人士的帮助,或者联系STM8S003的制造商寻求技术支持。

希望以上建议对您有所帮助。祝您早日解决问题!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分