背景
下面都是在mac下。
stlink工具是命令行下的st-link下载工具,其基于libusb开发。
之前(2018年6月)安装stlink的方法是通过brew安装:brew install stlink,
用brew安装stlink会自动安装依赖包 libusb 1.0.22。
问题
不知从什么时候起,有时候通过stlink下载单片机固件会需要等待5s,重启mac后ok,但是不确定什么时候可能又会出现问题。
原因
把stlink源码下载下来跟踪发现5s的时间卡在了 stlink/src/usb.c -> stlink_open_usb()函数 -> libusb_get_device_list()函数。
网上这里(https://github.com/eblot/pyftdi/issues/42#issuecomment-449648800)有人提供了一个方法,直接修改libusb源码把5s改成了100ms。
但实际上我们不需要修改源码,最近版libusb已经改掉了这个问题,我们只要更新一下libusb,并用最新版本的libusb重新编译stlink即可。
homebrew没有更新libusb和stlink,我们只有从github上下载源码编译。
解决方法
1、卸载原来用brew安装的stlink和libusb:
brew remove stlink
brew remove libusb
2、github下载libusb源码并安装:
github主页:https://github.com/libusb/libusb
- 下载:到工程的release页面下载“libusb-1.0.23-rc1.tar.bz2”
- 解压,并进入 libusb-1.0.23-rc1 目录
- ./configure
- make
- sudo make install
安装完成后会在 /usr/local/lib/ 下多出 libusb-1.0.** 文件。
3、github下载stlink源码并安装:
github主页:https://github.com/texane/stlink,stlink是用cmake编译的。
- clone代码并进入工程目录
- mkdir build
- cd build
- cmake ..
- make
- sudo make install
安装完成后会在 /usr/local/bin/ 下多出 st-flash 文件。