我一直试图通过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与串口进行交互?相关推荐

  1. c语言数据块写入函数,C语言数据块读写函数:fread和fwrite

    在前面曾经介绍过C语言中的各种读写函数,首先是最简单的读写一个字符的函数fputc和fgetc,在这个基础上又出现了putw和getw.fgets和fputs,此外还说过格式化读写函数fprintf和 ...

  2. fwrite函数Matlab,fread和fwrite函数,C语言fread和fwrite函数详解

    对文件格式化读写函数 fprintf 与 fscanf 而言,尽管它可以从磁盘文件中读写任何类型的文件,即读写的文件类型可以是文本文件.二进制文件,也可以是其他形式的文件.但是,对二进制文件的读写来说 ...

  3. 函数fopen()形参之文件名使用的① ②两种情况

    本文主要讲:函数fopen()形参之文件名使用有① ②两种情况 案例要求: ①从键盘输入字符,逐个 存到磁盘文件中,直到 输入'#"为止 ②读文本文件内容, 并显示 ③文件拷贝 好,开讲: ...

  4. 打开流 fopen 、freopen和fdopen函数

    打开流 fopen .freopen和fdopen函数 转载 2015-12-21 14:13:07 fopen .freopen和fdopen函数作用都是打开一个标准I/O流的,但是它们有一些略微的 ...

  5. php+打开文件和其子文件,用 PHP 内置函数 fopen 创建文件和打开文件

    使用 PHP 内置函数 fopen,可以打开一个文件. 打开文件 fopen 最简单语法如下: fopen(filepath,mode) 下面是打开一个文件的 PHP 代码示例: $f = fopen ...

  6. php中fopen函数,PHP的fopen()打开文件的函数

    打开文件 fopen() 函数用于在 PHP 中打开文件. 此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件: $file=fopen("welcome.tx ...

  7. C语言函数fopen,fclose的用法

    转自http://blog.sina.com.cn/s/blog_60059a210101277j.html 函数简介 函数功能: 打开一个文件 函数原型:FILE * fopen(const cha ...

  8. 【Android 逆向】Android 进程注入工具开发 ( 远程进程 注入动态库 文件操作 | Android 进程读取文件所需的权限 | fopen 打开文件标志位 | 验证文件权限 )

    文章目录 前言 一.Android 进程读取文件所需的权限 二.fopen 打开文件标志位 三.验证文件权限 前言 一.Android 进程读取文件所需的权限 通过 注入工具 , 将 libbridg ...

  9. fread、fwrite、fopen函数的简单使用和open、read、write区别解析

    这几个函数的区别:fread.fwrite.fopen和open.read.write区别解析 标准C库函数的简单使用 fopen函数原型: #include <stdio.h> FILE ...

最新文章

  1. 哪些人适合学软件测试呢
  2. 结对编程项目作业-设计文档
  3. java 二分查找
  4. 细细品味C#——文件操作
  5. myeclipse导入项目报错Target runtime Apache Tomcat v8.0 is not defined
  6. 数据结构-链表4-企业链表
  7. c语言考博真题,中国科学院2015年考博英语真题及答案
  8. 工作上不要遮掩,如实回答,什么样的借口可以接受
  9. oracle 启动 08103,数据库打开遭遇ORA-08103故障处理
  10. 通过JDBC连接Oracle数据库中的十大技巧
  11. word下横线的线添加的方法
  12. Kinect绿灯闪烁解决方法
  13. 通俗理解电磁干扰及共模电感的原理
  14. TapTap排行榜能客观显示游戏的受欢迎程度吗?
  15. 语义解析Parser用户手册
  16. Java给属性赋值的先后顺序
  17. 基于物理的渲染技术(PBR)系列一
  18. 论return 0的高级写法 bushi​​​​​​​)
  19. 【快速检索,稳定出版,强大委员会Speaker阵容】ICCCS 2022|第7届通信计算机大会
  20. java 最大子序列和

热门文章

  1. python和pythonamd64_python amd64什么意思-问答-阿里云开发者社区-阿里云
  2. 速冻食品崛起,飞速占领食品市场
  3. 外汇代理进阶之路:如何搭建MT4/MT5外汇贵金属交易平台
  4. UE4 断线重连的实现
  5. 利用交叉文档的attention信息来促进关键词生成
  6. 廊坊知恩:什么是互动率
  7. java menuitem 图标_MenuItem 显示中文乱码问题解决方案
  8. 以太网PHY寄存器分析【转】
  9. cocosjs微信头像本地服务器,Cocos creator游戏接入微信开放数据域,实现好友排行榜功能...
  10. 关于CSDN写博客怎么上传图片