C++串口通信收到的数据有一部分乱码

csdndenglu csdndenglu 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
谁能给我个纯C++ API函数(不用MFC框架生成)写的串口通信程序呢?包含把收到的字符正确显示到屏幕上的。我之前写的接收程序,用串口助手发字符,接收后cout输出总是有乱码,不知道中间怎么处理就不会出现乱码了?
#include <iostream>
#include <windows.h>
using namespace std;
HANDLE hMutex;

DWORD WINAPI Read(LPVOID lpParamter)
{
//打开端口
HANDLE hCom = CreateFileA("com7", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
//设置超时
COMMTIMEOUTS timeouts;
GetCommTimeouts(hCom, &timeouts);
timeouts.ReadIntervalTimeout = 0;
timeouts.ReadTotalTimeoutMultiplier = 0;
timeouts.ReadTotalTimeoutConstant = 1;
timeouts.WriteTotalTimeoutMultiplier = 0;
timeouts.WriteTotalTimeoutConstant = 0;
if (!SetCommTimeouts(hCom, &timeouts))
{
cout<<"超时设置失败!重新";
CloseHandle(hCom);
return 0;
}

//取得并设置端口状态
DCB dcb;
GetCommState(hCom, &dcb);
dcb.DCBlength = sizeof(DCB);
dcb.BaudRate = 9600;
dcb.Parity = 0;
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
if (!SetCommState(hCom, &dcb))
{
cout<<"端口状态设置失败!重新";
CloseHandle(hCom);
return 0;
}


char buffer[1024];
DWORD readsize,dwError;
BOOL bReadStatus;
COMSTAT cs;

WaitForSingleObject(hMutex, INFINITE);
while(1)
{
readsize = 0;
ClearCommError(hCom,&dwError,&cs);//取得状态
//数据是否大于所准备缓冲区
if(cs.cbInQue>sizeof(buffer))
{
PurgeComm(hCom,PURGE_RXCLEAR);//清除通信端口数据
return 0;
}
memset(buffer, 0 , sizeof(buffer));
bReadStatus = ReadFile(hCom, buffer, cs.cbInQue, &readsize, 0);
if(readsize>0)
{
cout<<cs.cbInQue;
buffer[cs.cbInQue]='\0';
std::cout<<buffer;
}
Sleep(5);
}
ReleaseMutex(hMutex);
CloseHandle(hCom);
}

void main()
{
HANDLE hThread = CreateThread(NULL, 0, Read, NULL, 0, NULL);
hMutex = CreateMutex(NULL, FALSE, NULL);
CloseHandle(hThread);
while(1)
Sleep(1000);
}
...全文

相关推荐

串口通信SerialPort类c++

串口通信SerialPort类C++实现发送接收,代码完整,线程运行,正常无乱码,可用于核心代码学习,提取类库使用。

Paddy Pan

使用C++实现串口通信

在嵌入式和工业设备开发中,串口通信是一种非常常见的数据传输方式。本文将结合一个完整的C++示例代码,详细介绍如何通过串口与设备进行通信。

yy__xzz

C++串口通信开发实战项目详解

public:在open()中抛出异常而非返回 false:调用者可以选择 try-catch 或忽略,灵活性更高。我们走过了一条完整的旅程:从串口基础概念出发,理解了异步通信的本质;深入剖析了Windows与Linux底层API,掌握了跨平台配置技巧;设计了一个健壮的C++ SerialPort类,融合RAII、异常处理、线程安全;最终构建出一套可用于真实工业项目的模块化通信系统。

月小烟

C++串口通信实现[代码]

本文详细介绍了如何使用C++在Linux环境下实现串口通信,包括环境准备、代码实现、配置要点及常见问题排查。文章提供了一个完整的C++示例代码,涵盖了串口的打开、属性设置、波特率配置、数据格式设置以及数据的发送与接收。此外,还分析了串口通信中可能遇到的问题,如通信不稳定、数据乱码和权限问题,并提供了相应的解决方案。最后,文章还介绍了进阶调试技巧和优化建议,帮助开发者提高串口通信的效率和可靠性。

算法笑匠

龚建伟_Visual_C++_Turbo_C串口通信编程实践

龚建伟_Visual_C++_Turbo_C串口通信编程实践, 需要的下载

fcc2008
评论 23
收藏 已收藏
分享
返回顶部
csdndenglu
C++ 语言 65,214 成员 250,514 内容