各位,我最近调试一个东东,LPC2114用串口Uart0与电脑通讯。上位机程序是VC++6.0编的。工作顺序如下:首先电脑定时发送8字节读数指令,2114收到后返回8字节数据。问题是无论2114内的串口程序是中断的还是轮询的,电脑收到的数据总有丢包现象。电脑定时发送10ms一次时,丢包很严重,50ms一次就好一些。100ms没有丢包。2114倍频后44MHz,波特率115200。
我的程序中就这一个中断,按理说一个周期16个字节,10ms应该绰绰有余,串口不至于堵塞啊。苦恼中~
怎么回事啊,大家帮忙想想办法?
问题应该你的自己弄的那个用VC做的上位机软件,PC上的应用存在延时,楼主有没有认真关注过。
你的上位机软件在处理接收数据等存在问题,楼主好好审查下对应的代码。
建议楼主用找个串口调试助手试试,测试看看,估计不会这样;
另外关注下波特率,如果有示波器,则最好找个示波器,好好测试下。
先让2114收到后返回8字节PC读数指令看看,是不是PC8字节读数指令有丢的?
kyzf正解!强!
原先我用是这么查的:串口调试助手定时对2114发数,然后2114返回数据,发现有收不到数的现象。我以为是arm的问题。后来我用sscom3.2试了下,没有丢数,也不延时,才意识到是PC的问题。最后我精简了VC6.0的程序,基本只留串口收发,有点效果,但10ms还是有丢包。再一次陷入困境。纳闷人家sscom咋编的呢?还是VC6.0的串口控件不行?(sscom是c++builder编的)
此外,串口调试助手会丢数的,大家可试试。
我去年被这个问题搞的非常郁闷
因为WIN不是实时操作系统 所以在WIN下面的操作会有丢数据的
跟人家操作系统没关系
是lz的控件使用方式可能不对
其实偶不喜欢ms的串口控件,更倾向于自己写的串口类,创建一个线程专门接收
上位机接收部分处理的时间尽量缩短,避免阻塞。
必要的话,可以采用队列+多线程的处理方式
引用: 引用楼主 lesterlotte 的回复:
? ? ? 各位,我最近调试一个东东,LPC2114用串口Uart0与电脑通讯。上位机程序是VC++6.0编的。工作顺序如下:首先电脑定时发送8字节读数指令,2114收到后返回8字节数据。问题是无论2114内的串口程序是中断的还是轮询的,电脑收到的数据总有丢包现象。电脑定时发送10ms一次时,丢包很严重,50ms一次就好一些。100ms没有丢包。2114倍频后44MHz,波特率115200。
? ? 我的程序中就这一个中断,按理说一个周期16个字节,10ms应该绰绰有余,串口不至于堵塞啊。苦恼中~
? ? ? 怎么回事啊,大家帮忙想想办法?
1. 如果可能, 降低波特率。
2. PC软件是否使用的异步IO,如果可能的话贴出PC端串口通信处理的代码,大家可以进一步帮你分析问题的所在。
3. 如果丢包问题依然存在,增加容错机制。
楼主这种问题
是编写串口调试助手软件
最常需解决的问题
目前大家常用的
几种串口调试助手
以前见过他们的作者
讨论过这些问题
另外楼主的那个空间没用过
以前我用过另外一个控件
楼主还是直接调用API吧
这个问题啊,最好用分析仪调试一下你的串口上位机程序,马上能发现你的PC程序哪里有问题.
你现在缺乏调试手段,不知道问题出在哪里,就病急乱投医.
串口监视分析仪comspy V2.0大众普及版(2010/01/05更新)
http://www.armecos.com/freedown/down.asp?id=17&url=/down/good/comspy-v20.rar
本程序用于串口监视,不占用当前被测串口。
只要Windows系统能枚举出来的串口都可以监视,支持一次同时监视多个串口。
工程师必备工具---串口分析利器!!!
注册费仅¥39,一本书的价格!!!
就当买本书吧!!!