在windows下,各种外设都被看成文件,这个跟Linux下看成设备节点类似,所以串口当然是被看成是一个文件。既然被看成文件,所以打开和读写都跟文件类似。
打开串口跟打开文件一样,Win32下就是CreateFile函数,比如下面就采用同步模式打开一个COM1口: CreateFile(TEXT("COM1"), GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
异步模式打开时,需要将倒数第二个参数设为FILE_FLAG_OVERLAPPED。
打开串口后,需要设置超时和串口参数,超时用SetCommTimeouts函数,设置波特率、数据位、校验位、停止位等使用SetCommState函数。
串口发送其实就是串口作为文件的写操作,API函数是WriteFile,比如下面的实例就向同步模式打开的串口发送buffer中的数据: WriteFile(hComm, buffer, dwSendLen, &dwActlen, NULL);
同步模式发送数据时,是阻塞式的,也就是没有发送完是不会返回来。要是异步模式发送,则调用后马上返回而不管是否发送完毕,发送的具体工作交给后台进行,当真正发送完毕后通过事件通知应用程序。
串口接收其实就是串口作为文件的读操作,API函数是ReadFile,下面就是同步模式下的将串口数据读到buffer中: ReadFile(hComm, buffer, dwReadLen, &dwActlen, NULL);
同步模式接收数据时,也是阻塞式的,在希望读取的字节数没有完成时是不会返回的。异步模式则马上返回,如果没有发送完毕,则交由后台发送。后台完成发送工作后用事件方式通知应用程序。
以上就是Windows下的串口发送和接收,具体API函数的详细用法,可以参考MSDN。只要好好阅读相关的每个函数,完成基本的串口通信就没有问题。