你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM8S003F3串口问题

[复制链接]
norman33 提问时间:2016-5-5 21:05 /
接手一个研发任务,使用的是STM8S003F3,这个产品需要接受约以40ms间隔发送并回复的485数据帧,帧长度为8字节到18字节不等,使用中发现STM8S003F3在如此短间隔内无法完全处理完所有的数据帧,也就是丢包。丢包率大概在1%左右,不知道有没有朋友遇到过这种情况并有解决的办法。由于设备比较特殊,预期丢包率不应该高于万分之一,通信模式为自定义协议 485 8bit 9600 1stopBit parity-none
收藏 评论10 发布时间:2016-5-5 21:05

举报

10个回答
power568 回答时间:2016-5-6 13:17:11
按照你的通讯参数,时间应该比较紧凑,特别是当数据接收和恢复都是18字节时,光通讯时间就大约消耗了38ms, 提供如下建议:
0. 如果条件允许,可把波特率提高一个档次;
1. 丢包,首先你要确认是数据没收到还是解析出错;
2. 使用中断接收,接收的数据放入缓存;
3. 读取缓存并解析数据,解析后的数据可以直接发送,
4. 增加数据包校验机制,如CRC8、CRC16等等,设置累加和也可以。

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

wtliu 回答时间:2016-5-6 09:50:02
使用分时操作,把数据处理和发送分开处理,处理好的数据放入缓存。发送按先进先出原则发缓存数据即可。

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

wenyangzeng 回答时间:2016-5-6 11:04:15
较低的波特率误码率会降低,这个485通讯波特率设置9600在40ms传输18字节时间绰绰有余,另外必须进行CRC校验才能保证数据传输的可靠。

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

sfee2002 回答时间:2016-5-6 11:06:18
9600波特率,1个字节约1ms。40ms发送18个字节应该没有问题。发送用中断,这是是硬件控制的,速度很快。应该没有问题

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

huaiqiao 回答时间:2016-5-6 11:31:18
stm8没有用过,但是我想您先确认硬件电路没有问题,时钟这些的都配置ok,再去尝试设置较低的波特率看看。
dwwzl 回答时间:2016-5-6 13:56:30
把时钟设为默认16MHz,程序结构合理的话,应该没有问题的,我就做到20ms不出现丢包现象

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

liyiui 回答时间:2016-5-6 15:54:58
楼主时序没有处理好

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

zcl201207 回答时间:2016-5-6 19:55:54
嘻呵哈嘿吼 回答时间:2016-5-7 11:26:30
还没用过STM8做过串口项目,学点经验知识
lcdi 回答时间:2016-5-9 11:30:48
首先确定你的丢包是不是硬件或者线路原因。
你确定是由于MCU处理不及时丢包?可以在程序里测试检验。
再者你的程序结构是否合理,收一个包的时候MCU是否需要一直等待直到收完。发送同理?这样操作效率很低。
简单地说就是你梳理一下程序流程,是否MCU有时空闲不干活而有时数据包又处理不及时,这样就需要改进程序结构。怎么改要具体看你的程序结构如何?还有其他功能需要的MCU时间。

最后如果程序结构良好,没有浪费的MCU时间,那只能说stm8计算速度不够,那只能换MCU了。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版