windows下串口初步编程(多线程+windows串口)
来源:互联网 发布:带mp3 解码 单片机 编辑:程序博客网 时间:2024/06/16 07:55
环境
win10操作系统
编程环境:Eclipse、Cygwin GCC编译器
串口环境:串口调试助手v2.1、 虚拟串口助手(Virtual Serial Port Driver 7.2)
过程
1. 在Eclipse环境下新建一个C++工程,并指定使用Cygwin GCC编译器
2. 新建cpp文件,输入代码
3. 打开虚拟串口助手和串口调试助手,建立串口调试的环境
4. 编译和运行
说明
1. 串口作为一种接口,标准C中均使用fopen函数打开,但是该函数在windows系统下无法操作串口;
2. windows封装了接口操作,使用createfile函数操作;
3. 使用createthread创建两个线程,分别执行串口的读和写操作。
代码
#include <windows.h>#include <stdio.h>HANDLE hCom;//句柄,用于初始化串口DWORD WINAPI ThreadWrite(LPVOID lpParameter)//进程1{char outputData[100]={0x00};//输出数据缓存if( hCom==INVALID_HANDLE_VALUE ){puts("打开串口失败");return 0;}DWORD strLength = 0;while(1){for(int i=0;i<100;i++){outputData[i]=0;}fgets(outputData,100,stdin); // 从控制台输入字符串strLength = strlen(outputData);printf("string length is %d\n",strLength); // 打印字符串长度WriteFile(hCom,outputData,strLength,&strLength,NULL); // 串口发送字符串fflush(stdout);PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR); //清空缓冲区Sleep(100);}return 0;}DWORD WINAPI ThreadRead(LPVOID lpParameter){if( hCom==INVALID_HANDLE_VALUE ) //INVALID_HANDLE_VALUE表示出错,会设置GetLastError{puts("打开串口失败");return 0;}char getputData[100]={0x00};//输入数据缓存// 利用错误信息来获取进入串口缓冲区数据的字节数DWORD dwErrors; // 错误信息COMSTAT Rcs; // COMSTAT结构通信设备的当前信息int Len=0;DWORD length = 100; //用来接收读取的字节数while(1){for(int i=0;i<100;i++){getputData[i]=0;}ClearCommError(hCom,&dwErrors,&Rcs); // 获取读缓冲区数据长度Len = Rcs.cbInQue;ReadFile(hCom,getputData,Len,&length,NULL); //获取字符串PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR); //清空缓冲区if(Len>0){printf("%s\n",getputData);fflush(stdout);}Sleep(100);}return 0;}int main(){// 初始化串口hCom = CreateFile(TEXT("COM2"), GENERIC_READ | GENERIC_WRITE , 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);// 获取和设置串口参数DCB myDCB;GetCommState(hCom, &myDCB); // 获取串口参数printf("baud rate is %d",(int)myDCB.BaudRate);fflush(stdout);myDCB.BaudRate = 9600; // 波特率myDCB.Parity = NOPARITY; // 校验位myDCB.ByteSize = 8; // 数据位myDCB.StopBits = ONESTOPBIT; // 停止位SetCommState(hCom, &myDCB); // 设置串口参数// 线程创建HANDLE HRead,HWrite;HWrite = CreateThread(NULL,0,ThreadWrite,NULL,0,NULL);HRead = CreateThread(NULL,0,ThreadRead,NULL,0,NULL);while(1){;}CloseHandle(HRead);CloseHandle(HWrite);return 0;}
[20170713]
阅读全文
0 0
- windows下串口初步编程(多线程+windows串口)
- Windows 下串口编程
- windows串口编程(2)
- Windows串口编程
- Windows串口编程
- Windows API 串口编程
- Windows API串口编程
- windows 串口编程例子
- windows 串口编程
- windows串口编程
- windows串口编程
- windows串口编程
- windows串口编程文章
- windows串口编程
- Windows API 串口编程
- Windows 串口编程例子
- WINDOWS API串口编程
- Windows API串口编程
- .net调用java发布的webservice soap报错
- JAVA将Id相同数据中重复列转化成一条
- vue初体验-单页web应用练习
- 《云计算架构技术与实践》读书笔记(三):容器开源软件和大数据开源软件
- SLG手游Java服务器的设计与开发——架构分析
- windows下串口初步编程(多线程+windows串口)
- MySQL 5.6.21版本安装实例
- 关于错误:ORA-12592: TNS: 包错误 和 Io 异常: Connection reset by peer: socket write error
- 一篇文章让你看清楚运维的发展方向
- 关于ios循环引用
- Spring Data Redis(Repositories-Object to Hash Mapping)
- java8获取当前时间并格式化
- Hadoop中hdfs的读写过程
- Android开发的4个月里