9.串口操作之API篇 ReadFile WriteFile CloseHandle 及总结

ReadFile: 读取串口接收缓冲区内的数据.
WriteFile: 将数据写入串口发送缓冲区.
CloseHandle: 关闭用CreateFile打开的串口句柄.Windows的内核对象,大多都是用这个函数来关闭句柄.

1 function ReadFile(hFile: THandle; var Buffer; nNumberOfBytesToRead: DWORD;   
2 var lpNumberOfBytesRead: DWORD; lpOverlapped: POverlapped): BOOL; stdcall;
3 function WriteFile(hFile: THandle; const Buffer; nNumberOfBytesToWrite: DWORD;
4 var lpNumberOfBytesWritten: DWORD; lpOverlapped: POverlapped): BOOL; stdcall;
5 function CloseHandle(hObject: THandle): BOOL; stdcall;

这2个函数貌似没太多的好说.CnRs232里写的很详细,有兴趣自己写串口组件的话,可以参考SPComm和CnRS232的源代码.

下面大概描述一下另外一种操作方式,效率比重叠I/O要低.但是很适合应答式串口设备使用.如果是非应答式,还是用事件方式比较好.尤其是重叠I/O方式,效率较高,把轮询交给系统内核去做.

1.发送命令.
2.等待发送结束.
3.轮询接收缓冲区,等待接收完整数据或者超时
4.处理接收回来的数据.

这样做可以明确知道接收的数据是由什么命令发送而返回的.

用事件方式的话,需要在发送命令后,定义一个属性来记录最后一个命令是什么,当接收事件触发,并满足接收条件后,更新这个属性.超时也要做这样的操作.

串口介绍完了..

原文地址:https://www.cnblogs.com/solokey/p/2126602.html