一般接收方式分几种:
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)
离线
即然是客户接收有问题,无论你用何种方式都避免不了,只是看几率大小
要解决问题,还是得让客户改程序。按照你的描述,客户的程序得拼帧。
离线
发送和接收两个FIFO,
接收的时候,我是半FIFO中断一次,
发送的时候,只要FIFO不满,就一直往里面丢数据...
一直这样用,暂时没发现问题...
离线