单片机运行一段时间后死机

2019-07-14 19:36发布

我用的是STM8S103单片机,自己编写的程序在买的最小系统板上能够正常运行,但在自己做的板子上出现问题,问题如下:刚焊接好电路板下载程序完成后单片机正常运行,但是运行经过一段时间后就无法运行了,重新上电也无法运行,甚至重新下载程序到板子上也无法继续运行,使用外部时钟和内部时钟也是一样的情况,只有用风枪吹单片机才能运行(单片机是20脚的封装,焊接应该没问题,不然一开始就无法运行了),请各位大神帮忙看看是什么问题。
while (1)
  {
                if (((PC_IDR&0x08)==0x00)&&(flag_stop==0))//stop signal from Hall1
          {
                        flag_stop=1;
                        flag_start=0;
                        tiM2_CR1=0x00;//close TIME2
                        PB_ODR&=0xcf;//turn off LED
                        PD_ODR|=0x0c;//send start signal to master and open the buzzer
                        Delay(50);
                  for (i=0;i<4;i++)//send time to master
            {
                          PD_ODR=0x08&((s/10)<<i);//4bit
                          Delay(50);
                  }
                  for (i=0;i<4;i++)//send time to master
            {
                          PD_ODR=0x08&((s%10)<<i);//4bit
                          Delay(50);
                  }
                  PD_ODR&=0x00;//reset PD
                        Delay(1000);
                        PD_ODR|=0x20;//send control K1 to master
                }
               
                if (((PC_IDR&0x10)==0x00)&&(flag_stop==0))//stop signal from Hall2
          {
                        flag_stop=1;
                        flag_start=0;
                        TIM2_CR1=0x00;//close TIME2
                        PB_ODR&=0xcf;//turn off LED
                        PD_ODR|=0x0c;//send start signal to master and open the buzzern
                        Delay(50);
                  for (i=0;i<4;i++)//send time to master
            {
                          PD_ODR=0x08&((s/10)<<i);//4bit
                          Delay(50);
                  }
                  for (i=0;i<4;i++)//send time to master   
            {
                          PD_ODR=0x08&((s%10)<<i);//4bit
                          Delay(50);
                  }
                  PD_ODR&=0x00;//reset PD
                        Delay(1000);
                        PD_ODR|=0x40;//send control K2 to master
                }
               
                if ((((PC_IDR&0x08)==0x08)||((PC_IDR&0x10)==0x10))&&(flag_start==0))//start signal form Hall1 or Hall2
          {
                        flag_stop=0;   
                        flag_start=1;
                        PD_ODR&=0xf7;//reset PD3
                        s=0;//reset second
                  TIM2_CR1=0x01;//open TIME2
                        /**
                        if (s>=60)
                  {
                                s=0;
                                TIM2_CR1=0x00;//close TIME2
                                PB_ODR|=0x30;//turn on LED
                          PD_ODR|=0x08;//send stop signal to master
                                Delay(450);
                        }
                        **/
                }
        }

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
灰色空间HQ
1楼-- · 2019-07-15 04:11
hobbye501 发表于 2017-5-2 11:57
你先排除数软件原因  还是硬件原因  软件的话 你这种情况 只能是进入深度低功耗休眠了 没唤醒   硬件的话 无非就是 电源电压不稳定  晶振和复位电路

应该不是软件问题,同样的程序在别人的板子上又不会发生这样的问题,可能是电源问题,因为赶时间我布线的时候那个104的滤波电容我放到其他地方去了,单片机的电源没有经过那个104,会不会是这个问题?
李春明
2楼-- · 2019-07-15 04:22
灰 {MOD}空间HQ 发表于 2017-5-2 13:50
应该不是软件问题,同样的程序在别人的板子上又不会发生这样的问题,可能是电源问题,因为赶时间我布线的时候那个104的滤波电容我放到其他地方去了,单片机的电源没有经过那个104,会不会是这个问题?

这个样子的话  资料不妨上原理图看看
hobbye501
3楼-- · 2019-07-15 07:00
灰 {MOD}空间HQ 发表于 2017-5-2 13:50
应该不是软件问题,同样的程序在别人的板子上又不会发生这样的问题,可能是电源问题,因为赶时间我布线的时候那个104的滤波电容我放到其他地方去了,单片机的电源没有经过那个104,会不会是这个问题?

电源一般不用104  芯片的电源和地 最好加个 板子电源 一般是10UF 左右 胆电容或者点解电容
灰色空间HQ
4楼-- · 2019-07-15 08:44
 精彩回答 2  元偷偷看……
灰色空间HQ
5楼-- · 2019-07-15 08:52
王栋春 发表于 2017-5-2 20:33
这个样子的话  资料不妨上原理图看看

我都快崩溃咯
捕获.JPG
mingkeyu123456
6楼-- · 2019-07-15 09:53
我现在也出现了同样的问题,你的问题解决没?

一周热门 更多>