3月18日注:修改USB最大包长度到1024(HS支持),USB初始化前增加等待100ms。
CMSIS-DAP Debugger 是 ARM 发布的面向 Cortex 系列 MCU 的开源(Apache 2.0协议)JTAG 与 SWD 调试器,现已被 Keil MDK 和 IAR EWARM 等 IDE 支持,用于包括主流的 STM32、NXP LPC、Freescale 等在内的多种 MCU 的程序下载与调试。
这里介绍一下 CMSIS-DAP 1.10 在 STM32F 上实现的高速 USB 2.0 调试器。
实际上这货还可以在 ARM DS-5 上调试 Cortex-A,不过这个超出本文讨论范围。
Keil MDK 工程和源代码(不包括 CMSIS 库已有部分)已上传至
https://code.csdn.net/K_O_Carnivist/cmsis_dap_stm32_hs/
我的试验平台
初版硬件原理图
用了 STM32F405RGT6。理论上只要支持 MDK Middleware 的、带 USB 的单片机都可以,包括更便宜的 STM32F205。
原理图省略了一些退耦电容。
STM32 与 USB3300 常规连接,公用一个 24MHz 晶振。几个 74LV1T125 做电平转换,其中 SWDIO/TMS 信号用 3 个引脚分别控制输入、输出和方向。
软件
Keil MDK 5.17,需要 Pro License;
安装了如下 Software Pack:
Keil::STM32F4xx_DFP 2.6.0
Keil::MDK-Middleware 7.0.0
Keil::ARM_Compiler
ARM::CMSIS 4.5.0
MDK 5 建立一个 USB 工程
这一步主要参考 http://www.keil.com/appnotes/files/apnt_268.pdf 及 USB Middleware 帮助文档。
新建工程
菜单 Project - New μVision Project。
选个工程存放的位置。
选设备的地方找到 STM32F405RGTx。
Run-Time Environment 选中这几个:
CMSIS - CORE
CMSIS - RTOS (API) - Keil RTX
CMSIS Driver - USB Device (API) - High-speed
Device - Startup
Device - STM32Cube Framework (API) - Classic
Device - STM32Cube HAL - Common
Device - STM32Cube HAL - Cortex
Device - STM32Cube HAL - GPIO
Device - STM32Cube HAL - PWR
Device - STM32Cube HAL - RCC
USB - CORE
USB - Device = 1
USB - Device - HID = 1
一个简便方法是先把 USB - Device - HID 设成 1,然后按照左下角的提示把依赖的项目选上就好。
新建好的工程有这些内容:
配置工程
设置 HSE_VALUE
在 Target 设置里面设置正确的晶振频率。
配置 CMSIS-Driver
这一步配置 USB 相关的硬件初始化。
打开 RTE_Device.h 并点击编辑区域下方进入 Configuration Wizard 模式,选中 USB High-speed,并设置 USB 相关的引脚。
配置 USB
这一步配置 USB 相关的软件初始化。
打开 USBD_Config_0.c 并进入 Configuration Wizard 模式,修改 Device Settings 和 String Settings。主要是把 Max Endpoint 0 Packet Size 改成 64 Bytes。
打开 USBD_Config_HID_0.h 并进入 Configuration Wizard 模式,按下图修改。
配置 CMSIS-RTOS
这一步为 USB 配置 RTOS 的资源。
打开 startup_stm32f405xx.s 并进入 Configuration Wizard,把 Stack Size 改成 0x600。
打开 RTX_Conf_CM.c 并进入 Configuration Wizard:
将 RTOS Kernel Timer input clock frequency [Hz] 改为 168000000,
将 Number of concurrent running threads 改为 4,
将 Number of threads with user-p