社区
网络及通讯开发
帖子详情
从串口中取数据,该怎么写
small2j
2006-10-26 11:04:18
现在有一个嵌入式设备,与电脑的串口相连,设备往端口写数据,那么怎么样实现从电脑端这里读到数据,保存在一个文件里.
有哪位能给源代码
写这程序要注意什么问题,以前没写过通信类的程序,刚学C++ Builder,找不到好的书学.
小弟先谢了!
...全文
322
6
打赏
收藏
从串口中取数据,该怎么写
现在有一个嵌入式设备,与电脑的串口相连,设备往端口写数据,那么怎么样实现从电脑端这里读到数据,保存在一个文件里. 有哪位能给源代码 写这程序要注意什么问题,以前没写过通信类的程序,刚学C++ Builder,找不到好的书学. 小弟先谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jiangshx
2006-10-28
打赏
举报
回复
用第三方串口通讯控件 PComm
small2j
2006-10-28
打赏
举报
回复
再次感谢了,我试试看.
Andrionda
2006-10-27
打赏
举报
回复
我没想到 格式是那样的
楼主自己整理一下吧 !
Andrionda
2006-10-27
打赏
举报
回复
太慢了.
BCB写的一个简单串口通信类- -
Tag: BCB写的一个简单串口通信类
////---------------------------------------------------------------------------#include <Classes.hpp>#include "ReceiveThread.h"#ifndef SerialH#define SerialH
//---------------------------------------------------------------------------class Serial{protected: DCB dcb; bool Opend; OVERLAPPED OverWrite; hReceiveThread *ReceiveCom;public: bool IsOpen(void); bool OpenSerial(AnsiString Com,DWORD Baud,DWORD Fparity,BYTE ByteSize,BYTE StopBit); bool SentString(AnsiString str); bool SentData(unsigned char *Buff,int ByteToWritten); bool CloseSerial(void);
Serial(void); ~Serial(void);};
#endif
//---------------------------------------------------------------------------#pragma hdrstop#include "Serial.h"
//---------------------------------------------------------------------------#pragma package(smart_init)
HANDLE hCom; //串行设备句柄//---------------------------------------------------------------------------Serial::Serial(void){ Opend = false; hCom = NULL;}//---------------------------------------------------------------------------Serial::~Serial(void){}//---------------------------------------------------------------------------bool Serial::IsOpen(void) //串口打开标志{ return Opend;}
//---------------------------------------------------------------------------bool Serial::OpenSerial(AnsiString Com,DWORD Baud,DWORD Fparity,BYTE ByteSize,BYTE StopBit){ if(Opend == true) { MessageBox(0,"Port Is Already Opened!","Warning",MB_ICONWARNING); return false; } hCom=CreateFile(Com.c_str(), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); if(hCom==INVALID_HANDLE_VALUE) { MessageBox(0,"Can not open the serial port!","Error",MB_ICONERROR); CloseHandle(hCom); hCom=NULL; Opend = false; return false; } if(!SetCommMask(hCom,EV_RXCHAR)) { MessageBox(0,"SetCommMask failed!","Error",MB_ICONERROR); Opend = false; return false; } if(!SetupComm(hCom,1024,1024)) { MessageBox(0,"SetupComm failed!","Error",MB_ICONERROR); Opend = false; return false; } PurgeComm(hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
GetCommState(hCom,&dcb); dcb.BaudRate = Baud; //设定波特率 dcb.fParity = Fparity; //设定奇偶校验 dcb.ByteSize = ByteSize; //设定数据位 dcb.StopBits = StopBit; //设定停止位
dcb.Parity=0; // 0-4=no,odd,even,mark,space dcb.fNull=false; // 1,enable null stripping SetCommState(hCom,&dcb);
ReceiveCom=new hReceiveThread(false); ReceiveCom->FreeOnTerminate=true;
Opend=true; return true;}
//---------------------------------------------------------------------------bool Serial::SentString(AnsiString str){ if(WriteFile(hCom,str.c_str(),str.Length(),NULL,&OverWrite)) return true; else return false;}//---------------------------------------------------------------------------bool Serial::SentData(unsigned char *Buff,int ByteToWritten){ if(WriteFile(hCom,Buff,ByteToWritten,NULL,&OverWrite)) return true; else return false;}//---------------------------------------------------------------------------bool Serial::CloseSerial(void){ if(Opend==true) { if(CloseHandle(hCom)) ReceiveCom->Terminate(); else return false; }
hCom=NULL; Opend = false; return true;}//---------------------------------------------------------------------------
//---------------------------------------------------------------------------#include <Classes.hpp>#include <queue>#include <List.h>#ifndef ReceiveThreadH#define ReceiveThreadH
//---------------------------------------------------------------------------class hReceiveThread : public TThread{protected: COMSTAT ComStat; OVERLAPPED os; OVERLAPPED OverRead; DWORD dwEvtMask; queue<unsigned char> RXBuffer; //接收缓冲区 void __fastcall UserAdd(void); void __fastcall Execute(void);public: __fastcall hReceiveThread(bool CreateSuspended);};#endif
//---------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop#include "ReceiveThread.h"#include "Serial.h"
//---------------------------------------------------------------------------#pragma package(smart_init)
extern HANDLE hCom; //串行设备句柄
__fastcall hReceiveThread::hReceiveThread(bool CreateSuspended): TThread(CreateSuspended){}//---------------------------------------------------------------------------void __fastcall hReceiveThread::Execute(void){ memset(&OverRead,0,sizeof(OVERLAPPED)); OverRead.hEvent=CreateEvent(NULL,true,true,NULL);
if (OverRead.hEvent==NULL) Terminate(); if (!SetCommMask(hCom,EV_RXCHAR|EV_TXEMPTY)) Terminate();
while (!Terminated) { WaitForSingleObject(OverRead.hEvent,INFINITE);
bool WaitComEv; bool ReadStat; DWORD dwError; DWORD ByteRead; unsigned char RXBuff;
WaitComEv=WaitCommEvent(hCom,&dwEvtMask,&OverRead); if(WaitComEv) ClearCommError(hCom,&dwError,&ComStat);
if(!WaitComEv && GetLastError()==ERROR_IO_PENDING) { ClearCommError(hCom,&dwError,&ComStat); while (ComStat.cbInQue>0 && dwEvtMask==EV_RXCHAR) { ReadStat = ReadFile(hCom,&RXBuff,1,&ByteRead,&os);
if(!ReadStat && GetLastError()==ERROR_IO_PENDING) { while(!GetOverlappedResult(hCom,&os,&ByteRead,true)) { dwError=GetLastError(); if(dwError==ERROR_IO_INCOMPLETE) continue; else break; } }
if(ReadStat) { RXBuffer.push(RXBuff); ClearCommError(hCom,&dwError,&ComStat); Synchronize(UserAdd); } } } }}//---------------------------------------------------------------------------void __fastcall hReceiveThread::UserAdd(void){ //add you code here}
i_love_pc
2006-10-26
打赏
举报
回复
大斑竹网站上有一本书《C++Builder与RS-232串行通信控制》
http://www.ccrun.com/view.asp?id=244
下载来看一看。
Estfania
2006-10-26
打赏
举报
回复
首先应该先定义个编码格式,类似于网络程序设计(即输入规范);
然后使用Device I/O,可以使用CreateFile创建监听端口,使用ReadFile读取串口内容;
详情可以参见MSDN的Communications Resources
Android
串口
编程
Android
串口
编程,《Android
串口
编程原理和实现方式》代码
STM32使用DMA从
串口
读
数据
到内存
使用DMA从
串口
读
数据
到内存和从内存搬
数据
到
串口
一样,只是要注意所使用的DMA通道不一样。 当配置好后,如果
串口
上有
数据
传输,DMA就自动把
数据
搬到内存中。 当工作在正常模式,DMA搬运了设定长度的
数据
后,会产生中断标志,然后DMA就停止工作了,如果再有
数据
也不接收了。 当工作在循环模式,DMA搬运了设定长度的
数据
后,会产生中断标志,如果再有
数据
,DMA会循环保存到内存中,覆盖前面的
数据
。
java
串口
读取
数据
(转载)
如何用Java语言向
串口
读
写
数据
串口
, RS-232-C(又称EIA RS-232-C,以下简称RS232)是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。RS232是一个全双工的通讯协议,它可以同时进行
数据
接收和发送的工作。
串口
是计算机上一种非常通用设备通信的协议。以前,大多数计算机包含两个基于RS232的
串口
。
C语言——读取
串口
数据
,并处理
本文主要内容包含: 1.接收
串口
数据
程序的编程逻辑示意图; 2.接收
串口
数据
程序要用到的通用函数模块(可直接引用,无需更改); 3.接收
串口
数据
程序的示例。 1.接收
串口
数据
程序的编程逻辑示意图: 2.与
串口
有关的函数模块及数组(可直接引用到自己的程序中): main.c #include <stdio.h> #include <string.h> #include &l...
实现抓取arduino上的
串口
数据
一开始用arduino ide
写
一些传感器代码,但是后来发现一个问题: 就是用arduino ide
写
的代码只能将代码烧进板子里,而
串口
监视器是别人
写
好的,只能读出
串口
数据
。 那么: 如果你要获得
串口
上的
数据
,用来干一些事时该怎么办呢(比如与后台连接) 作为一个新手我总结了2种方法: 1.就是之前一直使用的方法:用esp8266模板将
数据
传上物联网(一直在用wemos...
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章