c# 串口问题

问题描述

c#串口通信中,采用winapi函数ClearCommError进行清除串口错误或者读取当前的串口的状态。本人采用两种声明方式:【1】[System.Runtime.InteropServices.DllImport("kernel32.dll")]publicstaticexternboolClearCommError(IntPtrhFile,refuintlpErrors,refCOMSTATlpStat);【2】[System.Runtime.InteropServices.DllImport("kernel32.dll")]publicstaticexternboolClearCommError(IntPtrhFile,refuintlpErrors,refIntPtrlpStat);对应的C#语言描述为【1】uinta=0;COMSTATcomstat2=newCOMSTAT();ClearCommError(myCommPtr,refa,refcomstat2);其中,myCommPtr已经得到串口句柄,COMSTAT为一个结构。【2】uinterror=0;IntPtrptrComstat=Marshal.AllocHGlobal(Marshal.SizeOf(typeof(COMSTAT)));Win32Com.ClearCommError(myCommPtr,referror,refptrComstat);COMSTATcomstat=newCOMSTAT();comstat=(COMSTAT)Marshal.PtrToStructure(ptrComstat,typeof(COMSTAT));Marshal.FreeHGlobal(myCommPtr);其中,myCommPtr已经得到串口句柄,COMSTAT为一个结构。现在出现问题了:【1】从comstat2可以得到正确的串口状态,而【2】从comstat则好像返回的是随机数据。笔者百思不得其解,请教有相关经验的高手,指点迷津,先谢谢了^_^

解决方案

解决方案二:
波特率设置了吗?如果是VS2003,可以用vb的串口控件,另一个方法是网上有比较号的串口程序,可以找一下,

时间: 2024-10-10 18:00:43

c# 串口问题的相关文章

我在写串口通信程序遇到的坑

我在做基于HC6800的51单片机上,写串口通信程序遇到了许多坑. 一个大坑:为什么HC6800上U转串口不能发送数据. 因为我们向HC6800烧程序都是使用图1所示的软件,所以我想当然地认为可以直接通过HC6800上的U转串进行串口通信,而我的同学信誓旦旦地告诉我可以.坑爹.并且这个软件好像也在提示可以用直接用U转串,进行串口通信(见图2).但是当我打开串口调试助手的时候(如图3),却发现单片机掉电了(如图4).其实HC6800上有另一个串口的,我们只要把连接图5黄框处串口.并且在图4中的6处

串口-如何通过android截取收银机的打印数据,组装后上传到后台服务器,然后把数据传到打印机打印小票?

问题描述 如何通过android截取收银机的打印数据,组装后上传到后台服务器,然后把数据传到打印机打印小票? 如题.举个例子,收银机连接打印机实现收银.打印小票,现在想在中间接个硬件Android系统,截取打印数据上传到后台服务器,不对现有收银系统改造,不能影响正常收银. 注:该硬件两端通过串口/并口/usb连接收银机与打印机 解决方案 用小票打印机打印 解决方案二: 这种需要抓包的,安卓不可能.... 解决方案三: 这个你需要截取他的网络包就行了.

控件-mscomm串口波形绘制范例,求大神解析这三个函数,急急急,绘制波形图的原理是什么,拜托了

问题描述 mscomm串口波形绘制范例,求大神解析这三个函数,急急急,绘制波形图的原理是什么,拜托了 //串口void CPort_testDlg::OnComm() { //if(stop)return; VARIANT m_input1; COleSafeArray m_input2; long lengthi; BYTE data[600]; CString str; int ai=0bi=0ci=0di=0; int sum=0; if(m_Comm.GetCommEvent()==2)

我用了共享内存映射,但是,串口来的数写到共享内存里,就是更新不到磁盘文件里去咋办??

问题描述 我用了共享内存映射,但是,串口来的数写到共享内存里,就是更新不到磁盘文件里去咋办?? 共享内存映射,flushviewoffile,更新磁盘文件(那个flushviewoffile 返回都是对的可是文件里就是没有东西) 解决方案 先看i数据是否正确接收了,有没有写入共享内存.

请人设计一个串口终端软件

问题描述 请人设计一个串口终端软件 计算机与目标设备之间的连接方式为标准异步串行接口,采用TXD.RXD.RTS.CTS.GND 5线连接方式.软件功能:通过串口命令对目标设备进行参数的设置和查询,终端软件与目标设备之间实现串口数据的收发.有意者详谈.

LPC1768之串口UART0

*********************************************************************************************************/ #include "LPC17xx.h" /* LPC17xx外设寄存器 */ /*************************************************************************************************

电脑串口引脚定义图

电脑串口引脚定义 按序号说明: 1 载波检测(DCD) 2 接受数据(RXD) 3 发出数据(TXD) 4 数据终端准备好(DTR) 5 信号地线(SG) 6 数据准备好(DSR) 7 请求发送(RTS) 8 清除发送(CTS) 9 振铃指示(RI) 此上为计算机串中管脚定义说明.

串口显示乱码的原因有哪些?

  在通信波特率为 38400 时,通信正常,arm 板上解受到的数据(ascII码)显示正常. 但是当波特率为 115200 时,解受到的数据就出现乱码的现象! 用ARM2103 给电脑发送信息,用串口高度精灵看,一直接收的都是错误码. 波特率 换了好几档 比如9600 4800 2400 1200(我用的晶振是 11M多点的那个) 等都试过 都是乱码 区别是一个乱码来得快 一个乱码来得慢 串口线 23 脚短接能正常的自收自发 下载到单片机的程序也没啥问题. 真的不知道,原因出现在哪里! 1.

mfc 串口-自己编的MFC串口,用for循环能实现自动发送么

问题描述 自己编的MFC串口,用for循环能实现自动发送么 void CMSCOMM_TESTDlg::OnBnClickedButtonsend() { // TODO: 在此添加控件通知处理程序代码 //单击发送按钮的操作 UpdateData(true); //读取编辑框内容 for (int i=0;i<3;i++) { m_MSCOMM.put_Output(COleVariant(m_send));//发送数据 Sleep(3000); } //m_send.Empty(); //发

串口通信校验问题-请教串口校验问题(急急急)

问题描述 请教串口校验问题(急急急) 使用串口精灵截获指令如下:(上位机->下位机)7E C1 02 03 58 C0 01 04 C3 01 09 E7 1E 7E7E C1 02 03 59 C0 01 04 C3 01 09 32 81 7E7E C1 02 03 5A C0 01 04 C3 01 09 5C 29 7E7E C1 02 03 5B C0 01 04 C3 01 09 89 B6 7E......基本都是这样的,当然也有的是发送和返回可以看出58.59....是累加的:倒