STM32高级开发(16)-CMSIS DAP调试工程

最近公司的项目在等供应商的设备有点空闲的时间了,就折腾了下ARM官方开源的CMSIS DAP调试器的方案,用的是X893大神的方案,下面附上他的个人主页和在GitHub上的项目链接(我是用的是其中stlinkv2.1的软硬件方案):

[http://akb77.com/g/stm32/cmsis-dap-adapter/](http://akb77.com/g/stm32/cmsis-dap-adapter/)
[https://github.com/x893/CMSIS-DAP](https://github.com/x893/CMSIS-DAP)

这个调试器方案可以说极具性价比,SWD接口速度可以达到10M的全速,还附带一个最高支持到115200bps的串口,而且连接一根线就可以识别为两个设备,既可以单独的作为一个调试器使用,也可以集成到其他项目的PCB板上作为板载调试器和USART转串口功能电路。


在 Keil 中使用 CMSIS DAP

在我测试的过程中,貌似只有Keil5能够成功识别CMSIS DAP,其设置方法基本和其他调试器使用方法无异,因为CMSIS DAP 是把自身标记为一个 USB HID 和 CDC ACM 设备使用的,前者是调试功能的接口,后者是串口接口,在 Windows 都可以自动识别,不需要安装驱动。不过记得如果没有在硬件调试口上设置硬件复位口的话,要在 Keil 的调试器设置中 Connect & Reset Option 中将Reset设置为系统软中断。

STM32高级开发(16)-CMSIS DAP调试工程_第1张图片

STM32高级开发(16)-CMSIS DAP调试工程_第2张图片

至于串口的功能,直接使用串口助手打开调试器对应的COM口就可以了。


在Ubuntu中使用OpenOCD + CMSIS DAP

使用过程中的问题

作为这个系列中一篇自然在 Ubuntu 中的内容才是我们要讲述的重点。开始的时候我在接上硬件使用新的 OpenOCD 配置时,我得到的是无法连接 CMSIS DAP 的问题。

openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg

仔细研究了一晚上,Google了几个问题的关键词,最后还是在抱着尝试的态度安装一个新的 OpenOCD 的过程中我发现了之前的问题。原来在当时安装 OpenOCD 的时候有两个问题:

  1. OpenOCD 编译安装时的参数

    在我们下载下来 OpenOCD 的源代码编译之前会使用 ./configure 的指令配置编译参数,而它默认的编译配置只使能了 stlink jlink 等常见的几个调试器,并没有添加对 CMSIS DAP 的支持。

  2. usb rule.d 的问题

    在 ubuntu 或是 Linux 中我们使用 /etc/udev/rules.d/ 目录下的规则文件来识别USB设备提供其接口给 libusb 使用,然后 libusb 在提供接口给 openocd 连接使用。所以在我们必须在这个文件内添加新的 DAP CMSIS 的库才能正常使用。


重新安装 OpenOCD

说完问题我们接下来就要介绍说解决方法了。

首先显然的我们需要重新配置编译并安装 OpenOCD 启动其中对 CMSIS DAP 的支持代码,但在此之前我们先需要安装一个的 hid 库,因为Linux上默认是没有HID设备驱动的。

$ sudo apt-get install libhidapi-dev

在安装完成后,进入OpenOCD 的源代码路径,使用指令配置其编译参数

$ ./configure --enable-cmsis-dap

在等待配置脚本完成后会显示如下内容:

OpenOCD configuration summary
--------------------------------------------------
MPSSE mode of FTDI based devices        yes (auto)
ST-Link JTAG Programmer                 yes (auto)
TI ICDI JTAG Programmer                 yes (auto)
Keil ULINK JTAG Programmer              yes (auto)
Altera USB-Blaster II Compatible        yes (auto)
Versaloon-Link JTAG Programmer          yes (auto)
OSBDM (JTAG only) Programmer            yes (auto)
eStick/opendous JTAG Programmer         yes (auto)
Andes JTAG Programmer                   yes (auto)
USBProg JTAG Programmer                 yes (auto)
Raisonance RLink JTAG Programmer        yes (auto)
Olimex ARM-JTAG-EW Programmer           yes (auto)
CMSIS-DAP Compliant Debugger            yes
Cypress KitProg Programmer              yes (auto)
Altera USB-Blaster Compatible           no
ASIX Presto Adapter                     no
OpenJTAG Adapter                        no
SEGGER J-Link Programmer                yes (auto)

可以看到其中 CMSIS-DAP 已经被启用,之后我们使用指令编译并安装新的 OpenOCD (不需要删除旧版)

$ sudo make 
$ sudo make install

在安装完成后我们进入 contrib 目录使用指令将 60-openocd.rules 文件复制入 /etc/udev/rules.d/ 目录下

$ sudo cp  60-openocd.rules /etc/udev/rules.d/

因为这个文件中包含了所有支持调试器的 USB 接口描述,所以我们还需要删除以前复制进入这个文件内的规则文件,比如 49-stlinkv1.rules 49-stlinkv2.rules 49-stlinkv2-1.rules 99-jlink.rules 等

$ rm 49-stlinkv1.rules 49-stlinkv2.rules 49-stlinkv2-1.rules 99-jlink.rules 

重启系统来重新加载规则。再使用 OpenOCD 指令连接,大功告成~。


使用调试器

重启系统后我们再次使用指令连接目标板

$ openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg
Open On-Chip Debugger 0.10.0+dev-00197-g2168c47 (2017-10-14-08:41)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "swd". To override use 'transport select '.
adapter speed: 1000 kHz
adapter_nsrst_delay: 100
none separate
cortex_m reset_config sysresetreq
Info : CMSIS-DAP: SWD  Supported
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : CMSIS-DAP: FW Version = 1.0
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x1ba01477
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints

连接成功~

PS:如果显示连接失败的话试试重新插拔下 CMSIS DAP 的USB接口,我之前就遇到这样的问题了。

设置串口

由于使用的是 CDC ACM 的驱动,所以我们的串口名称不是 ttyUSB0 而是 ttyACM0 ,使用指令来更改 Minicom 的配置

$ sudo minicom -s

Ctrl+a,o。设置串口参数。在serial port setup中我们设置,串口设备号和波特率及奇欧校验位等参数,然后选中save setup as dfl后重启minicom,就完成串口的设置了。

STM32高级开发(16)-CMSIS DAP调试工程_第3张图片

你可能感兴趣的:(STM32)