如何实现一次非阻塞的usb转232串口线接线图写

前几天调通了在windowsusb转的usb转232串口线接线图连到fs2410的开发板上,超级终端和DNW都输出正常后来想在linux下试试效果(在windows xpvmware中的redhat9),可费了两天劲也没见有输出内容郁闷的不行。

紟天下班后又报着试试的心理,又从头试把这个转接口当作一个物理的usb转232串口线接线图,(自己总觉得这个转usb转232串口线接线图相对虚擬机来说就是一个真实的usb转232串口线接线图,后来查了一下vmware的虚拟原理这样认为没找到明显的错误,暂且这样认为吧),所以我又重噺设了一下vmware有关usb转232串口线接线图的设置:设备状态选中“已连接”和“打开电源时连接”;使用物理串行端口选中windows下设备管理器里显示的usb轉232串口线接线图号(我这里显示是com5也不清楚这个顺序是从哪排的,试遍所有usb口也是从com4开始,没找到com1-3)不建议用自动探测。特别提示这几项设置要在虚拟机启动,而不启动虚拟机里的linux然后就启动linux,进入口又从头开始设minicom的配置:用minicom Device设为/dev/ttyS0,其它项按实际值设即可保存后洅重新进minicom,给开发板上电竟然又可以看见久违的usb转232串口线接线图信息了,惊奇之余回想一下,这个过程有种无语的感觉,从网上找資料一定根据自己的情况灵活运用,不可照搬把自己领到一个小胡同出不来了,

        后来发现另一个关键点就是vmware上在设置usb转232串口线接线圖的界面上有一个I/O模式,当那个选项选中时usb转232串口线接线图输出输入正常,不选中时虽然有输出,但有乱码

最近在学习嵌入式linux开发,夲人是在虚拟机中装的linux,起初传输文件先是从linux用传到windows下然后再传到开发板上,必须在linuxwindows之间频繁切换感觉太麻烦了!于是尝试在虚拟機中使用usb转232串口线接线图与开发板直接通信,在网上查了一些相关资料加上一番摸索终于搞定了。

linux系统开始要在VMWare中设置usb转232串口线接线圖,默认的并没有启动usb转232串口线接线图先添加一个usb转232串口线接线图,串行端口选项选择“使用位于主机上的物理串行端口”下一步中選择使用相应的usb转232串口线接线图(本人先是在windows下安装了usb转usb转232串口线接线图驱动(PL-2303 Driver),这时开发板插到usb口上会显示成一个usb转232串口线接线图峩的是COM3,在这选COM3口至于不安这个驱动,在这一步中选自动侦测可不可以本人没尝试,就不知道了嘿嘿)。

连接好开发板打开linux虚拟機,进入终端输入sudo minicoms进入minicom的设置模式。

注:网上朋友说要检查一下/dev下是否有ttyUSB0这个东东不过我的系统中没有,倒是有一堆ttys0, ttyS0, ttys1, ttyS1……一堆东西不太理解,感觉是usb转232串口线接线图用的有哪位大侠知道,恳请指教

以后按下面设置就可以了

下面的设置参考的网上的资料,在此感謝一下

2. 设置波特率:按“E”键进入设置“bps/par/Bits”(波特率)界面设置波特率为115200,按回车返回

其它为缺省设置,然后按回车到usb转232串口线接线圖设置主菜单选择“Save setup as df1”,按回车键保存刚才的设置(网上说保存到“/etc/vminirc.df1”经查看我的实际保存到的是/etc/minicom/minirc.df1,版本不同吧)最后退出设置菜單就可以使用minicom与开发板通讯了(不知为什么我的还要重启虚拟机才能进行通信)。

,没有用sudo的话配置文件是保存在个人工作目录的.minirc.df1文件中。以后再使用minicoms不管加不加sudo都会调用~/.minirc.df1的配置,如果发现改不了配置可能是这个原因(这点令本人当初很是困惑)。而使用命令 sudo minicom restart,它会找不到配置菜单而使用默认配置,不知是不是bug

注:minicom中有用的功能

命令帮助—“Ctrl A”后按“Z

发送文件--Ctrl A”后按“S

       本人对此只是简单实現了虚拟机下与开发板的usb转232串口线接线图通信,对有些问题没有深入研究如有错误,欢迎指正

虚拟机下的usb 转usb转232串口线接线图

其实只要點下一步就可以),直到完成为止

3、连接好开发板,打开linux虚拟机进入终端输入minicoms,进入minicom的设置模式

检查是否存在设备/dev/ttyUSB0,如果没有就建立┅个:(我的一直找不到/dev/ttyUSB0,按下面的方法新建了一个,打开minicom时弹出没有此设备我一查看原来usb转usb转232串口线接线图还运行在windows下面,没有载入linux,加載之后在/dev中发现了ttyUSB0很顺利的连上了)

b)设置波特率:按“E”键进入设置“bps/par/Bits”(波特率)界面,如果按“I”以设置波特率为115200按回车返回。(我使用的是2440的板子)

注:minicom中有用的功能

命令帮助 “Ctrl +A”后按“Z

发送文件“Ctrl +A”后按“S

USB转usb转232串口线接线图使用设置:

Windows下可以使用超级终端来连接交换机和路由器等工业设备而且在Windows下使用usb转usb转232串口线接线图的线也有相应的驱动,但是如何在Linux下使用呢

首先要有一个Linux下的终端软件叫minicom假如没有装这个的朋友可以到自己的源中去下载,然后你就要插上你的usb转usb转232串口线接线图的线在LinuxUsb转usb转232串口线接线图的线几乎鈈需要驱动,你插上以后在你的dev的目录下应该会有一个ttyUSB0的文件假如有那么恭喜你了,你的这根线现在是可用的了进入到终端输入suroot用戶进行登录,使用minicom必须要用root用户然后输入minicom -s 进行设置,进入设置界面以后你会看到有几个选项分别是:

第五项:EBps/par/Bits :57600(这里要注重,这个值偠改成你的连接的设备的波特率)

接下来你就可以将你的usb转232串口线接线图线接上设备然后在终端下输入minicom就可以对设备进行调试了。

    现在昰要用虚拟机里的Linux访问usb转232串口线接线图以方便嵌入式板上的usb转232串口线接线图开发。

3.选中此项后会安装vmware的驱动安装完后可能需要重新插拔接口,操作完成后打勾表明已连接(windowsCOM8此时不再可用)


}
*******函数功能:打开usb转232串口线接线图設备链接

1、win32下对usb转232串口线接线图的操作可以通过两种方式:ActiveX控件和Windows API函数第一种程序简单但是欠缺灵活,第二种自由灵活编程不易

无论哪一种方式都需要完成四个步骤:

2、win32下对文件的概念进行了扩展,无论是文件、通信设备、命名管道、邮槽、磁盘还是控制台都是用API函数CreateFile咑开或者创建

lpfilename:是将要打开的usb转232串口线接线图逻辑名

使用同步方式打开的代码:

使用重叠方式(非阻塞式)打开usb转232串口线接线图的方法:

3、usb转232串口线接线图的配置需要采用DCB结构进行,这个结构体中包含了诸如波特率、数据位数、奇偶校验和停止位数等信息在查询和配置usb转232串口线接线图属性时,都要用DCB结构作为缓冲区

一般采用CreateFile打开usb转232串口线接线图之后,调用GetCommState函数来获取usb转232串口线接线图的初始配置要修改usb轉232串口线接线图的配置,应该先修改DCB结构然后再调用SetCommState函数设置usb转232串口线接线图。

除了在BCD中的设置外程序一般还需要设置I/O缓冲区的大小囷超时,Windows用I/O缓冲区来缓存usb转232串口线接线图输入和输出的数据如果通信的速率较高,应该设置较大的缓冲区调用SetupComm函数可以设置串行口的輸入和输出缓冲区的大小。

在用ReadFile和WriteFile读写usb转232串口线接线图时需要考虑超时问题。超时的作用是在指定的时间内没有读入或发送指定数量的芓符ReadFile和WriteFile的操作依然会结束。要查询当前的超时设置应调用GetCommTimeout函数该函数会填充一个COMMTIMEOUTS结构,调用SetCommTimeout可以用某一个COMMTIMEOUTS结构的内容来设置超时读寫usb转232串口线接线图的超时包括间隔超时和总超时,间隔超时是指在接收时两个字符之间的最大时延总超时是指读写操作总共话费的最大時间。写操作只支持总超时读操作支持两种超时。

COMMTIMEOUTS结构的成员都以毫秒为单位总超时的计算方式是:

总超时=时间系数*要求读/写的字符數+时间常量

4、usb转232串口线接线图的读写采用ReadFile和WriteFile函数,其同步还是异步都由CreateFile函数决定如果在CreateFile创建句柄时制定了FILE_FLAG_OVERLAPPED标志,就调用ReadFile和WriteFile函数是重叠的如果未指定重叠标志,则读写操作应该是同步的如果操作成功,这两个函数都返回TRUE当都返回FALSE时也不一定就是失败的,应该调用GetLastError函数汾析返回的结果如果返回值是ERROR_IO_PENDING,说明重叠操作未完成

5、串行通信传输方式分为信号传输方式和线路传输方式两类信号传输方式是按信號原样传输的基波传输或是利用原信号调制成高频载波的载波传输;线路传输方式是指通信双方设备的线路可以选择单工、半双工、全双笁和多双工传输。

2、RS232RS485等均采用信号传输方式,这种方式实现简单但是通信距离有限制。远距离传输时一般采用Modem通过Modem可以将原信号调淛成高频的模拟信号,然后通过电话网络进行远距离通信。线路传输方式一般分成单工、半双工和全双工、多工四种方式其中半双工采用一条传输线,全双工采用两根线可以同时对发多工传输方式采用复用技术将一个信道划分为若干个频带或时间片,从而使多路信号哃时共享信道这就是多工传输方式。使用复用器和集中器可以降低成本提高通信网的传输效率。

3、在高级通信控制程序中一般采用循環冗余代码CRC校验以自动纠错方式发送

4、波特率:1波特=1bit/s,波特率是衡量通信线路基本电信号发送率的一种量度它仅仅是电学上的度量单位,不是信息的度量单位代表通信线路上的电脉冲速率

5、发送器在发送时钟的有效沿(下降沿)作用下将移位寄存器的数据按位移位串行输絀,在接收数据时接收器在接收时钟的有效沿(上升沿)作用下对接收数据按位采样,发送/接收时钟频率=1/16/64*发送/接收波特率

6、串行传输协议┅般有两类:异步通信同步通信。异步传输格式也成为起止式异步协议特点是通信双方以一个字符作为数据传输单位,且发送方传送字苻的间隔时间是不定的在传输一个字符时总是以起始位开始,以停止位结束起始位恒为0,长度1停止位恒为1,长度1、1.5、2可选起始位囷停止位及其中间内容称为一帧。

7、异步传输的错误检测:接收方能检测到的错误一般有:奇偶错超越错(也成为溢出错)和帧格式错(因为時钟不匹配或者不稳定未能按照协议装配成一个完整的字符帧等)

8、面向字符的同步传输协议:SYN控制字,是同步字符每一帧开始都有SYN,加┅个SYN的称为单同步加两个SYN的称为双同步,同步字符的作用是为了联络SOH是序始字符,它表示标题的开始标题中包括源地址、目标地址囷路由指示等信息。STX是文始字符标志着传送的正文的开始,数据块是被传送的正文内容由多个字符组成。数据块后面是ETB组终字符或ETX文終字符在对很长的文段分段发送时每个分数据块后面用组终字符ETB,最后一个分数据块后面用文终字符ETX在帧的最后是校验码,它对从SOH开始直到ETX或ETB字段进行校验面向字符的传输有未解决的问题,需要在数据字符前加转义字符DLE这样的实现比较麻烦,所以出现了面向比特的哃步传输协议

9、面向比特的同步传输协议:又称为二进制同步传输,协议包括三种:同步数据链路控制规程SDLC;高级数据链路控制规程HDLC;先进数据通信规程ADCCP

10、SDLC/HDLC协议规定所有信息传输必须以一个标志符开始,且以同一个标识符结束这个标识符是,称为标志场所有的信息嘟是以帧的形式发送的,而标志字符提供了每一帧的边界接收端可以通过搜索确定帧的开始和结束。

11、常用的通信标准:一是计算机与外设之间的物理接口标准属于七层模型中的物理层。二是按接口标准设置计算机与外设之间进行串行通信的接口电路

DCE:数据通信设备,该設备和其与通信网络的连接构成了网络终端的用户网络接口。它提供了到网络的一条物理连接、转发业务量并且提供了一个用于同步DCE设備和DTE设备之间数据传输的时钟信号。调制解调器和接口卡都是DCE设备的例子:

DTE:数据终端设备,指的是位于用户网络接口用户端的设备,它能够莋为信源、信宿或同时为二者数据终端设备通过数据通信设备(例如,调制解调器)连接到一个数据网络上并且通常使用数据通信设備产生的时钟信号。数据终端设备包括计算机、协议翻译器以及多路分解器等设备

标准指出DTE应该拥有一个插头(针输出)DCE拥有一个插座(孔输絀)

DTE和DCE之间的连接直连即可,两台DTE之间的连接需要用到硬件握手信号

二、RS-423A(1.2),RS-422A(1.2),RS-485(1.2-1.5)。RS-423A采用差分非平衡传输RS-422A采用差分平衡传输,用两根信号线RS-485采用差分平衡传输,并扩展了RS-422A的功能在RS-422A中只允许电路有一个发送器,而RS-485标准允许电路中有多个发送器他们的主要区别在于RS-485只能工作茬半双工方式,RS-422A却可以工作在全双工方式

三、USB接口标准。USB通用串行总线是一种应用于PC领域的接口技术,在工业领域太麻烦--!!

12、握手处理:茬半双工方式下的握手信号可以通过硬件握手处理或软件握手处理两种方式完成其中硬件握手处理即使用专门的导线来作为握手联络信號,握手信号和数据信号不在同一条线路上流通;软件握手处理不使用专门的握手导线而是与数据信号一起在同一条导线上传输,它通過在数据线上传送特定的字符来作为握手的专用信号

RS-232C支持硬件握手和软件握手。硬件握手使用DTR/DCR/RTS/CTS四个信号DTE设备通过TxD向DCE设备发送数据的条件是:DTR/DCR/RTS/CTS四个信号引脚电压必须都为正电压。

13、usb转232串口线接线图调试的注意事项:

一、DTE和DCE的区别若连接两个DTE,必须要将2号线和3号线交叉连接;

二、决不能带电拔插usb转232串口线接线图在连接和拔下usb转232串口线接线图时,一定要保证至少有一端是不带电的否则容易烧坏计算机或設备中的usb转232串口线接线图通信芯片。

// TODO: 在此处添加控件通知处理程序代码

18、对于这么一种情况:使用MSComm控件在单文档程序中进行通讯因为单攵档中并没有可以拖动添加控件的窗口,所以需要使用程序来创建CMSComm类的实例为使创建的实例在整个程序中都能访问到,一般创建在CMainFrame中其过程包括:

一、在主框架头文件MainFrame.h中添加代码;

二、在主框架实现文件MainFrm.cpp中添加代码;

三、在手工定义资源文件中添加ID,名称为myID.

在主框架类荿员函数OnCreate函数中添加代码:

添加OnCommMscomm成员函数实现对控件事件的响应。

由控件拖动产生的代码编译器会自动在对话框的成员函数OnInitDialog()中自动生荿创建控件实例的代码,初始化及打开usb转232串口线接线图的操作可以放在该创建代码之后;而对手动创建的CMSComm类可以在创建时候后添加初始化玳码(Afx~~处)当然在刚才编过的程序里初始化什么的显得离散的原因,你知道的是因为按钮和选择功能的分开就是了。

19、首先知道一点:对于CEditView類在MFC的创建向导的6 of step6选择,错过的话就无法具备文本编辑功能

20、使用API编程时可以采用同步方式和重叠的异步方式。异步方式采用多线程因为API中usb转232串口线接线图被当做是一个文件,可以进行文件的操作所以可以采用CreateFile()函数打开usb转232串口线接线图,该函数返回一个usb转232串口线接線图句柄使用该句柄初始化usb转232串口线接线图参数。然后使用WriteFile()发送串行数据使用ReadFile()可以从usb转232串口线接线图读取串行数据。操作完毕之后使用closeHandle()函数关闭usb转232串口线接线图。

24、接收数据:使用ReadFile函数

25、定时接收数据,需要将相应函数语句写在定时器响应函数中:

}

如何进行usb转232串口线接线图通信自萣义协议真心求教 [问题点数:40分,结帖人qq_]

现在需要通过usb转232串口线接线图通信向向显示屏传 温度、适度还有心跳以便在显示屏显示出来,协议自定义求教,怎么自定义协议呢求高手指点。谢谢~

这是完全的自定义协议你想怎么定义都行。例如一帧数据:

帧头(两个字節)+标识位(一个字节)+类型(一个字节)+数据长度(一个字节或者多个字节)+数据(多个字节)+校验位(一个字节)+帧尾(一个字节)

这是完全的自定义协议,你想怎么定义都行例如一帧数据:

谢谢,当open、初始化好usb转232串口线接线图然后发送数据的时候,怎么把这一串数据包发送出去呢谢谢

谢谢,当open、初始化好usb转232串口线接线图然后发送数据的时候,怎么把这一串数据包发送出去呢谢谢

怎么发送?组好包就是一串字符串直接调用发送功能就行。


怎么发送组好包就是一串字符串,直接调用发送功能就行

以上是一个发送的程序,

send_buf是要发送内容的地址,而数据包里包含头、数据类别的标志位、温度、心跳、校验位、尾

每一部分占得字节数不同:头(1字节)、數据类别的标志位(1字节)、温度(3字节)、心跳(2字节)、校验位(1字节)、尾(1字节),

如何将这些头、标志位、温度、心跳等信息组成一个数据包呢?直接做成字符串好像是不行的谢谢

,如何将这些头、标志位、温度、心跳等信息组成一个数据包呢直接做成字苻串好像是不行的。谢谢

如果 LZ 你是担心出现零等异常字符可以考虑在发送将将字符串格式化。

但这样做就要求接收方对接收到的字符吔进行相应的反处理。



谢谢您指点我现在还是有点迷糊。例如:协议中规定传输格式如下定长: 头(1字节)、数据类别的标志位(1字節)、温度(3字节)、心跳(2字节)、校验位(1字节)、尾(1字节),

其中头为0X4F尾为0XF4,现在既传温度也传心跳其中温度为37度,心跳为68丅此时温度心跳均显示时标志位为0X03,校验位按求和校验(此时可以先不管)这样的数据传输如何用代码表示呢?


你从最基本的需求出發然后一步步考虑是否需要追加附加信息。

比如你就是要传 3 字节数据,分别是温度、湿度、脉搏如果间隔时间够长,仅发送这三个芓节就可以了也还是理解为起始信号和结束信号就是至少长度 N 字节的空闲状态,如果你发送此 3 字节的间隔小于 N 的话

最后,你是否需要糾错如果你的传输环境不是非常可靠,有可能出现传输错误你就可能需要在包中加上错误校验域(当然也可以仅仅依赖于usb转232串口线接線图的奇偶校验),可以用 LRC 或 CRC

总之,需求越高系统越复杂。完全取决于你的实际应用需求

你从最基本的需求出发,然后一步步考虑昰否需要追加附加信息

比如,你就是要传 3 字节数据分别是温度、湿度、脉搏。如果间隔时间够长仅发送这三个字节就可以了。也还昰理解为起始信号和结束信号就是至少长度 N 字节的空闲状态如果你发送此 3 字节的间隔小于 N 的话。

最后你是否需要纠错。如果你的传输環境不是非常可靠有可能出现传输错误,你就可能需要在包中加上错误校验域(当然也可以仅仅依赖于usb转232串口线接线图的奇偶校验)鈳以用 LRC 或 CRC。

总之需求越高,系统越复杂完全取决于你的实际应用需求。

谢谢可否用代码表示一下怎样组包呢,看的还是有点迷糊謝谢

请问楼主的问题解决了没?现在我也遇到自定义usb转232串口线接线图协议的问题。

匿名用户不能发表回复!
}

我要回帖

更多关于 usb转232串口线接线图 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信