OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5913|回复: 20

原子哥请教一个stm32死机的问题

[复制链接]

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-12-22
在线时间
9 小时
发表于 2015-9-29 10:31:41 | 显示全部楼层 |阅读模式
5金钱
我现在这个设备用到两个串口一个与SIM900A通讯另外一个与其他单片机通讯,锂电池供电,不知道为什么运行30小时以后就会死机。我已经查找了代码,但是我不太理解什么时候才能算是栈溢出,数组越界什么的已经排查过没有了。

最佳答案

查看完整内容[请看2#楼]

嗯 刚搜了一下,好像是STM32的BUG http://blog.csdn.net/love_maomao/article/details/8234039
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13129
金钱
13129
注册时间
2012-11-26
在线时间
3814 小时
发表于 2015-9-29 10:31:42 | 显示全部楼层
bloody41760 发表于 2015-12-28 15:51
不是清标志,这个好像是溢出错误,不清会一直进串口中断

嗯  刚搜了一下,好像是STM32的BUG

http://blog.csdn.net/love_maomao/article/details/8234039
学无止境
回复

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-12-22
在线时间
9 小时
 楼主| 发表于 2015-9-29 10:32:29 | 显示全部楼层
这个死机的时间也不确定,有的20几个小时 有的40几个小时
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1606
金钱
1606
注册时间
2015-6-10
在线时间
223 小时
发表于 2015-9-29 11:07:22 | 显示全部楼层
加看门狗吧   死机复位
回复

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-12-22
在线时间
9 小时
 楼主| 发表于 2015-9-29 11:16:12 | 显示全部楼层
回复【3楼】止天:
---------------------------------
我现在每四个小时都复位,但是还是不行
回复

使用道具 举报

8

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2013-9-5
在线时间
31 小时
发表于 2015-9-29 11:23:59 | 显示全部楼层
SIM900A用的什么天线
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1606
金钱
1606
注册时间
2015-6-10
在线时间
223 小时
发表于 2015-9-29 11:39:16 | 显示全部楼层
死在了什么地方?
回复

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-12-22
在线时间
9 小时
 楼主| 发表于 2015-9-29 12:07:12 | 显示全部楼层
回复【5楼】kuanglf:
---------------------------------
弹簧天线
回复

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-12-22
在线时间
9 小时
 楼主| 发表于 2015-9-29 12:10:11 | 显示全部楼层
回复【6楼】止天:
---------------------------------
 暂时还不知道,在线调试hard fault
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-9-29 13:14:14 | 显示全部楼层
最简单的解决办法
 在hard_fault中断里软件复位,
void HardFault_Handler(void)
{
   SCB->AIRCR = 0x05FA0004;        //软件复位
  /* Go to infinite loop when Hard Fault exception occurs */
  while (1)
  {

  }
}不过这个治标不治本,真正的问题还是找出溢出位置。
 如果是串口通讯的话:
主要检查串口缓存部分有没有溢出,如果用FIFO的话,这里面多1少1很容易出现数组越界的,需要仔细检查。
还有吧启动文件里面堆和栈改大,还有最好不要使用动态内存,不然内存碎片过多导致申请失败,如果你没添加相应的错误处理,而直接使用也会出现硬件错误
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1606
金钱
1606
注册时间
2015-6-10
在线时间
223 小时
发表于 2015-9-29 13:34:10 | 显示全部楼层
回复【8楼】bloody41760:
---------------------------------
要是void HardFault_Handler(void) 

 while (1) 
  { }
}
 这句里面的话  把while(1)屏蔽掉 然后加个断点,再然后单步执行,看执行到哪里

还有看寄存器的方法————————我不会

还有一个就是调试的好也可能有影响,有的就是把调试去了就没问题了
回复

使用道具 举报

8

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2013-9-5
在线时间
31 小时
发表于 2015-9-29 14:51:44 | 显示全部楼层
回复【7楼】bloody41760:
---------------------------------
我打了块板子,也是STM32配SIM900A,装的天线离板子近就会死机,把天线引出去就不死了。
死机不一定是软件问题。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-9-29 21:36:40 | 显示全部楼层
加printf,打印日志,辅助分析问题.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-12-22
在线时间
9 小时
 楼主| 发表于 2015-9-30 13:54:07 | 显示全部楼层
回复【9楼】zc123:
---------------------------------
缓存这部分我已经再三确认过没有溢出的问题,也没有使用动态内存,哎,能想到的问题我都想过了,,,真是苦恼十一都没得休息了
回复

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-12-22
在线时间
9 小时
 楼主| 发表于 2015-9-30 13:54:47 | 显示全部楼层
回复【11楼】kuanglf:
---------------------------------
这个应该不是如果是天线问题的话应该不会要等这么长时间才出现问题
回复

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-12-22
在线时间
9 小时
 楼主| 发表于 2015-9-30 13:55:39 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
我分段看看出现在哪两个程序段之间吧要不,主要这玩意要等好长时间才能重现问题
回复

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-12-22
在线时间
9 小时
 楼主| 发表于 2015-9-30 13:56:29 | 显示全部楼层
回复【10楼】止天:
---------------------------------
多谢多谢
回复

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-12-22
在线时间
9 小时
 楼主| 发表于 2015-12-28 15:37:36 | 显示全部楼层
这个问题我之前还真是一直没有在意过,在串口中断里面一定要加上
if(USART_GetFlagStatus(USART2, USART_FLAG_ORE) != RESET)
        {
                USART_ClearFlag(USART2,USART_FLAG_ORE);
                USART_ReceiveData(USART2);
                //(u16)(USART2->DR & (u16)0x01FF);
        }
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13129
金钱
13129
注册时间
2012-11-26
在线时间
3814 小时
发表于 2015-12-28 15:40:15 | 显示全部楼层
bloody41760 发表于 2015-12-28 15:37
这个问题我之前还真是一直没有在意过,在串口中断里面一定要加上
if(USART_GetFlagStatus(USART2, USART_F ...

需要专门加清标志位语句?

我记得库函数读完数据,自动清标志位来着
学无止境
回复

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-12-22
在线时间
9 小时
 楼主| 发表于 2015-12-28 15:51:23 | 显示全部楼层
jermy_z 发表于 2015-12-28 15:40
需要专门加清标志位语句?

我记得库函数读完数据,自动清标志位来着

不是清标志,这个好像是溢出错误,不清会一直进串口中断
回复

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-12-22
在线时间
9 小时
 楼主| 发表于 2015-12-28 16:51:17 | 显示全部楼层
jermy_z 发表于 2015-12-28 16:00
嗯  刚搜了一下,好像是STM32的BUG

http://blog.csdn.net/love_maomao/article/details/8234039

你搜这个好,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 22:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表