硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3746|回复: 10
收起左侧

[有问必答] STM32F103串口3与电脑通讯,200ms周期发送测试死机

[复制链接]

2

主题

7

回帖

13

积分

新手上路

积分
13
发表于 2020-12-12 18:35:06 | 显示全部楼层 |阅读模式
STM32F103芯片,本人自己组织工程代码,串口1用于打印调试,串口3用于与电脑端网页程序通讯,偶尔出现程序卡死,电脑不能正常通信,只能重启板子解决。一开始也没在意,后来这种情况不是偶尔了,比较频繁。 现将排查过程说明如下:

1 首先  集成cmbacktrace,看看堆栈情况,死在哪个文件哪一行,很不幸pc值为0x80000000,查不到
2 因此  怀疑是不是堆栈的问题,中断的问题,中间省略5000字,哎。。。无果
3 偶然  从论坛看到 keil 仿真串口方式,需要虚拟串口软件配合,虚拟配对串口com5,com6,keil仿真界面左下角输入MODE COM6 115200,0,8,1  和 ASSIGN COM6 <S3IN>S3OUT,将com6和uart3链接,串口工具链接com5,每隔200ms发一次数据,4,5次就把我的程序挂住了,但是就是不知挂在何处。

4 毅然   抛弃自有代码,用硬汉的V4-003_串口和PC机通信(串口中断、FIFO机制)工程做试验,如果可以直接用就好了,好事情是仿真运行不会挂住了,我猜因为fifo的原因吧,but 200ms 还是会丢数据

5 崩溃! 我想之前我写的程序死机,挂住可能也是丢数据导致的,写的比较简陋。将业务代码与硬汉的工程合并上传,希望硬汉兄帮帮忙!!!
6 跪谢!
V4-003-hyx.zip (9.56 MB, 下载次数: 6)

说明
PC<-->UART3 协议因为是js页面通信的原因,采用jsonp协议,为了解析方便,每个交互命令以 \r\n结尾

附加说明,keil仿真 串口链路:
pc 虚拟com5  <--> 虚拟com6 <--> keil uart3
pc串口工具接com5发一个命令,keil仿真起码要3,4秒时间才输出到uart3

实测板子,串口3与js脚本无法通信,

回复

使用道具 举报

73

主题

1195

回帖

1414

积分

至尊会员

积分
1414
发表于 2020-12-12 21:24:27 | 显示全部楼层
串口这么简单的应用应该不难啊
回复

使用道具 举报

5

主题

18

回帖

33

积分

新手上路

积分
33
发表于 2020-12-13 00:53:47 | 显示全部楼层
我之前也调一个JS的,不过是以太网接口,程序跑着跑着无缘无故死机,一开始也是怀疑各种堆栈,中断,任务优先级,后来找到问题了,原来是一处算缓冲长度的减法没有限制,导致溢出了,然后后面跟个memset,接下来就可想而知了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106912
QQ
发表于 2020-12-13 09:10:32 | 显示全部楼层
注意,如果是移植我们的程序,注意我们的串口3是485接口,你估计会在这个地方出错。
回复

使用道具 举报

2

主题

7

回帖

13

积分

新手上路

积分
13
 楼主| 发表于 2020-12-13 10:21:08 | 显示全部楼层
wdliming 发表于 2020-12-12 21:24
串口这么简单的应用应该不难啊

驱动这块比较菜,一直写业务层的,接触底层驱动少
回复

使用道具 举报

2

主题

7

回帖

13

积分

新手上路

积分
13
 楼主| 发表于 2020-12-13 10:22:36 | 显示全部楼层
eric2013 发表于 2020-12-13 09:10
注意,如果是移植我们的程序,注意我们的串口3是485接口,你估计会在这个地方出错。

硬汉兄提醒的非常正确,改正之后,硬件可以正常通信了。
回复

使用道具 举报

2

主题

7

回帖

13

积分

新手上路

积分
13
 楼主| 发表于 2020-12-13 11:15:20 | 显示全部楼层
硬汉兄,改正之后,仿真调试还是偶尔丢数据,周期200ms,中断处理加上错误代码处理,发现发生ore,这个是怎么回事,小弟无知
ore.png
附修改后的代码
V4-003-hyx.rar (7.28 MB, 下载次数: 2)
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2020-12-13 15:46:57 | 显示全部楼层
hyx 发表于 2020-12-13 11:15
硬汉兄,改正之后,仿真调试还是偶尔丢数据,周期200ms,中断处理加上错误代码处理,发现发生ore,这个是怎 ...

用HAL库吧,简单!STM32CubeMX配置一键完成
回复

使用道具 举报

6

主题

89

回帖

107

积分

初级会员

积分
107
发表于 2020-12-15 11:43:08 | 显示全部楼层
慢慢调,慢慢改吧,急啥,理清脉络,大年都是从菜鸟过来的,自己想办法解决,你的技术就提升了,
这串口东西还是简单的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106912
QQ
发表于 2020-12-16 08:37:58 | 显示全部楼层
hyx 发表于 2020-12-13 11:15
硬汉兄,改正之后,仿真调试还是偶尔丢数据,周期200ms,中断处理加上错误代码处理,发现发生ore,这个是怎 ...

从你的截图来看,你对程序修改的太多了。

你的问题应该和这位网友的一样:

STM32的UART,被长时间大量灌输数据后死机
http://www.armbbs.cn/forum.php?m ... 8956&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

6

主题

639

回帖

657

积分

金牌会员

积分
657
QQ
发表于 2020-12-18 16:00:21 | 显示全部楼层
建议楼主试试USART+DMA,不行就再开两个缓存轮流接收
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 15:47 , Processed in 0.209276 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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