dsp和pc通信,串口丢数据问题

wyly 2004-08-10 03:39:39
我用pc串口和dsp通信
dsp自己收发环回没问题的。

dsp收,pc发也没问题

dsp发,pc收就会丢少量的数据。

我开始怀疑是rts流控制没做好,用示波器抓数据,没发现rts信号激活,就是说没有流控的问题,所以很奇怪。

pc我用同步阻塞模式,设置如下,哪位大侠帮我看看:

GetCommState(hCom, &dcb ) ; //读串口原来的参数设置
dcb.BaudRate = 115200;
dcb.ByteSize =8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT ;
dcb.fBinary = TRUE ;
dcb.fParity = FALSE;
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; // 流控制打开
...全文
301 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyly 2004-08-13
  • 打赏
  • 举报
回复
呵呵,我顶。
有什么问题你说嘛
AthlonxpX86 2004-08-13
  • 打赏
  • 举报
回复
回复人: AthlonxpX86(桃源村) ( ) 信誉:143 2004-08-12 19:11:00 得分: 0
丢失数据根本与你的这段代码无关,尽管你的这段代码有很严重的问题,但问题应该在DSP或者你的别的程序,肯定与串口发送接收无关(我用PC在98下试验了,没有任何数据丢失)


AthlonxpX86 2004-08-12
  • 打赏
  • 举报
回复
丢失数据根本与你的这段代码无关,尽管你的这段代码有很严重的问题,问题应该在DSP或者你的别的程序,肯定与串口发送接收无关(我用PC在98下试验了,没有任何数据丢失)
wyly 2004-08-12
  • 打赏
  • 举报
回复
我顶
wyly 2004-08-11
  • 打赏
  • 举报
回复
不是波特率的问题,无论什么波特率都丢0xd,0xa这两个字符。
应该是打开文件的设置问题,能不能设成非字符方式??
zhangnanonnet 2004-08-11
  • 打赏
  • 举报
回复
你把波特率调小点试试。
wyly 2004-08-11
  • 打赏
  • 举报
回复
unsigned int ReadUart(byte* buf)
{
unsigned long len;

ReadFile(hCom, buf, 1024, &len, NULL);

return len;
}
basboy 2004-08-11
  • 打赏
  • 举报
回复
请贴上你用来接收数据的程序段
wyly 2004-08-11
  • 打赏
  • 举报
回复
原来丢的都是0x0d, 0x0a,回车换行
哈哈哈,我代码如下,怎么解决这个问题


hCom = CreateFile("COM2",GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
//FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
FILE_ATTRIBUTE_NORMAL,
NULL);

if(hCom == INVALID_HANDLE_VALUE)
return 0;

SetupComm( hCom, 4096, 4096 ) ;
PurgeComm( hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR ) ;

COMMTIMEOUTS CommTimeOuts ;
CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF ;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 1000; // 读取数据延时的时间
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 1000 ;

SetCommTimeouts( hCom, &CommTimeOuts ) ;//设置读写操作所允许的超时

DCB dcb ;
GetCommState(hCom, &dcb ) ; //读串口原来的参数设置
dcb.BaudRate = 115200;
dcb.ByteSize =8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT ;
dcb.fBinary = TRUE ;
dcb.fParity = FALSE;
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
SetCommState(hCom, &dcb ) ;
AthlonxpX86 2004-08-11
  • 打赏
  • 举报
回复
邮箱yds_086@163.com
AthlonxpX86 2004-08-11
  • 打赏
  • 举报
回复
不是这部分代码!这和串口接受部分无关,应该是你的数据处理方面的问题,如果没有利益问题,可以发我邮箱,来给你调试。
你的程序肯定会出现问题

unsigned int ReadUart(byte* buf)
没有串口通知你你怎么知道什么时候接受,而且一接受就是1024,这根本不符合串口编程思想,肯定会产生问题
wyly 2004-08-11
  • 打赏
  • 举报
回复
设置串口
huahCom = CreateFile("COM2",GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
//FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
FILE_ATTRIBUTE_NORMAL,
NULL);

if(hCom == INVALID_HANDLE_VALUE)
return 0;

SetupComm( hCom, 4096, 4096 ) ;
PurgeComm( hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR ) ;

COMMTIMEOUTS CommTimeOuts ;
CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF ;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 1000; // 读取数据延时的时间
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 1000 ;

SetCommTimeouts( hCom, &CommTimeOuts ) ;//设置读写操作所允许的超时

DCB dcb ;
GetCommState(hCom, &dcb ) ; //读串口原来的参数设置
dcb.BaudRate = 115200;
dcb.ByteSize =8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT ;
dcb.fBinary = TRUE ;
dcb.fParity = FALSE;
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
SetCommState(hCom, &dcb ) ;

读取串口
unsigned int ReadUart(byte* buf)
{
unsigned long len;

ReadFile(hCom, buf, 1024, &len, NULL);

return len;
}
AthlonxpX86 2004-08-11
  • 打赏
  • 举报
回复
贴出你的代码我给你改
wyly 2004-08-11
  • 打赏
  • 举报
回复
怎么设置打开文件到非字符方式?
AthlonxpX86 2004-08-11
  • 打赏
  • 举报
回复
读文件
Createfile
Readfile
yxlab 2004-08-10
  • 打赏
  • 举报
回复
串口的速度反应不够快。时序要同步好。
oyljerry 2004-08-10
  • 打赏
  • 举报
回复
是不是串口接收的时候有数据丢失呢?
AthlonxpX86 2004-08-10
  • 打赏
  • 举报
回复
我怀疑是软件问题,在Nt/2000下阻塞方式的串口程序很容易使程序死掉,你看看丢失的数据在大概都出现在什么地方
115200有点高
dcb.Parity = NOPARITY;无效验?我想这是最大的问题之一,连续的大数据量的传输,无效验怎么能行??
phant 2004-08-10
  • 打赏
  • 举报
回复
我给你一个好用的类http://www.codeproject.com/system/serial.asp,这比MSCOMM好用的多,而且支持MFC。支持消息映射。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧