关于STM8S003F3串口问题
接手一个研发任务,使用的是STM8S003F3,这个产品需要接受约以40ms间隔发送并回复的485数据帧,帧长度为8字节到18字节不等,使用中发现STM8S003F3在如此短间隔内无法完全处理完所有的数据帧,也就是丢包。丢包率大概在1%左右,不知道有没有朋友遇到过这种情况并有解决的办法。由于设备比较特殊,预期丢包率不应该高于万分之一,通信模式为自定义协议 485 8bit 9600 1stopBit parity-none 按照你的通讯参数,时间应该比较紧凑,特别是当数据接收和恢复都是18字节时,光通讯时间就大约消耗了38ms, 提供如下建议:0. 如果条件允许,可把波特率提高一个档次;
1. 丢包,首先你要确认是数据没收到还是解析出错;
2. 使用中断接收,接收的数据放入缓存;
3. 读取缓存并解析数据,解析后的数据可以直接发送,
4. 增加数据包校验机制,如CRC8、CRC16等等,设置累加和也可以。
使用分时操作,把数据处理和发送分开处理,处理好的数据放入缓存。发送按先进先出原则发缓存数据即可。 较低的波特率误码率会降低,这个485通讯波特率设置9600在40ms传输18字节时间绰绰有余,另外必须进行CRC校验才能保证数据传输的可靠。 9600波特率,1个字节约1ms。40ms发送18个字节应该没有问题。发送用中断,这是是硬件控制的,速度很快。应该没有问题 stm8没有用过,但是我想您先确认硬件电路没有问题,时钟这些的都配置ok,再去尝试设置较低的波特率看看。 把时钟设为默认16MHz,程序结构合理的话,应该没有问题的,我就做到20ms不出现丢包现象:P 楼主时序没有处理好 :):):):):):) 还没用过STM8做过串口项目,学点经验知识:lol
页:
[1]
2