WhyCan Forum

本站无需注册,无需积分,无需回复可下载所有资料,如果真的喜欢小站,请您注册之后请至少回复一个帖子激活Id,谢谢支持! 站长QQ: 516333132 (挖坑网/填坑网) admin@whycan.cn

您尚未登录。

#1 2019-06-01 10:29:44

微凉VeiLiang
会员
注册时间: 2018-10-28
累计积分: 125

讨论一个串口发送接收问题,是FIFO半空时候继续发还是等FIFO空的时候继续发

一般接收方式分几种:
1.来一个字节中断,接收一个字节。(耗CPU,接收不会漏)
2.接收FIFO达到一定阀值的时候中断,接收数据 (不耗CPU,但接收小于阀值的数据量可能会不及时)
3.接收FIFO达到一定阀值的时候中断,接收数据,串口数据超时也进行中断,接收数据。(不耗CPU,数据接收也完整)
一般在使用过程中,我都会选择第三种,有的MCU没有串口超时中断,我也会自己做个定时器去做

发送:
串口发送数据的时候。应该都是一个一个字节发,调用一个UartPutCha函数。
UartPutChar里面常规都是先一个while等待,再进行发下一个,那么问题来了。
while等待的条件也分两种
1.发送FIFO Not Full,或者FIFI  Not Halt
2.发送FIFO Empty

一般来说调试的时候我会选择第二个,因为这样打印数据实时可以定位到代码运行的位置
但是在实际应用中,应该选第几个呢,有没有什么讲究呢

讨论这个问题主要是因为,最近客户有说到我们设备串口发送的数据(一般都是无协议的,客户端按照一帧来收,有超时中断为一帧)他们接收总是会有点问题,一帧数据分成几帧接收不完整。但是我们给的工具接收数据(C#写的)没有问题。所以说不知道是不是因为while等待这个原因

最近编辑记录 微凉VeiLiang (2019-06-01 10:41:55)

离线

#2 2019-06-03 08:55:29

Jmhh247
会员
注册时间: 2018-12-21
累计积分: 88

Re: 讨论一个串口发送接收问题,是FIFO半空时候继续发还是等FIFO空的时候继续发

即然是客户接收有问题,无论你用何种方式都避免不了,只是看几率大小

要解决问题,还是得让客户改程序。按照你的描述,客户的程序得拼帧。

离线

#3 2019-06-03 09:32:55

dgtg
会员
注册时间: 2017-11-08
累计积分: 98

Re: 讨论一个串口发送接收问题,是FIFO半空时候继续发还是等FIFO空的时候继续发

发送和接收两个FIFO,
接收的时候,我是半FIFO中断一次,
发送的时候,只要FIFO不满,就一直往里面丢数据...
一直这样用,暂时没发现问题...

离线

页脚