linux fopen打开串口,使用C函数fopen,fread和fwrite与串口进行交互?
我一直试图通过RS232串口与我的设备进行通信(在我的情况下是COM6)。我的代码应该向设备写入一串ascii值,然后读取响应,但是我似乎无法得到任何响应。当我将它写入并读取到计算机中的文件时,该程序似乎工作得相当好,但不适用于指定COM6时。这是我的代码的最新版本:
using namespace std;
const char ASCII[ ]= "0123456789ABCDEF";
char *Checksum (char *buffer)
{
static char Hex[10];
static int a1, a2;
register unsigned int i;
int sum;
printf("%s \n", buffer);
sum = 256;
for ( i=0 ; i
{
sum-=buffer[i];
if ( sum<0 )
sum+= 256;
}
a1 = (sum & 0xF0) >> 4;
a2 = sum & 0x0F;
Hex[0] = ASCII[a1];
Hex[1] = ASCII[a2];
Hex[2] = 0;
printf("the checksum is %s \n",Hex);
return(Hex);
}
int main()
{
char data[80], input[80], *data2;
char *response;
DCB dcb;
bool retVal;
DWORD dwBytesTransferred;
DWORD byteswritten;
printf("the variable response is initially: %d\n", response);
dcb.BaudRate = CBR_19200; //19200 Baud
dcb.ByteSize = 8; //8 data bits
dcb.Parity = NOPARITY; //no parity
dcb.StopBits = ONESTOPBIT; //1 stop
//New open port area
HANDLE hPort;
if ((hPort = CreateFile ( "\\\\.\\COM6",
GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security attrs
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL)) != INVALID_HANDLE_VALUE)
{
printf("SUCCESS opening the port\n");// success
}
//GetCommState
DCB Dcb;
GetCommState (hPort, &Dcb);
Dcb.BaudRate = CBR_19200;
Dcb.StopBits = ONESTOPBIT;
Dcb.ByteSize = 8;
Dcb.Parity = NOPARITY;
Dcb.fParity = 0;
Dcb.fOutxCtsFlow = 0;
Dcb.fOutxDsrFlow = 0;
Dcb.fDsrSensitivity = 0;
Dcb.fTXContinueOnXoff = TRUE;
Dcb.fOutX = 0;
Dcb.fInX = 0;
Dcb.fNull = 0;
Dcb.fErrorChar = 0;
Dcb.fAbortOnError = 0;
Dcb.fRtsControl = RTS_CONTROL_DISABLE;
Dcb.fDtrControl = DTR_CONTROL_DISABLE;
//Flushing
FlushFileBuffers( hPort );
PurgeComm (hPort, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
COMSTAT comStat;
DWORD dwErrorFlags;
ClearCommError ( hPort, &dwErrorFlags, &comStat );
//NEW commtimeouts area
COMMTIMEOUTS CommTimeOuts;
DWORD dwTimeout = 3000; //
if(!dwTimeout)
{ // Don't use timeout -> Read the bytes already in input buffer and return immediately
CommTimeOuts.ReadIntervalTimeout = MAXDWORD;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
} else
{ // Use given timeout, wait until the requested number of bytes are read - or timeout
CommTimeOuts.ReadIntervalTimeout = 0;
CommTimeOuts.ReadTotalTimeoutConstant = dwTimeout;
}
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 0;
SetCommTimeouts (hPort, &CommTimeOuts);
printf("insert ASCII code string you wish to send:");
scanf("%s", input);
strcpy(data, "{0x02}");
strcat(data, input);
printf("%s \n", data);
data2=Checksum(data);
strcat(data, data2);
strcat(data, "{0x03}");
printf("the final sent message will be: %s \n",data);
retVal = WriteFile(hPort,data, strlen(data), &byteswritten, NULL);
printf("Number of bytes written: %d\n", byteswritten);
printf("Write Success? %d\n", retVal);
retVal=ReadFile (hPort, &response, 20, &dwBytesTransferred, NULL);
printf("Read Success? %d\n", retVal);
printf("Port Response: %d\n", response);
free(response);
return 0;
}最新发现摘要:使用Habi建议的Free Serial Port Monitor,我现在知道WriteFile运行正常,并且COM6正在接收消息。我仍然在寻找交叉线来仔细检查信息是否正在传送。我想,如果有人可以看看这个新版本,并告诉我是否有任何问题,特别是与ReadFile函数有关,那么我会尽力解决这个问题。它困扰我,免费串行端口软件只显示从我的电脑传来的数据,而不是来自设备的响应。 = \
linux fopen打开串口,使用C函数fopen,fread和fwrite与串口进行交互?相关推荐
- c语言数据块写入函数,C语言数据块读写函数:fread和fwrite
在前面曾经介绍过C语言中的各种读写函数,首先是最简单的读写一个字符的函数fputc和fgetc,在这个基础上又出现了putw和getw.fgets和fputs,此外还说过格式化读写函数fprintf和 ...
- fwrite函数Matlab,fread和fwrite函数,C语言fread和fwrite函数详解
对文件格式化读写函数 fprintf 与 fscanf 而言,尽管它可以从磁盘文件中读写任何类型的文件,即读写的文件类型可以是文本文件.二进制文件,也可以是其他形式的文件.但是,对二进制文件的读写来说 ...
- 函数fopen()形参之文件名使用的① ②两种情况
本文主要讲:函数fopen()形参之文件名使用有① ②两种情况 案例要求: ①从键盘输入字符,逐个 存到磁盘文件中,直到 输入'#"为止 ②读文本文件内容, 并显示 ③文件拷贝 好,开讲: ...
- 打开流 fopen 、freopen和fdopen函数
打开流 fopen .freopen和fdopen函数 转载 2015-12-21 14:13:07 fopen .freopen和fdopen函数作用都是打开一个标准I/O流的,但是它们有一些略微的 ...
- php+打开文件和其子文件,用 PHP 内置函数 fopen 创建文件和打开文件
使用 PHP 内置函数 fopen,可以打开一个文件. 打开文件 fopen 最简单语法如下: fopen(filepath,mode) 下面是打开一个文件的 PHP 代码示例: $f = fopen ...
- php中fopen函数,PHP的fopen()打开文件的函数
打开文件 fopen() 函数用于在 PHP 中打开文件. 此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件: $file=fopen("welcome.tx ...
- C语言函数fopen,fclose的用法
转自http://blog.sina.com.cn/s/blog_60059a210101277j.html 函数简介 函数功能: 打开一个文件 函数原型:FILE * fopen(const cha ...
- 【Android 逆向】Android 进程注入工具开发 ( 远程进程 注入动态库 文件操作 | Android 进程读取文件所需的权限 | fopen 打开文件标志位 | 验证文件权限 )
文章目录 前言 一.Android 进程读取文件所需的权限 二.fopen 打开文件标志位 三.验证文件权限 前言 一.Android 进程读取文件所需的权限 通过 注入工具 , 将 libbridg ...
- fread、fwrite、fopen函数的简单使用和open、read、write区别解析
这几个函数的区别:fread.fwrite.fopen和open.read.write区别解析 标准C库函数的简单使用 fopen函数原型: #include <stdio.h> FILE ...
最新文章
- 哪些人适合学软件测试呢
- 结对编程项目作业-设计文档
- java 二分查找
- 细细品味C#——文件操作
- myeclipse导入项目报错Target runtime Apache Tomcat v8.0 is not defined
- 数据结构-链表4-企业链表
- c语言考博真题,中国科学院2015年考博英语真题及答案
- 工作上不要遮掩,如实回答,什么样的借口可以接受
- oracle 启动 08103,数据库打开遭遇ORA-08103故障处理
- 通过JDBC连接Oracle数据库中的十大技巧
- word下横线的线添加的方法
- Kinect绿灯闪烁解决方法
- 通俗理解电磁干扰及共模电感的原理
- TapTap排行榜能客观显示游戏的受欢迎程度吗?
- 语义解析Parser用户手册
- Java给属性赋值的先后顺序
- 基于物理的渲染技术(PBR)系列一
- 论return 0的高级写法 bushi​​​​​​​)
- 【快速检索,稳定出版,强大委员会Speaker阵容】ICCCS 2022|第7届通信计算机大会
- java 最大子序列和
热门文章
- python和pythonamd64_python amd64什么意思-问答-阿里云开发者社区-阿里云
- 速冻食品崛起,飞速占领食品市场
- 外汇代理进阶之路:如何搭建MT4/MT5外汇贵金属交易平台
- UE4 断线重连的实现
- 利用交叉文档的attention信息来促进关键词生成
- 廊坊知恩:什么是互动率
- java menuitem 图标_MenuItem 显示中文乱码问题解决方案
- 以太网PHY寄存器分析【转】
- cocosjs微信头像本地服务器,Cocos creator游戏接入微信开放数据域,实现好友排行榜功能...
- 关于CSDN写博客怎么上传图片