windows系统-串口设备导致鼠标乱跳的问题

文章目录[隐藏]

问题描述

最近在预装有windows7 SP1系统的工控机上,开发了一款modbus数据监听、处理的应用程序。主要功能就是监听485线上modbus通信数据,处理数据,并上报到中心平台,485数据通过USB串口转485信号转换模块获取。

调试过程中发现,工控机在接入被监听485信号的情况下启动,进入系统之后,采集程序会出现打不开串口设备的问题,并且,鼠标会不停的乱跳。

问题原因

起初怀疑是485数据发送频率太快,系统处理不及时导致的。之后,否定了这种猜测,因为串口设备和鼠标是两个不同的设备,设备应该不会相互干扰,唯一的可能就是U转485模块被系统识别成了“鼠标设备”。

果然,通过系统的“设备管理器”,证实了这种猜测,两个U转485模块被识别成了Microsoft serial BallPoing,而且位置就是那两个串口设备。

在这里插入图片描述
原来如此,由于串口上一直有485数据,系统启动时候,误认为这两个串口发送的数据是鼠标数据,从而把串口设备识别成了鼠标设备,这也解释了为什么应用程序打不开串口设备,因为这两个串口设备已经被占用了!

解决方法

知道了问题原因,解决办法就好说了,有以下几种:

  1. 不要在系统启动时,向串口发送数据,这样串口设备很容易会被识别成“串口鼠标设备”。
  2. 如必须发送串口数据,比如本案例,监听485数据,可以在系统启动之后,将“Microsoft serial ballpoing”设备禁用,下次系统再启动时候,就不会再将485串口识别成鼠标设备了;
    在这里插入图片描述
  3. 禁用注册表中sermouse的启动项,打卡注册表,sermouse注册表的路径如下:
    “计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sermouse”

在这里插入图片描述
Start各种值得含义如下:

  • 0,则驱动由启动引导器加载,应该跟“随着开机,最先启动”是同一回事;
  • 1,则驱动由操作系统的I/O子系统加载,即- 在系统内核初始化时加载;
  • 2,则驱动/服务在启动后自动加载;
  • 3,则驱动/服务就是按需手动加载;
  • 4,驱动/服务就是被禁用的状态

这里将Start的值置位4,禁用Sermouser驱动服务。

  1. 还有一种不太建议的方法,就是找到Microsoft serial ballpoing的驱动程序,然后删掉,这样可以从根本上解决问题。但是,驱动程序毕竟是系统程序,直接删掉,可能会造成系统不稳定,所以,不太建议这么做。

版权声明:本文为CSDN博主「奔跑的码仔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/linux_embedded/article/details/122542846

奔跑的码仔

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

Arduino传感器实验清单

Arduino 系列传感器和模块实验目录清单: 一块扩展板完成Arduino的10类37项实验(代码图形仿真) https://www.arduino.cn/thread-88696-1-1.html

STM32 QSPI双闪存操作

STM32 QSPI双闪存操作 使用CubeMX或者CubeIDE生成框架 使用野火的开发板,MCU型号为stm32h750/743,他们家核心板上使用了QSPI挂了2片FLASH,型号为W25Q2