串口同步操作DEMO
来源:互联网 发布:江苏普通发票软件下载 编辑:程序博客网 时间:2024/05/17 04:56
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
#include "string.h"
#include "Windows.h"
HANDLE m_DevHandle;
int nRet;
BOOL serial_test1()
{
m_DevHandle = CreateFileA("COM4",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
0);
if (INVALID_HANDLE_VALUE == m_DevHandle)
{
m_DevHandle = NULL;
printf_s("打开串口失败\n");
return FALSE;
}
else
{
printf_s("打开串口成功\n");
}
//超时设置
COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout = 20;//指定了在接收字符间的最大时间,如果超过了这个时间,ReadFile立即返回
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;//平局读取一个字节的时间上限(允许等待的最大值)
CommTimeOuts.ReadTotalTimeoutConstant = 0;//额外等待的时间长量
//总的等待时间=ReadTotalTimeoutMultiplier*要读的字节总个数+ReadTotalTimeoutConstant
//如果ReadTotalTimeoutMultiplier=0,ReadTotalTimeoutConstant=0,如果么没有收到数据,将一直等待,直到读取到数据位置 然后在 ReadIntervalTimeout后未有新数据来时退出
//ReadIntervalTimeout=0;读取完缓冲区的数据立即退出,不等待下一个字节
CommTimeOuts.WriteTotalTimeoutMultiplier = 10;//表示平均写一个字节的时间上限(允许写一个字节花费的时间)
CommTimeOuts.WriteTotalTimeoutConstant = 20;//额外等待写数据的超时时间 表示写数据总超时常量
//总的写等待的超时时间 T=WriteTotalTimeoutMultiplier*写入的个数+WriteTotalTimeoutConstant;
SetCommTimeouts(m_DevHandle, &CommTimeOuts);
//属性设置
DCB dcb;
GetCommState(m_DevHandle, &dcb);
dcb.BaudRate = 115200;
dcb.StopBits = ONESTOPBIT;
dcb.Parity = NOPARITY;
dcb.ByteSize = 8;
SetCommState(m_DevHandle, &dcb);
DWORD dwBytesWritten;//实际写入发送成功的字节
nRet = WriteFile(m_DevHandle, sendBuff, 10, &dwBytesWritten, NULL);
if (nRet == FALSE)
{
//如果发生错误(句柄错误,串口已关闭,串口不存在)都会返回 FALSE
printf_s("写入错误\n");
return FALSE;
}
byte arrReadBuff[100] = { 0 };
DWORD dwReadLen = 0;//实际读到的字节数
while (true)
{
Sleep(10);
nRet = ReadFile(m_DevHandle, arrReadBuff, 100, &dwReadLen, NULL);
if (nRet == FALSE)
{//如果发生错误(句柄错误,串口已关闭,串口不存在)都会返回 FALSE
printf_s("读取发生错误 退出死循环\n");
CloseHandle(m_DevHandle);
m_DevHandle = NULL;//关闭后清除句柄 防止再次关闭造成错误
return FALSE;
}
if (dwReadLen > 0)
{
for (int i = 0; i < dwReadLen; i++)
{
printf_s("%02X ", arrReadBuff[i]);
}
printf_s("\n");
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
serial_test1();
CloseHandle(m_DevHandle);//可以关闭空句柄
m_DevHandle = NULL;
system("PAUSE");
return 0;
}
//实现串口的同步读写
//同步读写同一时刻只能读或者写,当等待读取的时候,写操作将死等
#include "stdafx.h"#include "string.h"
#include "Windows.h"
HANDLE m_DevHandle;
int nRet;
BOOL serial_test1()
{
m_DevHandle = CreateFileA("COM4",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
0);
if (INVALID_HANDLE_VALUE == m_DevHandle)
{
m_DevHandle = NULL;
printf_s("打开串口失败\n");
return FALSE;
}
else
{
printf_s("打开串口成功\n");
}
//超时设置
COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout = 20;//指定了在接收字符间的最大时间,如果超过了这个时间,ReadFile立即返回
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;//平局读取一个字节的时间上限(允许等待的最大值)
CommTimeOuts.ReadTotalTimeoutConstant = 0;//额外等待的时间长量
//总的等待时间=ReadTotalTimeoutMultiplier*要读的字节总个数+ReadTotalTimeoutConstant
//如果ReadTotalTimeoutMultiplier=0,ReadTotalTimeoutConstant=0,如果么没有收到数据,将一直等待,直到读取到数据位置 然后在 ReadIntervalTimeout后未有新数据来时退出
//ReadIntervalTimeout=0;读取完缓冲区的数据立即退出,不等待下一个字节
CommTimeOuts.WriteTotalTimeoutMultiplier = 10;//表示平均写一个字节的时间上限(允许写一个字节花费的时间)
CommTimeOuts.WriteTotalTimeoutConstant = 20;//额外等待写数据的超时时间 表示写数据总超时常量
//总的写等待的超时时间 T=WriteTotalTimeoutMultiplier*写入的个数+WriteTotalTimeoutConstant;
SetCommTimeouts(m_DevHandle, &CommTimeOuts);
//属性设置
DCB dcb;
GetCommState(m_DevHandle, &dcb);
dcb.BaudRate = 115200;
dcb.StopBits = ONESTOPBIT;
dcb.Parity = NOPARITY;
dcb.ByteSize = 8;
SetCommState(m_DevHandle, &dcb);
SetupComm(m_DevHandle, 1024, 1024); //缓冲区的大小为1024
DWORD dwBytesWritten;//实际写入发送成功的字节
nRet = WriteFile(m_DevHandle, sendBuff, 10, &dwBytesWritten, NULL);
if (nRet == FALSE)
{
//如果发生错误(句柄错误,串口已关闭,串口不存在)都会返回 FALSE
printf_s("写入错误\n");
return FALSE;
}
byte arrReadBuff[100] = { 0 };
DWORD dwReadLen = 0;//实际读到的字节数
while (true)
{
Sleep(10);
nRet = ReadFile(m_DevHandle, arrReadBuff, 100, &dwReadLen, NULL);
if (nRet == FALSE)
{//如果发生错误(句柄错误,串口已关闭,串口不存在)都会返回 FALSE
printf_s("读取发生错误 退出死循环\n");
CloseHandle(m_DevHandle);
m_DevHandle = NULL;//关闭后清除句柄 防止再次关闭造成错误
return FALSE;
}
if (dwReadLen > 0)
{
for (int i = 0; i < dwReadLen; i++)
{
printf_s("%02X ", arrReadBuff[i]);
}
printf_s("\n");
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
serial_test1();
CloseHandle(m_DevHandle);//可以关闭空句柄
m_DevHandle = NULL;
system("PAUSE");
return 0;
}
阅读全文
1 0
- 串口同步操作DEMO
- VC 多线程同步方式操作串口
- Android串口操作,简化android-serialport-api的demo
- Android串口操作,简化android-serialport-api的demo
- Android串口操作,简化android-serialport-api的demo
- Android串口操作,简化android-serialport-api的demo
- 串口类的读操作都是同步方法
- C/C++串口通信(1)-同步操作
- Android 中自动同步的机制的简单的demo,例如订单同步,商品同步,会员同步,操作同步
- 比zlg串口中间件好的UART串口驱动(带超时的同步操作)
- MFC之五WIN32 API串口操作2串口同步方式写
- 串口通信Demo
- C#串口 Demo
- 串口操作
- 操作串口
- 串口操作
- 操作串口
- 串口操作
- 选择器
- GCD串行并发队列扫盲
- php 检测远程图片格式 大小
- tftp安装
- Android:最全面的 Webview 详解
- 串口同步操作DEMO
- 数字信封的生成及解析
- mybatis事务路径引发的“血案”
- 伪类选择器
- Androidstudio 快速生成常用的代码块儿的缩写汇总
- vijos1250 最勇敢的机器人
- ionic2长列表返回顶端控件的一个简单实现
- 高仿APP——元贝驾考
- LeetCode 476 Number Complement