首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

拔出USB线,重新插上之后串口数据无法读取

2013-09-06 
拔掉USB线,重新插上之后串口数据无法读取是这样的,硬件是由USB转232连接的DTU。程序可以读取设备从服务器发

拔掉USB线,重新插上之后串口数据无法读取
是这样的,硬件是由USB转232连接的DTU。程序可以读取设备从服务器发送过来的数据。但是拔下电脑端USB线再插上后,读不到串口数据。serial的IsOpen也返回true。不过呢,重启一下读取数据的程序就可以正常读取数据,请问一下高手们,怎么做才可以让设备重新连接上电脑之后,能正常从串口读出数据来。谢谢了,这个问题急待解决。
[解决办法]
需要 PC 端的程序监测 OnDeviceChange 消息。当设备拔掉时,关闭串口。设备重新插入后,重新打开串口。
[解决办法]
这个应该和Windows的设备管理有关系,因为串口是非即插即用设备,而USB是即插即用设备,拔掉USB设备时如果对应的虚拟串口处于打开状态,导致串口设备无法删除,从而导致USB再次插入后映射串口设备错误,从而无法正常通信。可以用下面方式解决:

利用SetupApi枚举USB设备,检测该USB设备的插入或拔出,在检测到USB拔出的时刻把串口关掉。

不过需要注意的是,打开或关闭串口设备的设备名不能使用"COM1"之类的设备名,而应使用全路径名如"\\\\.\\COM1",否则是不行的.

[解决办法]
我用别人写的一个C#库, 里面是有个设备注册的,必须在每次指定VID/PID设备插入后注册一下,不然就很可能出现第一次能用,但重新插拔一次后就不能用了
[解决办法]

引用:
Quote: 引用:

我用别人写的一个C#库, 里面是有个设备注册的,必须在每次指定VID/PID设备插入后注册一下,不然就很可能出现第一次能用,但重新插拔一次后就不能用了
感觉你说的很接近真相了,但是能具体告诉我一下怎么做吗?



        public Form1()
        {
            InitializeComponent();
            OnHandleCreated(null);
        }
        protected override void OnHandleCreated(EventArgs e)
        {
            base.OnHandleCreated(e);
            usb.RegisterHandle(Handle);
        }
        //指定设备插入事件响应
        private void usb_OnSpecifiedDeviceArrived(object sender, EventArgs e)
        {
            OnHandleCreated(null);
        }

对于C#我现在只会照着别人的程序改,初始化时调用OnHandleCreated(null)一次,后面每次重新插拔一次后也调用一次.什么原理我也不清楚,你找找你那边有没有对应的函数

热点排行