你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32虚拟串口打开情况下被拔出,上位机软件怎么处理?

[复制链接]
jinghong21 提问时间:2016-12-29 09:01 /
我现在是能检测到虚拟串口被拔出的,不过现在需要串口再次插上去的时候,能够再次使用,这个就不好弄了,因为拔掉之前的串口状态是Open着的,串口再插上去不管你Open()还是Close()软件都会出问题!而且这种情况去操作,上位机软件经常出现崩溃闪退的现象!
有什么方法让上位机软件不闪退崩溃吗?
收藏 3 评论22 发布时间:2016-12-29 09:01

举报

22个回答
党国特派员 回答时间:2016-12-29 09:54:00
jinghong21 发表于 2016-12-29 09:34
我现在就是检测USB被插拔的,这些都没问题的!
  /// 检测USB串口的拔插
        ///

你明显是处理的不对。WM_DEVICECHANGE消息只是告诉你设备有变化,具体还要处理DBT_DEVICEQUERYREMOVE,DBT_DEVICEQUERYREMOVEFAILED,DBT_DEVICEREMOVEPENDING这几种情况。
你可以参考下:http://msdn.microsoft.com/en-us/library/aa363427(v=vs.85).aspx

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

andypanfan 回答时间:2016-12-29 09:13:12
有点深奥  没怎么看懂!!!
myfocus-2048857 回答时间:2016-12-29 09:13:29
虚拟串口,没玩过,听过
jackten 回答时间:2016-12-29 09:13:43
我也想知道                        
斜阳__ 回答时间:2016-12-29 09:21:58
这个涉及到操作系统层面了;好像没办法处理;应该是在拔之前close;

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

jinghong21 回答时间:2016-12-29 09:27:03
斜阳__ 发表于 2016-12-29 09:21
这个涉及到操作系统层面了;好像没办法处理;应该是在拔之前close;

你好,我在友善串口调试助手上面实验,是可以这样操作的,而且串口助手不会崩溃,它里面应该是做了处理。现在我只是想让软件不闪退,弹出对话框什么的都无所谓!
党国特派员 回答时间:2016-12-29 09:28:05
对虚拟串口要检测USB串口是否被拨掉消息的处理,具体参考windows消息WM_DEVICECHANGE
jinghong21 回答时间:2016-12-29 09:34:23
本帖最后由 jinghong21 于 2016-12-29 09:37 编辑
党国特派员 发表于 2016-12-29 09:28
对虚拟串口要检测USB串口是否被拨掉消息的处理,具体参考windows消息WM_DEVICECHANGE  ...

      
我现在就是检测USB被插拔的,这些都没问题的!
  /// 检测USB串口的拔插
        /// </summary>
        /// <param name="m"></param>
        protected override void WndProc(ref Message m)
        {
            if (m.Msg ==  Detection.UsbSet.WM_DEVICE_CHANGE)        // 捕获USB设备的拔出消息WM_DEVICECHANGE
            {
                try
                {
                    comPort.Close();     //我怀疑闪退就是这一局导致的,因为comPort已经不存在了,去操作它导致软件崩溃的!                                               //可是,要是不加这一局comPort的状态就是Open,下一次USB再插进来,都不能操作comPort
                }
                catch { }
                if (Detection.GetComNum() != null)
                {
                    try
                    {
                        comPort.PortName = Detection.GetComNum();
                        comPort.BaudRate = Setting.ComSet.comBaudRate;
                        comPort.Open();
                        statusStrip1.BackColor = Color.Green;
                        toolStripStatusLabel1.Text = "Open " + comPort.PortName + " " + comPort.BaudRate.ToString();
                    }
                    catch
                    {
                        comPort.Close();
                        comPort.Open();
                    }
                }
                else
                {
                    comPort.Close();
                    statusStrip1.BackColor = Color.Red;
                    toolStripStatusLabel1.Text = "Close " + comPort.PortName + " " + comPort.BaudRate.ToString();
                }         
            }
            base.WndProc(ref m);
        }
creep 回答时间:2016-12-29 09:48:42
应该不会崩溃吧,我们经常遇到是再次打开的时候会失败而已。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

123下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版