前些日子买了个新的STLINKV2 , ( 老的被我家猫猫一泡尿送上西天了)
刚开始还挺正常的, 后来有一天就突然间发现无法调试了.
网上尝试了各种方法, 各种操作. 百度了好久. 最后好在我自己研究出来了.
我使用的是 STM32CubeIDE 这个开发工具
调试选项如下图
其它的不需要修改, 然后点击下面的apply 按钮, 然后调试Debug, 提示 No STLink 如下图
后来尝试了下载ST-LINK Utility 用它是可以正常连接STLink的, 然后也能正常进行升级操作.
也能正常读取ST-Link的序列号.
可是在CubeIDE中就不能正常读取 . 使用CubeIDE中的 ST-Link 更新功能
却是可以正常更新的, 能够更新到比ST-LINK Utility 还要高的版本.
但是调试却仍然不行, 后来研究了一下, 我感觉可能跟我前些日子安装的杀毒软件有关.
于是我退出了360安全卫士 ,但是效果仍然如故. 还是不能用.
后来我在调试配置界面中发现了这个,我感觉应该是它的问题, 既然用到了端口说不定是跟网络防火墙或者其它的什么有关系. 然后我就点了下Show Command Line 按钮,
把里面的命令复制出来,到命令行窗口中运行了一下. 第一次的时候竟然弹出来了一个防火墙是否允许的提示, 这里我无法再次重现所以截不到图.
最后正常运行的图如下图,说明正常运行了,.
然后我再回到调试配置界面, 选择连接到远程GDB服务器, 但是地址仍然写localhost 端口不变.
这个时候我竟然可以正常调试了.
至此,问题已明了, 根本原因还是调试用的端口被杀毒软件或者防火墙给阻止了, 方法很简单, 要么关掉防火墙, 要么卸掉杀毒软件裸奔, 要么设置一下绿色端口. 就可以正常使用 启动本地GDB服务啦.
这里说一下原理, 为了统一和简化调试的复杂度, 开发工具软件几乎都是通过网络socket 端口来连接被调试的系统的. cubeide 本身并没有访问usb端口和串口或任何硬件, 只是通过网络socket端口跟GDB调试服务器进行通信, 这种调试服务器可以是STLINK server 也可以是Jlink Server 这种调试服务器是实现了调试接口协议的一个简单的程序, 这种调试服务器程序需要开放监听一个端口, 等待来自开发工具的连接. 就是开放监听端口的时候被杀毒软件或防火墙给阻止了.
为啥在cmd中就可以正常提示了呢?
答: 我也不知啊…哈哈哈哈
每次都要自己手动启动GDB服务器还是很麻烦的, 得改回来, 原因知道了, 剩下的就好办了.
然后我关掉cmd窗口, 把调试配置改成 启动本地GDB服务 , 仍然无法连接上STLINK. 说明要么GDB服务程序没启动成功,要么端口被拦截了.
后来经过任务管理器调试发现,确实没有启动GDB调试服务程序. 算了先不管它了, 8成也是防火墙或者杀毒软件给阻止了. 先手动启动吧, 后面卸载掉杀毒软件吧…
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net