windows C语言读串口数据
来源:互联网 发布:java instrument 监控 编辑:程序博客网 时间:2024/05/21 03:16
(1)这种方式真的很奇怪,乍一看咋都不像打开串口的,但是真的可以打开。不过在这段代码里并没有配置串口,所以必须借助串口助手才可以,就是先用串口助手打开串口,然后这段程序才可以正常运行。可能是因为在串口助手里已经配置好了串口。
#include<stdio.h>#include<windows.h>int main(){FILE *fp;if ((fp = fopen("com6", "r")) == NULL){printf("cannot open com!\n");}elseprintf("open com successful!\n");char str;while (1){fscanf(fp, "%c", &str);printf("%c ", str);Sleep(100);}return 0;}
(2)这是可以打开串口并且应该是通用的方法
#include <Windows.h>#include <stdio.h>HANDLE hCom;int main(void){hCom = CreateFile(TEXT("com6"),//COM1口GENERIC_READ, //允许读0, //指定共享属性,由于串口不能共享,所以该参数必须为0NULL,OPEN_EXISTING, //打开而不是创建FILE_ATTRIBUTE_NORMAL, //属性描述,该值为FILE_FLAG_OVERLAPPED,表示使用异步I/O,该参数为0,表示同步I/O操作NULL);if (hCom == INVALID_HANDLE_VALUE){printf("打开COM失败!\n");return FALSE;}else{printf("COM打开成功!\n");}SetupComm(hCom, 1024, 1024); //输入缓冲区和输出缓冲区的大小都是1024/*********************************超时设置**************************************/COMMTIMEOUTS TimeOuts;//设定读超时TimeOuts.ReadIntervalTimeout = MAXDWORD;//读间隔超时TimeOuts.ReadTotalTimeoutMultiplier = 0;//读时间系数TimeOuts.ReadTotalTimeoutConstant = 0;//读时间常量//设定写超时TimeOuts.WriteTotalTimeoutMultiplier = 1;//写时间系数TimeOuts.WriteTotalTimeoutConstant = 1;//写时间常量SetCommTimeouts(hCom, &TimeOuts); //设置超时/*****************************************配置串口***************************/DCB dcb;GetCommState(hCom, &dcb);dcb.BaudRate = 9600; //波特率为9600dcb.ByteSize = 8; //每个字节有8位dcb.Parity = NOPARITY; //无奇偶校验位dcb.StopBits = ONESTOPBIT; //一个停止位SetCommState(hCom, &dcb);DWORD wCount;//实际读取的字节数bool bReadStat;char str[2] = { 0 };while (1){//PurgeComm(hCom, PURGE_TXCLEAR | PURGE_RXCLEAR); //清空缓冲区bReadStat = ReadFile(hCom, str, sizeof(str), &wCount, NULL);if (!bReadStat){printf("读串口失败!");return FALSE;}else{//str[1] = '\0';printf("%c\n", str[0]);}Sleep(100);}CloseHandle(hCom);}
在用readFile和WriteFile读写串口的时候需要考虑超时问题,超时的作用是在指定的时间内没有读入或发送指定数量的字符,ReadFile和WriteFile的操作仍然会结束。要查询当前的超时设置应该调用GetCommTimeouts函数,该函数会填充一个COMMTIMEOUTS
结构,调用SetCommTimeouts可以用某一个COMMTIMEOUTS来设置超时。
读写串口的超时总共有两种,间隔超时和总超时。间隔超时是指读取两个字符之间的延时,总超时是指读写操作总共花费的时间。写操作只支持总超时,读操作两种超时都支持。
typedef struct _COMMTIMEOUTS {
DWORD ReadIntervalTimeout; //读间隔超时
DWORD ReadTotalTimeoutMultiplier; //读时间系数
DWORD ReadTotalTimeoutConstant; //读时间常量
DWORD WriteTotalTimeoutMultiplier; // 写时间系数
DWORD WriteTotalTimeoutConstant; //写时间常量
} COMMTIMEOUTS,*LPCOMMTIMEOUTS;
COMMTIMEOUTS的成员都以ms为单位。
ReadFile函数的最后一个参数,当是重叠操作时,该参数指向一个OVERLAPPED结构,同步操作时,该参数为NULL。
参考连接:点击打开链接http://blog.csdn.net/l_andy/article/details/51131232
- windows C语言读串口数据
- windows下C语言枚举串口端口
- c语言串口收发数据VS2013
- Windows下c语言串口的编写(利用API)
- C语言实验单片机串口发送int型数据
- c语言串口操作
- C语言串口驱动程序
- C语言进阶:串口
- 串口通信——接收串口数据并处理(C语言)
- 串口通信——接收串口数据并处理(C语言)
- 获取串口数据 (C#)
- windows串口读取C(3)
- windows串口通信c(4)
- 使用C语言操作串口
- C#----串口数据接收发送
- 下位机单片机c语言发送数据到串口,上位机pc机java语言获取端口数据
- 下位机单片机c语言发送数据到串口,上位机pc机java语言获取端口数据
- 串口调试助手上输入数据,然后再数码管显示(C语言版本)
- HDU5952(66/600)
- 变量提升与函数提升,函数字面量,创建函数的几种方式,匿名函数的调用方式
- 关于margin使用的注意事项
- 初学前端心得:使用margin和padding要注意的事项
- Nginx range过滤器整形溢出漏洞 (CVE–2017–7529)预警分析
- windows C语言读串口数据
- MVC的简单介绍
- BZOJ 1257 数学 思维 分段
- Atitit 软件与开发的未来趋势 attilax总结 1.1. Sdx软件重构世界 软件定义未来1 1.2. 《软件和信息技术服务业发展规划(2016-2020年)》(2 1.3. Iot物联
- Java用重载的equals()判断实例变量是否相等
- SpringMVC 深度解析@RequestMapping(一)
- html标签
- Atitit 软件采购与服务 实现的三种模式 企业软件V1.0模式=传统模式 1,定制开发类型, 主要特点为通用性差,需求独特。通常单项目价格高,多为政府采购或者垄断企业的大单。 2,标准产品轻
- [资源分享]一个类似毒奶粉DNF的UNITY分享