-
2021-03-30 22:34:51更多相关内容
-
Linux下C++串口通信
2017-02-27 13:58:29Linux下C++串口通信,支持ubuntu,树莓派等系统。 -
一个跨平台、接口灵活的C++串口通信库
2022-04-21 13:51:21该库接口丰富,且调用灵活,例如,其read功能的函数就有以下几种重载或实现: size_t read (uint8_t *buffer, size_t size); size_t read (std::vector<uint8_t> &buffer, size_t size = 1); ... -
c++ 串口通讯 【初学必备】【源码】
2019-10-21 11:41:46C++通讯 串口通讯,初学者必备知识,源代码共享 -
C++串口通信
2018-02-18 22:25:16自己写的C++代码,用于串口通信,实际运行时console,可以自己调用现成的接口。 -
C++实现的串口通信
2021-01-19 22:43:18上位机和下位机通信的问题,使用的协议rs485协议. 题目是用VC++让上位机和下位机进行通信. 接在电脑上的rs232口,使用了232和485的转换器,发送相应的数据格式,然后上位机接受相应的格式。 原代码如下: ... -
VS2010 C++ 串口通讯工具Serial 源代码
2015-03-07 16:31:01源码。。。。采用VS2010软件 C++语言编写的一个串口通讯工具软件源码,软件很简单,有学习需要的可以下载! -
C++ 串口通讯
2021-06-02 16:39:53#pragma once class CComHelper { private: HANDLE hCom; public: bool Open(); void Set(); DWORD Read(char str[], int length); bool Write(char* data, int length); bool Close();... .#pragma once class CComHelper { private: HANDLE hCom; public: bool Open(); void Set(); DWORD Read(char str[], int length); bool Write(char* data, int length); bool Close(); };
#include "pch.h" #include "CComHelper.h" bool CComHelper::Open() { hCom = CreateFile(_T("COM5"), GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); if (hCom==(HANDLE)-1) { return false; } return true; } void CComHelper::Set() { SetupComm(hCom, 100, 100); COMMTIMEOUTS TimeOuts; //设定读超时 TimeOuts.ReadIntervalTimeout = MAXDWORD; TimeOuts.ReadTotalTimeoutMultiplier = 0; TimeOuts.ReadTotalTimeoutConstant = 0; TimeOuts.WriteTotalTimeoutConstant = 500;//设定写超时 TimeOuts.WriteTotalTimeoutMultiplier = 100; SetCommTimeouts(hCom, &TimeOuts); DCB dcb; GetCommState(hCom, &dcb); dcb.BaudRate = 9600; //波特率为9600 dcb.ByteSize = 8; //每个字节有8位 dcb.Parity = NOPARITY; //无奇偶校验位 dcb.StopBits = TWOSTOPBITS; //两个停止位 SetCommState(hCom, &dcb); PurgeComm(hCom, PURGE_TXCLEAR | PURGE_RXCLEAR); } DWORD CComHelper::Read(char* data, int length) { DWORD dwCount = (DWORD)length; bool bReadStat = ReadFile(hCom, data, dwCount, &dwCount, NULL); return dwCount; } bool CComHelper::Write(char* data, int length) { DWORD dwWrite = (DWORD)length; COMSTAT ComStat; DWORD dwError; ClearCommError(hCom, &dwError, &ComStat); bool bWriteStat = WriteFile(hCom, data, dwWrite, &dwWrite, NULL); if (!bWriteStat) { return false; } PurgeComm(hCom, PURGE_TXABORT| PURGE_RXABORT|PURGE_TXCLEAR | PURGE_RXCLEAR); return true; } bool CComHelper::Close() { bool result = CloseHandle(hCom); return result; }
// SerialPortTestDlg.h: 头文件 // #pragma once #include "CComHelper.h" // CSerialPortTestDlg 对话框 class CSerialPortTestDlg : public CDialogEx { // 构造 public: CSerialPortTestDlg(CWnd* pParent = nullptr); // 标准构造函数 CComHelper com; // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_SERIALPORTTEST_DIALOG }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: HICON m_hIcon; // 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedBtnInit(); afx_msg void OnBnClickedBtnOpen(); afx_msg void OnBnClickedBtnWrite(); afx_msg void OnBnClickedBtnRead(); };
// SerialPortTestDlg.cpp: 实现文件 // #include "pch.h" #include "framework.h" #include "SerialPortTest.h" #include "SerialPortTestDlg.h" #include "afxdialogex.h" #include "resource.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_ABOUTBOX }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CSerialPortTestDlg 对话框 CSerialPortTestDlg::CSerialPortTestDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_SERIALPORTTEST_DIALOG, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CSerialPortTestDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CSerialPortTestDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BTN_INIT, &CSerialPortTestDlg::OnBnClickedBtnInit) ON_BN_CLICKED(IDC_BTN_OPEN, &CSerialPortTestDlg::OnBnClickedBtnOpen) ON_BN_CLICKED(IDC_BTN_WRITE, &CSerialPortTestDlg::OnBnClickedBtnWrite) ON_BN_CLICKED(IDC_BTN_READ, &CSerialPortTestDlg::OnBnClickedBtnRead) END_MESSAGE_MAP() // CSerialPortTestDlg 消息处理程序 BOOL CSerialPortTestDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != nullptr) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CSerialPortTestDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CSerialPortTestDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CSerialPortTestDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CSerialPortTestDlg::OnBnClickedBtnInit() { com.Set(); } void CSerialPortTestDlg::OnBnClickedBtnOpen() { bool bResult = com.Open(); } void CSerialPortTestDlg::OnBnClickedBtnWrite() { char buffer[1024]; CString input; GetDlgItemText(IDC_EDIT_WRITE,input); char* p = input.GetBuffer(0); strcpy_s(buffer, p); bool bResult = com.Write(buffer, strlen(p)); } void CSerialPortTestDlg::OnBnClickedBtnRead() { char buffer[1024]; DWORD length = com.Read(buffer, 1024); CString str = CString(buffer,length); SetDlgItemText(IDC_EDIT_READ, str); }
-
Windows下C++串口通信
2018-01-23 09:30:39windows下c++串口通信,包括串口打开、SCB设定、串口事件设定、收发等 -
C++ 串口通信程序
2021-05-28 09:55:52C++ 串口通信程序 #include "windows.h" #include <iostream> #include <TCHAR.H> #include <string.h> using namespace std; HANDLE handle_file; //串口句柄 int serial_open(LPCWSTR COMx...C++ 串口通信程序
#include "windows.h" #include <iostream> #include <TCHAR.H> #include <string.h> using namespace std; HANDLE handle_file; //串口句柄 int serial_open(LPCWSTR COMx, int baudrate) { //打开串口 handle_file = CreateFile(COMx, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (handle_file == INVALID_HANDLE_VALUE) { printf("打开串口失败!\n"); return FALSE; } //设置读写缓冲区 SetupComm(handle_file, 1024, 1024); //设置读写超时 COMMTIMEOUTS TimeOuts; TimeOuts.ReadIntervalTimeout=1000; TimeOuts.ReadTotalTimeoutMultiplier=500; TimeOuts.ReadTotalTimeoutConstant=5000; TimeOuts.WriteTotalTimeoutMultiplier=500; TimeOuts.WriteTotalTimeoutConstant = 2000; SetCommTimeouts(handle_file, &TimeOuts); //设置串口配置信息 DCB device_control_block; //串口结构体 GetCommState(handle_file, &device_control_block); device_control_block.BaudRate = baudrate; //设置波特率 device_control_block.ByteSize = 8; //8位数据位 device_control_block.Parity = NOPARITY; //无奇偶校验位 device_control_block.StopBits = ONESTOPBIT; //一个停止位 SetCommState(handle_file, &device_control_block); //设置参数到串口句柄 //清空缓存区 PurgeComm(handle_file, PURGE_TXCLEAR | PURGE_RXCLEAR); return TRUE; } int serial_read_write() //读写串口 { COMSTAT com_start; DWORD errors; ClearCommError(handle_file, &errors, &com_start); char buffer[128]; DWORD buffer_bytes = sizeof(buffer); memset(buffer, 0, sizeof(buffer)); int result = 0; printf("请输入需要发送的数据:"); gets_s(buffer); result = WriteFile(handle_file, buffer, buffer_bytes, &buffer_bytes, NULL); if (!result) { printf("写串口失败!\n"); return FALSE; } printf("发送数据:%s。\n", buffer); memset(buffer, 0, sizeof(buffer)); Sleep(100); result = ReadFile(handle_file, buffer, buffer_bytes, &buffer_bytes, NULL); if (!result) { printf("读串口失败!\n"); return FALSE; } printf("接收数据:%s\n", buffer); memset(buffer, 0, sizeof(buffer)); Sleep(100); PurgeComm(handle_file, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR); return TRUE; } void serial_close(void) //关闭串口 { CloseHandle(handle_file); } int main() { char serial_port[20]; memset(serial_port, 0, sizeof(serial_port)); printf("请输入串口号:"); gets_s(serial_port); printf("串口设置为:%s\n", serial_port); serial_open(LPCWSTR(serial_port), 9600); //打开串口,波特率 //serial_open(_T("COM1"), 9600); //打开串口,波特率 serial_read_write(); //接收发送字符 serial_close(); //关闭串口 system("pause"); return 0; }
-
vc/c++串口通信
2020-04-02 17:00:39当用户打开该应用程序后,可以选择将...若用户计算机上的相应串口处于使用中等特殊情况下,程序会弹出“Invalid Port Number”的错误对话框。该情况下,用户应该检查该串口是否处于使用中或其他应用程序使用后未关闭。 -
C/C++串口通信典型应用实例编程实践.(电子工业.曹卫杉)
2016-06-04 12:20:35书名:《C/C++串口通信典型应用实例编程实践》(电子工业出版社.曹卫杉) PDF扫描版,全书共分10章,共316页。 内容介绍 本书从工程应用的角度出发,对目前流行的三种不同类型的C/C++语言(包括C++ Builder、Visual ... -
C_C++串口通信典型应用实例编程实践 源代码
2022-01-23 11:38:00资源名:C_C++串口通信典型应用实例编程实践 源代码 资源类型:程序源代码 源码说明:配套源代码。原配套光盘中大部分是教学视频,此文档是从中提取的源代码部分。 适合人群:新手及有一定经验的开发人员 -
C++串口通信入门
2020-12-25 11:12:37《C++串口通信入门》课程主要涉及如下内容: ------------------------------------------------------------------------------- 1,串口通信基础知识、应用场景等。【未完成】 2,RS232串口线的制作、准备。【未...本页面用来收集学习意愿数据,如果给您带来不便,我们表示歉意。课程进度:设计 - 录制 - 【 发布】课程主要涉及如下内容:
-------------------------------------------------------------------------------1,串口通信基础知识、应用场景等。【完成录制】2,C++跨平台的串口类封装。 【完成 录制】3,简单的串口通信程序。 【完成录制】使用封装的串口类进行串口配置,包括波特率、数据位、停止位、校验等。
服务端周期性发送两个数据,客户端接收并显示在终端。
4,分层式通信规约的设计、实现。 【完成 录制】双方按照规约(通信协议)进行通信。
5,用串口发送接收文件 【完成 录制】使用自定义规约实现文件传送。
6,串口调试助手(串口精灵) 【完成开发】自己开发一个串口调试助手。功能如下:
1. 配置串口通信参数。2. 展示收发数据。满屏后自动切换报文颜色。3. 手动发送报文。4. 自动回复。当收到指定报文时,自动回复指定内容。此功能一般在调试时,用来模拟下位机。-------------------------------------------------------------------------------如果您还有其他想学习的内容,请留言补充,谢谢您的支持。 -
VS2013MFC C++串口通讯.zip
2020-06-15 11:12:58C++ 串口助手MFC C++ 串口助手 -
C++ 串口通信
2015-07-23 17:13:41C++ API实现串口通信,消息响应接收数据 -
Visual C++串口通信技术与工程实践(第二版).(配书光盘)
2016-06-06 03:35:51本文档是《Visual C++串口通信技术与工程实践》(第二版)(人民邮电出版社.李宪勇)一书的配套源代码。 -
ros串口通讯c++实现
2020-08-31 12:38:03使用前,先安装sudo apt install ros-kinetic-serial 库,再进行编译 -
Visual C++串口通信技术与编程实践(配套源码).rar
2012-04-03 20:07:11Visual C++串口通信技术与编程实践(配套源码).rar -
visual c++串口通信技术详解
2019-01-19 13:04:36串口通信,其中包含计算机与51单片机之间串口通信,计算机之间,计算机与射频模块,计算机与GPS模块等。 -
c++编写的串口通讯程序
2018-08-12 21:35:43本程序中实现了c++串口异步通信,并对主要的函数功能及形参含义做了详细的注释,代码实测正确! 关于程序的解释可参见本人撰写博客: https://blog.csdn.net/sinat_35728816/article/details/81632310 -
串口通信(windows C++)全代码
2018-02-21 14:28:01串行通信口简称串口。美国电子工业协会EIA按电气标准及协议来分,包括RS-232C、RS-422、RS-485、USB等。RS-232、RS-422与RS-485标准只对接口的电气特性作出规定,不涉及接插件、电缆或协议。USB是近几年发展起来的... -
C++串口通信的例子(实现串口通信的类)
2011-01-10 18:01:03C++实现串口通信的类,做成了动态库。 有兴趣的朋友可以看一下 -
Linux C++ 串口通信
2018-05-22 11:23:52说明 随着嵌入式开发在物联网行业中站的比重日益增加,Linux 环境下的C++...就好比这里要介绍的串口通信, 在Windows开发中, 无论是C++, MFC,还是C#, 巨硬大大都给我们做好了封装。可是在Linux下就没那么简单了,... -
C/C++串口通信编程实践
2019-04-29 14:42:20本书从编程实践角度详细介绍了PC计算机windows环境下,DOS环境下以及单片机的串口通信的基本方法,并根据当前串口与网络结合的发展趋势,给出串口与tcp、IP网络,远程监控相结合的解决方案与详细程序实例,内容丰富... -
串口通信类(c++ 代码)
2018-08-24 14:37:38资源是用c++封装的串口通信类,可以直接调用该类的对象进行通信且参数会自动保存到配置文件可以自由设置