串口通信常用API详解

本文详细探讨了串口通信中常用的API,包括初始化、发送数据、接收数据和关闭串口等关键操作,旨在帮助开发者更好地理解和应用串口通信技术。
摘要由CSDN通过智能技术生成
一、CreateFile() 


用途:打开串口 
原型:HANDLE CreateFile(LPCTSTR lpFileName, 
DWORD dwDesired Access
DWORD dwShareMode, 
LPSECUR IT Y_ATTRIBUTES lpSecurityAttributes, 
DWORD dwCreationDistribution, 
DWORD dwFlagsAndAttributes, 
HANDLE hTemplateFile); 
参数说明: 
-lpFileName:要打开的文件名称。对串口通信来说就是COM1或COM2。 
-dwDesired Access :读写模式设置。此处应该用GENERIC_READ及GENERIC_WR IT E。 
-dwShareMode:串口共享模式。此处不允许其他应用程序共享,应为0。 
-lpSecurityAttributes:串口的安全属性,应为0,表示该串口不可被子程序继承。 
-dwCreationDistribution:创建文件的性质,此处为OPEN_EXISTING. 
-dwFlagsAndAttributes:属性及相关标志,这里使用异步方式应该用FILE_FLAG_OVERLAPPED。 
-hTemplateFile:此处为0。 
操作说明:若文件打开成功,串口即可使用了,该函数返回串口的句柄,以后对串口操作时 
即可使用该句柄。 
举例:HANDLE hComm; 
hComm=CreateFile("COM1", //串口号 
GENERIC_READ|GENERIC_WR IT E, //允许读写 
0, //通讯设备必须以独占方式打开 
NULL, //无安全属性 
OPEN_EXISTING, //通讯设备已存在 
FILE_FLAG_OVERLAPPED, //异步I/O 
0); //通讯设备不能用模板打开 
hComm即为函数返回的串口1的句柄。

二、CloseHandle() 

用途:关闭串口 
原型:BOOL CloseHandle(HANDLE hObjedt) 
参数说明: 
-hObjedt:串口句柄 
操作说明:成功关闭串口时返回true,否则返回false 
举例:CloseHandle(hComm); 

三、GetCommState() 

用途:取得串口当前状态 
原型:BOOL GetCommState(HANDLE hFile, 
LPDCB lpDCB); 
参数说明: 
-hFile:串口句柄 
-lpDCB:设备控制块(Device Control Block)结构地址。此结构中含有和设备相关的 
参数。此处是与串口相关的参数。由于参数非常多,当需要设置串口参数 
时,通常是先取得串口的参数结构,修改部分参数后再将参数结构写入。 
原先的程序数据缓冲区采用String类型,因此无法发送H00,现将数据缓冲区修改为BLOB类型,可以发送任意数据。 在原先程序的基础上,增加了两个对象:pfc_n_cst_numerical,uo_bit_operator Email: leio88@126.com 以下是原作者的话---------------------------------- 本程序通过调用WINDOWS API函数,实现了类似MSCOMM控件的功能。使PB可以很方便地访问串口。由于所有功能都是PB代码实现的,因此比使用OCX控件访问串口的方式更稳定。 为了方便使用已将所有功能都封装在uo_comm._control用户对象中。使用时只需在窗口中像放置普通对象(如:按钮)一样放置一个uo_comm_control对象即可对串口进行访问。 访问串口时先调用of_setcommport(string commport)和of_setcommsettings(string commsettings)来设置要访问的端口及端口初始化参数,然后调用of_open()初始化端口。或直接使用of_open(string comport,string commsettings)带参数初始化端口。端口初始化成功后即可使用of_send(string sendstring)向串口发送数据,或使用of_read()读取串口数据。当串口有数据到达时,触发ue_received事件,该事件提供给用户用来存放读取串口数据的代码(值得注意的是,当数据到达接收端时,由于发送的数据很长或通讯速率较低,会多次触发ue_receieved事件,并且在ue_received事件中使用of_read()得到的数据仅只是整个发送数据的一部分,需要将多次接收到的数据连接起来才是完整的接收数据)。若对串口所有操作结束不再需要对串口进行操作,则调用of_close()将端口关闭。 Email: blazingstar@sina.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值