norman33 发表于 2016-5-5 21:05:04

关于STM8S003F3串口问题

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

power568 发表于 2016-5-6 13:17:11

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

wtliu 发表于 2016-5-6 09:50:02

使用分时操作,把数据处理和发送分开处理,处理好的数据放入缓存。发送按先进先出原则发缓存数据即可。

wenyangzeng 发表于 2016-5-6 11:04:15

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

sfee2002 发表于 2016-5-6 11:06:18

9600波特率,1个字节约1ms。40ms发送18个字节应该没有问题。发送用中断,这是是硬件控制的,速度很快。应该没有问题

huaiqiao 发表于 2016-5-6 11:31:18

stm8没有用过,但是我想您先确认硬件电路没有问题,时钟这些的都配置ok,再去尝试设置较低的波特率看看。

dwwzl 发表于 2016-5-6 13:56:30

把时钟设为默认16MHz,程序结构合理的话,应该没有问题的,我就做到20ms不出现丢包现象:P

liyiui 发表于 2016-5-6 15:54:58

楼主时序没有处理好

zcl201207 发表于 2016-5-6 19:55:54

:):):):):):)

嘻呵哈嘿吼 发表于 2016-5-7 11:26:30

还没用过STM8做过串口项目,学点经验知识:lol
页: [1] 2
查看完整版本: 关于STM8S003F3串口问题