win10 wsl 调用ST-LINK_CLI.exe 遇到的问题总结

环境和工具

  • 操作系统:win10 Ubuntu linux 子系统 (wsl)
  • make
  • ST-LINK V2 swd 烧录

要实现的功能

利用make 工具,实现对stm32 单片机一键烧录、擦除、读取hex等功能。实现原理是:命令行模式下 调用 ST 官方提供的命令行工具ST-LINK_CLI.exe,根据不同的参数,实现不同的功能。

遇到的问题

执行脚本,程序打印出ST-LINK CLI 的相关信息后,卡顿一分钟左右(期间ST-LINK V2 黄红灯一直交替闪烁),然后输出can't reset the core unable to connect to the st-link!

问题分析

  • 首先,系统内st-link 的驱动是正常可用的。利用st-link utility 的图形界面工具验证过,是可以正常擦除芯片的。
  • makefile 里面的实现应该也没问题,之前在win7 系统一直使用,能实现完整的功能。makefile的实现如下
STLINK_CLI='/mnt/c/Program Files (x86)/STMicroelectronics/STM32 ST-LINK Utility/ST-LINK Utility/ST-LINK_CLI.exe' 

erase:
	$(STLINK_CLI)  -ME

read_hex:
	$(STLINK_CLI) -c SWD -Dump 0x0 0x8000000 a.hex

  • 一直怀疑是wsl 调用Windows 程序的权限问题。但是权限问题解决之后,问题还是存在

问题解决

重新去查看了一遍 STM32 ST-LINK utility software description这个文档,最终找到了根本原因。调用命令行工具时,需要指定是使用JTAG 还是 SWD,否则默认使用JTAG。纳闷的是,我之前一直没指定使用SWD,之前怎么可以实现调用的?难道跟st-link_cli 的版本有关?改过后的makefile 如下

STLINK_CLI='/mnt/c/Program Files (x86)/STMicroelectronics/STM32 ST-LINK Utility/ST-LINK Utility/ST-LINK_CLI.exe' -c SWD freq=480

erase:
	$(STLINK_CLI)  -ME

read_hex:
	$(STLINK_CLI) -c SWD -Dump 0x0 0x8000000 a.hex

你可能感兴趣的:(STM32)