第一次做串口程序,请指教

Persistent8813 2006-04-20 12:34:13
为什么下面的程序可以打开串口却总是读写不成功呢?

void __fastcall TForm1::Button1Click(TObject *Sender)
{
hCommFile=CreateFile("COM2", //串口号
GENERIC_READ|GENERIC_WRITE, //允许读写
0, //通讯设备必须以独占方式打开
NULL, //无安全属性
OPEN_EXISTING, //通讯设备已存在
FILE_FLAG_OVERLAPPED, //异步I/O
0); //通讯设备不能用模板打开

if ( hCommFile == INVALID_HANDLE_VALUE )
{
MessageBox( 0, "打开通信端口错误!!", "设备错误", MB_OK );
return;
}

// 设置设备属性
DCB dcb; // TDCB 串口的设备控制块,定义串口通信时使用的波特率,停止位,校验方法等。
dcb.BaudRate = CBR_9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;

if (!SetCommState(hCommFile,&dcb))
{
MessageBox( 0, "通信端口设置错误!!!", "设置错误", MB_OK);
CloseHandle( hCommFile );
Button2->Enabled=true;
Button2->Enabled=false;
Button3->Enabled=false;
Button4->Enabled=false;
Shape1->Brush->Color=clRed;
}
else
{
Button1->Enabled=false;
Button2->Enabled=true;
Button3->Enabled=true;
Button4->Enabled=true;
Shape1->Brush->Color=clGreen;
}
// 读设备数据
char strBuffer[1024]="asdf";
// ZeroMemory(strBuffer,sizeof(strBuffer));
ShowMessage(AnsiString(strBuffer));
DWORD dwReadNum;
if(ReadFile(hCommFile,&strBuffer,1024,&dwReadNum,NULL))
ShowMessage(AnsiString(strBuffer));
else
ShowMessage("读取不成功!");

}
...全文
329 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2006-04-21
  • 打赏
  • 举报
回复
把DCB dcb设置完全
海嵌 2006-04-21
  • 打赏
  • 举报
回复
DCB dcb;
GetCommState(hCommFile,&dcb); ////加上这句看看
dcb.BaudRate = CBR_9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
cczlp 2006-04-21
  • 打赏
  • 举报
回复
异步通讯应该线程,让线程去等待。
kmfangxun 2006-04-21
  • 打赏
  • 举报
回复
你用异步方式打开串口,却用同步方式读取,当然读不到数据。

试试用同步方式打开串口。

hCommFile=CreateFile("COM2", //串口号
GENERIC_READ|GENERIC_WRITE, //允许读写
0, //通讯设备必须以独占方式打开
NULL, //无安全属性
OPEN_EXISTING, //通讯设备已存在
NULL,
0); //通讯设备不能用模板打开
taozc 2006-04-20
  • 打赏
  • 举报
回复
接收的时候需要用循环判断缓冲里面有没有数据到达,可以设置一个超时时间,超过时间就算接收失败。
Persistent8813 2006-04-20
  • 打赏
  • 举报
回复
谢谢各位,这些我都看过了。我只是想知道用API直接做应该如何做的。又看了许多资料,是不是一定要加一个辅助线程呢?是不是不加辅助线程就不能接收数据呢?
ccrun.com 2006-04-20
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/viewdoc/?id=1322
netsys2 2006-04-20
  • 打赏
  • 举报
回复
用这个控件吧:

Victor 串口 VCL 控件,版本 1.3.3.4 for BCB 5 & BCB 6
C++爱好者: http://www.cppfans.com/

【软件简介】
简单实用, 功能强大的 C++ Builder 串口控件!
本控件是免费的, 不需要注册, 有关授权及许可协议详见 license.txt 文件。
FengSC 2006-04-20
  • 打赏
  • 举报
回复
没有仔细看,不过这段代码应该是98的,在2000下使用应该是有问题。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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