串口通信 数据发送不出去

lqlyj2015 2015-05-13 03:05:26
#pragma once
#include "Windows.h"
//#include "Defines.h"
//#include "DbConnection.h"
//#include "Comm.h"
#include "stdafx.h"
#include "stdio.h"
#include "math.h"



#define REF 10000000

int main (void)
{
HANDLE m_hComm;
DCB dcb; // 串口控制块
COMMTIMEOUTS timeouts = { // 串口超时控制参数
100, // 读字符间隔超时时间: 100 ms
1, // 读操作时每字符的时间: 1 ms (n个字符总共为n ms)
500, // 基本的(额外的)读超时时间: 500 ms
1, // 写操作时每字符的时间: 1 ms (n个字符总共为n ms)
100}; // 基本的(额外的)写超时时间: 100 ms

DWORD dwNumWrite;
int freq, Fres, Intt, FRAC, MOD;
unsigned char sendBUFF[24];

while(1){

/* sendBUFF[] 内容的计算,不重要,故省略 */

m_hComm = CreateFile("COM11", // 串口名称或设备路径
GENERIC_READ | GENERIC_WRITE, // 读写方式
0, // 共享方式:独占
NULL, // 默认的安全描述符
OPEN_EXISTING, // 创建方式
0, // 不需设置文件属性
NULL); // 不需参照模板文件

if(m_hComm == NULL)
{
printf("打开串口失败");
return FALSE; // 打开串口失败
}

GetCommState(m_hComm, &dcb); // 取DCB

dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;

SetCommState(m_hComm, &dcb); // 设置DCB

SetupComm(m_hComm, 4096, 1024); // 设置输入输出缓冲区大小

SetCommTimeouts(m_hComm, &timeouts); // 设置超时


WriteFile(m_hComm, sendBUFF, 24, &dwNumWrite, NULL);

printf("发送数据量:%d\n", dwNumWrite);

}

}


运行的结果显示发送的数据为0,也就是我的sendBUFF完全没有发出去,想请问下各位大神我的代码哪里出了问题?

头文件之所以注释掉3个,是因为我参考的代码中有,但我找不到这几个文件,不用他们程序可以运行,不知是否是这个原因?

其中,判定串口是否成功打开的语句如果改成
if(m_hComm == INVALID_HANDLE_VALUE) return FALSE;  

则直接报串口打开失败
...全文
1231 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2015-05-14
  • 打赏
  • 举报
回复
m_idComDev=CreateFile(m_sPort, // com1,2 GENERIC_READ|GENERIC_WRITE, 0, // sharemode 0=no share NULL, // &sa OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL); // tempfile
qinlj0 2015-05-13
  • 打赏
  • 举报
回复
现在的计算机,USB就是串口,串口就是USB。 至于串口API失败,是操作系统中了回教病毒。 打开串口可能有隐蔽的API。 有时间的话,可以反编译破解,也可以考虑到警备区拿“毒蜘蛛”杀毒软件杀毒!
lqlyj2015 2015-05-13
  • 打赏
  • 举报
回复
引用 7 楼 oyljerry 的回复:
[quote=引用 6 楼 lqlyj2015 的回复:] [quote=引用 5 楼 oyljerry 的回复:] [quote=引用 4 楼 lqlyj2015 的回复:] [quote=引用 2 楼 oyljerry 的回复:] 查看你返回的具体错误信息,串口为什么打开失败了
我用如下语句进行判定的时候就显示打开串口失败了,并不是说程序有什么错误。如果用NULL判定,虽然不判错,但是数据发不出去。
if(m_hComm == INVALID_HANDLE_VALUE) 
	{
		printf("打开串口失败");
		return FALSE;        // 打开串口失败
	}
[/quote] 因为你还是拿到的 INVALID_HANDLE_VALUE,可以用GetLastError查看一下[/quote] 不管我外部设备有没有插入,都是返回错误信息2。但是我设备插入后设备管理器中是能看到COM11的,但似乎程序读不出它。我对串口通信不太懂,不知道是不是我之前的程序哪里写错了?或者是注释掉的那几个头文件的原因??能否指导一下,十分感谢。[/quote] 那你打开的串口是否为正确的地址。[/quote] 我要打开com11口,是否只要写CreateFile("COM11",...........即可?还是要另外设置一些什么?
oyljerry 2015-05-13
  • 打赏
  • 举报
回复
引用 6 楼 lqlyj2015 的回复:
[quote=引用 5 楼 oyljerry 的回复:] [quote=引用 4 楼 lqlyj2015 的回复:] [quote=引用 2 楼 oyljerry 的回复:] 查看你返回的具体错误信息,串口为什么打开失败了
我用如下语句进行判定的时候就显示打开串口失败了,并不是说程序有什么错误。如果用NULL判定,虽然不判错,但是数据发不出去。
if(m_hComm == INVALID_HANDLE_VALUE) 
	{
		printf("打开串口失败");
		return FALSE;        // 打开串口失败
	}
[/quote] 因为你还是拿到的 INVALID_HANDLE_VALUE,可以用GetLastError查看一下[/quote] 不管我外部设备有没有插入,都是返回错误信息2。但是我设备插入后设备管理器中是能看到COM11的,但似乎程序读不出它。我对串口通信不太懂,不知道是不是我之前的程序哪里写错了?或者是注释掉的那几个头文件的原因??能否指导一下,十分感谢。[/quote] 那你打开的串口是否为正确的地址。
lqlyj2015 2015-05-13
  • 打赏
  • 举报
回复
引用 5 楼 oyljerry 的回复:
[quote=引用 4 楼 lqlyj2015 的回复:] [quote=引用 2 楼 oyljerry 的回复:] 查看你返回的具体错误信息,串口为什么打开失败了
我用如下语句进行判定的时候就显示打开串口失败了,并不是说程序有什么错误。如果用NULL判定,虽然不判错,但是数据发不出去。
if(m_hComm == INVALID_HANDLE_VALUE) 
	{
		printf("打开串口失败");
		return FALSE;        // 打开串口失败
	}
[/quote] 因为你还是拿到的 INVALID_HANDLE_VALUE,可以用GetLastError查看一下[/quote] 不管我外部设备有没有插入,都是返回错误信息2。但是我设备插入后设备管理器中是能看到COM11的,但似乎程序读不出它。我对串口通信不太懂,不知道是不是我之前的程序哪里写错了?或者是注释掉的那几个头文件的原因??能否指导一下,十分感谢。
oyljerry 2015-05-13
  • 打赏
  • 举报
回复
引用 4 楼 lqlyj2015 的回复:
[quote=引用 2 楼 oyljerry 的回复:] 查看你返回的具体错误信息,串口为什么打开失败了
我用如下语句进行判定的时候就显示打开串口失败了,并不是说程序有什么错误。如果用NULL判定,虽然不判错,但是数据发不出去。
if(m_hComm == INVALID_HANDLE_VALUE) 
	{
		printf("打开串口失败");
		return FALSE;        // 打开串口失败
	}
[/quote] 因为你还是拿到的 INVALID_HANDLE_VALUE,可以用GetLastError查看一下
lqlyj2015 2015-05-13
  • 打赏
  • 举报
回复
引用 2 楼 oyljerry 的回复:
查看你返回的具体错误信息,串口为什么打开失败了
我用如下语句进行判定的时候就显示打开串口失败了,并不是说程序有什么错误。如果用NULL判定,虽然不判错,但是数据发不出去。
if(m_hComm == INVALID_HANDLE_VALUE) 
	{
		printf("打开串口失败");
		return FALSE;        // 打开串口失败
	}
lqlyj2015 2015-05-13
  • 打赏
  • 举报
回复
引用 1 楼 schlafenhamster 的回复:
1 "COM11" 不存在 2. DCB m_DCB; BOOL fSuccess = GetCommState(m_PPIhComPort,&m_DCB); m_DCB.fDtrControl=0; m_DCB.fRtsControl=0; m_DCB.fParity=1; // much more fSuccess = SetCommState(m_PPIhComPort,&m_DCB); // BaudRate 115200 fBinary 1 fParity 0 ?? fOutxCtsFlow 0 fOutxDsrFlow 0 fDtrControl 1 fDsrSensitivity 0 fTXContinueOnXoff 0 fOutX 0 fInX 0 fErrorChar 0 fNull 0 fRtsControl 1 fAbortOnError 0 fDummy2 0 wReserved 0 XonLim 2048 XoffLim 512 ByteSize 7 Parity 2 StopBits 0 XonChar 17 XoffChar 19 ErrorChar 0 EofChar 0 EvtChar 0 wReserved1 0 //
我外设的USB转串口驱动已经做好了,COM11可以在设备管理器里看到,是存在的,串口调试助手也能看见。 if(m_hComm == INVALID_HANDLE_VALUE) return FALSE; 但如果我使用这条语句进行判定,则显示串口打开失败。所以我想知道是否是什么语句使用有问题
oyljerry 2015-05-13
  • 打赏
  • 举报
回复
查看你返回的具体错误信息,串口为什么打开失败了
schlafenhamster 2015-05-13
  • 打赏
  • 举报
回复
1 "COM11" 不存在 2. DCB m_DCB; BOOL fSuccess = GetCommState(m_PPIhComPort,&m_DCB); m_DCB.fDtrControl=0; m_DCB.fRtsControl=0; m_DCB.fParity=1; // much more fSuccess = SetCommState(m_PPIhComPort,&m_DCB); // BaudRate 115200 fBinary 1 fParity 0 ?? fOutxCtsFlow 0 fOutxDsrFlow 0 fDtrControl 1 fDsrSensitivity 0 fTXContinueOnXoff 0 fOutX 0 fInX 0 fErrorChar 0 fNull 0 fRtsControl 1 fAbortOnError 0 fDummy2 0 wReserved 0 XonLim 2048 XoffLim 512 ByteSize 7 Parity 2 StopBits 0 XonChar 17 XoffChar 19 ErrorChar 0 EofChar 0 EvtChar 0 wReserved1 0 //

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧