最近公司的项目在等供应商的设备有点空闲的时间了,就折腾了下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设置为系统软中断。
文章图片
文章图片
至于串口的功能,直接使用串口助手打开调试器对应的COM口就可以了。
在Ubuntu中使用OpenOCD + CMSIS DAP 使用过程中的问题 作为这个系列中一篇自然在 Ubuntu 中的内容才是我们要讲述的重点。开始的时候我在接上硬件使用新的 OpenOCD 配置时,我得到的是无法连接 CMSIS DAP 的问题。
openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg
【STM32高级开发(16)-CMSIS DAP调试工程】仔细研究了一晚上,Google了几个问题的关键词,最后还是在抱着尝试的态度安装一个新的 OpenOCD 的过程中我发现了之前的问题。原来在当时安装 OpenOCD 的时候有两个问题:
- OpenOCD 编译安装时的参数
在我们下载下来 OpenOCD 的源代码编译之前会使用 ./configure 的指令配置编译参数,而它默认的编译配置只使能了 stlink jlink 等常见的几个调试器,并没有添加对 CMSIS DAP 的支持。
- usb rule.d 的问题
在 ubuntu 或是 Linux 中我们使用 /etc/udev/rules.d/ 目录下的规则文件来识别USB设备提供其接口给 libusb 使用,然后 libusb 在提供接口给 openocd 连接使用。所以在我们必须在这个文件内添加新的 DAP CMSIS 的库才能正常使用。
首先显然的我们需要重新配置编译并安装 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 devicesyes (auto)
ST-Link JTAG Programmeryes (auto)
TI ICDI JTAG Programmeryes (auto)
Keil ULINK JTAG Programmeryes (auto)
Altera USB-Blaster II Compatibleyes (auto)
Versaloon-Link JTAG Programmeryes (auto)
OSBDM (JTAG only) Programmeryes (auto)
eStick/opendous JTAG Programmeryes (auto)
Andes JTAG Programmeryes (auto)
USBProg JTAG Programmeryes (auto)
Raisonance RLink JTAG Programmeryes (auto)
Olimex ARM-JTAG-EW Programmeryes (auto)
CMSIS-DAP Compliant Debuggeryes
Cypress KitProg Programmeryes (auto)
Altera USB-Blaster Compatibleno
ASIX Presto Adapterno
OpenJTAG Adapterno
SEGGER J-Link Programmeryes (auto)
可以看到其中 CMSIS-DAP 已经被启用,之后我们使用指令编译并安装新的 OpenOCD (不需要删除旧版)
$ sudo make
$ sudo make install
在安装完成后我们进入 contrib 目录使用指令将 60-openocd.rules 文件复制入 /etc/udev/rules.d/ 目录下
$ sudo cp60-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: SWDSupported
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|基于STM32和freeRTOS智能门锁设计方案
- 日常分享|共享充电宝方案原理,具体部件组成以及主控MUC参数
- #|ARM裸机开发(汇编LED灯实验(I.MX6UL芯片))
- STM32|STM32的四种IO输出模式
- STM32 远程升级(ISP / IAP)
- stm32|stm32f103can总线过滤器配置
- STM32CubeMX配置SDIO模式(非DMA方式)
- STM32|如何建一个STM32F030标准库工程模板
- STM32 时钟RCC相关配置参考stm32f10x_rcc.h
- STM32 NVIC