STM32开发---CMSIS DAP下载器参数设置、故障排除

STM32的调试下载器中,这两年最火的,肯定是CMSIS-DAP了。

开源、免驱、稳定、虚拟串口......!!

下面以淘自魔芯科技的CMSIS-DAP为例, 详细解释使用中的设置步骤,其它的商家产品,设置步骤基本一致。


一、接线图示

  • 3.3V   和STLink必须连接3.3V作为参考电压不同,它是真实的3.3V 500ma供电,如果目标板已有供电,这根线可以不接;
  • GND        共地,    必须接
  • SWDIO    数据线,必须接
  • SWCLK   时钟线,必须接
  • nRST       复位线,使用电平信号复位,可以不接,因为CMSIS-DAP更常使用软件信号复位;
  • 背面 RX   虚拟串口,贼好用, 记得和板子反接,RX接TX, TX接RX
  • 背面 TX    同上

二、软件设置图示

注意:最常见的能识别目标芯片,但调试下载失败,常常是第7步忽略了。


三、常见故障解决

1、弹窗: 不能识别设备

  • 多发生在win7或以下系统. CMSIS-DAP是免驱动的, 插上就能直接使用. 如果提示不能识别设备, 是指系统没能找到虚拟串口驱动, 百度一下CMSIS-DAP的虚拟串口驱动, 安装一个就好了,  另外, win10无需此驱动.
  • 如果不安装虚拟串口的驱动, 一直提示不能识别, 也不影响CMSIS-DAP的调试下载使用

2、不能发现CMSIS-DAP设备

  • 这个还真常见,现象:把CMSIS-DAP插到电脑后, 没文字弹窗提示, 或者没声音提示, 或者Keil里没找到相应设备;
  • 插到电脑之后,观察CMSIS-DAP的指示灯,闪烁表示已正常连接电脑,无闪烁表示连接不成功,没能建立连接;
  • 能正常闪烁的:检查杜邦线或更换杜邦线,杜邦线用久了之后,会出现松动、内部断线....;
  • 能正常闪烁的:检查接线有没有接错了,别犯低级错误;
  • 不能闪烁:重新插拔,或换一个U口;
  • 不能闪烁:如果是使用内置CMSIS-DAP的板子,如魔芯、魔女的开发板,经Micro USB接口使用数据线连接至电脑的,千万别以为充电用的安卓线就一定是数据线!!不一定!!

3、能发现CMSIS-DAP,但不能识别目标芯片

  • 检查杜邦线,万用表测量是否断路,或更换杜邦线,防止松动或内断
  • 检查接线是否接错了
  • 检查上图5-3中的第6步选项,必须参数!是否已选中SW参数!与相邻的时钟速度无关。

4、能识别目标芯片,但下载或调试失败

  • 检查图5-3中的第7步,同样是必须参数,意思是使用软件复位;
  • 万用表测量杜邦线,是否断路;
  • 使用更短的杜邦线,以减少干扰;
  • 降低时钟速度
  • 如果是刚移植或新建的工程,检查工程的启动文件,是否与芯片的容量型号相匹配,分ld,md,hd.....
  • 同上,移植或新建的工程,要检查FLASH的下载算法,是否与芯片的容量型号相匹配。

 

### 关于 Visual Studio 中配置 DAPLink 的解决方案 在开发嵌入式项目时,使用标准输入/输出流(`stdio`)通过调试适配器(如 DAPLink)与目标设备通信是一种常见需求。然而,在某些情况下,Visual Studio 可能会遇到无法识别 DAPLink 设备的问题。以下是针对此问题的详细分析和解决方法。 #### 1. **确认硬件连接** 确保 DAPLink 调试接口已正确连接到计算机,并且驱动程序已经安装成功。通常,DAPLink 使用的是 CMSIS-DAP 协议,Windows 系统应自动为其安装相应的驱动程序[^1]。如果未检测到设备,则需手动下载并安装最新版本的 DAPLink 驱动程序。 #### 2. **设置 Visual Studio 的环境变量** 为了使 `stdio` 功能正常工作,需要调整项目的编译选项以及链接库文件。具体操作如下: - 打开项目属性对话框 (`Alt+F7`)。 - 导航至 `Configuration Properties -> C/C++ -> Preprocessor` 并定义宏 `_CRT_SECURE_NO_WARNINGS=1` 和 `DEBUG_CONSOLE_ENABLED=1`。 - 进一步进入 `Linker -> Input` 页面,添加支持串口重定向功能的相关静态库路径,例如 `-larm_cortexM_swo_redirect`. #### 3. **启用 SWO 或 ITM 输出通道** 对于基于 ARM Cortex-M 架构的目标板卡来说,默认的标准 I/O 流会被映射到 Serial Wire Viewer (SWO) 接口中去实现打印消息的功能。因此还需要额外开启 ITM (Instrumentation Trace Macrocell) 支持: ```c #include <stm32f4xx_it.h> /* 替换为实际使用的芯片头文件 */ void ITM_SendChar(char ch){ while (!(ITM->TER & 0x1)); // Wait until ready to send character. ITM->PORT[0].u8 = ch; // Send the character via Port 0 of ITM. } int fputc(int ch, FILE *f){ ITM_SendChar((unsigned char)ch); return(ch); } ``` 上述代码片段展示了如何自定义函数来替代默认的 `printf()` 实现方式。这样可以保证所有的控制台输出都能被转发给主机端的应用软件捕获显示出来。 #### 4. **验证工具链兼容性** 最后一点需要注意的是所选用的交叉编译器是否完全匹配当前平台的需求。推荐采用 GNU Arm Embedded Toolchain 来构建整个工程结构因为其开源免费而且广泛应用于各类教学资料当中便于后续维护扩展。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值