news 2026/6/10 10:38:38

DAPLink工程中drag-and-drop programming (MSC)功能配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DAPLink工程中drag-and-drop programming (MSC)功能配置

DAPLink工程中drag-and-drop programming (MSC)功能配置



  • 📍相关篇《DAPLink源码固件编译与制作》
  • 🌿DAPLink开源项目地址:https://github.com/ARMmbed/DAPLink
  • DAPLink接口固件为开发者提供:

拖放编程(MSC)
虚拟串行端口(CDC)
基于CMSIS-DAP的调试(HID)

  • USB磁盘拖放编程

DAPLink调试探针在主机上也会显示为一个USB磁盘。二进制(.bin)和十六进制(.hex)格式的程序文件可以复制到该USB磁盘上,然后这些文件会被编程到目标系统的存储器中。这是通过将闪存编程算法嵌入到接口固件中来实现的。因此,为了使拖放编程能够正常工作,所使用的DAPLink固件版本必须是专门为目标MCU型号构建的,这一点非常重要。

  • daplink工程除了后缀_bl:Bootloader程序外,_MCUMODE_if代表所支持拖放编程(MSC)的MCU型号。

📗创建新的拖放编程(MSC)支持型号的MCU工程

  • 🌾参考https://zhuanlan.zhihu.com/p/483819564
  1. 修改根目录下projects.yaml文件内容,补充如下
stm32f103xb_stm32f401rc_if:-*module_if-*module_hic_stm32f103xb-records/board/stm32f401rc.yaml
  • ⚡这里注意,格式一定要对齐,否则执行生成工程脚本时,会报错:
  1. 在daplink项目的records/board文件夹下,增加新MCU型号信息配置文件
stm32f401rc.yaml

  1. 在daplink项目的source/board文件夹下,新建文件stm32f401rc.c,文件内容为
#include"target_family.h"#include"target_board.h"constboard_info_tg_board_info={.info_version=kBoardInfoVersion,.board_id="0720",.family_id=kStub_HWReset_FamilyID,.target_cfg=&target_device,.board_vendor="STMicroelectronics",.board_name="STM32F401RC",};

  1. \source\family\st目录下,创建对应MCU型号的文件夹:

  2. 从daplink项目的根目录下tools文件夹内,拷贝generate_flash_algo.py文件拷贝到上面新建的MCU型号文件夹内

  3. 再从Keil_v5\ARM\Flash内找到对应的下载算法文件也拷贝到上面新建的MCU型号文件夹内

  • 5 - 6步骤结果:
  1. 在新建的MCU型号文件夹内,打开命令提示符窗口或者bash终端都行,执行下面的命令(前提是已经安装了python):
python generate_flash_algo.py STM32F4xx_256.FLM

  1. 将所生成的文件target_blob.c修改名为flash_blob.c,并修改里面的内容。
  • 🌟✨🌟 脚本生成的flash 扇区大小和划分是有问题的,会导致使用MSC功能时出错,具体的修改,查看对应的MCU型号的参考手册Embedded flash memory interface章节。

    参考手册,对于相关型号MCU的扇区描述截图参考:

MCU型号STM32F401RC,flash是256KB为例,前4个扇区是16KB,第五个扇区是64KB,第六个扇区是128KB,总共加起来就是256KB,具体的填写如下:

staticconstsector_info_tsectors_info[]={{0x08000000,0x00004000},//16KB{0x08004000,0x00004000},//16KB{0x08008000,0x00004000},//16KB{0x0800c000,0x00004000},//16KB{0x08010000,0x00010000},//64KB{0x08020000,0x00020000},//128KB};
  1. 手动添加target.c文件,可以参考其它型号的,并补充flash和ram的容量结尾地址内容:
#include"target_config.h"// The file flash_blob.c must only be included in target.c#include"flash_blob.c"// target informationtarget_cfg_ttarget_device={.version=kTargetConfigVersion,.sectors_info=sectors_info,.sector_info_length=(sizeof(sectors_info))/(sizeof(sector_info_t)),.flash_regions[0].start=0x08000000,.flash_regions[0].end=0x08040000,.flash_regions[0].flags=kRegionIsDefault,.flash_regions[0].flash_algo=(program_target_t*)&flash,.ram_regions[0].start=0x20000000,.ram_regions[0].end=0x20010000,.target_vendor="STMicroelectronics",.target_part_number="STM32F401RCTx",};

不知道大小,可以参考Keil工程的Option for Target...标签页:

  1. 以上步骤工作完成之后,即可在daplink根目录下,生成对应的Keil工程了。
    在daplink项目的根目录,命令提示符窗口或bash窗口内执行以下命令,即可生成对应的工程:
progen generate-f projects.yaml-p stm32f103xb_stm32f401rc_if-t uvision

📙MSC编程方式(drag-and-drop programming)实现说明

✨ 将要烧录的.hex或者.bin文件,通过拖拽或者虚拟U盘烧录目标芯片,这个功能是自带的,使用时需要注意,默认是需要使用DAP-link的RESET复位引脚(默认PB0)连接到的目标MCU的NRST复位引脚上,如果没有连接,只能在拖拽或拷入虚拟盘符后,手动去复位目标芯片,才能完成下载烧录工作,另外一种方法是,在daplink源码工程中的复位函数中,使用ID_DAP_SWJ_Pins命令,复位目标MCU,从而实现SWD,在4线模式下,实现真正的MSC编程。

  • 📌函数位置:\source\hic_hal\stm32\stm32f103xb\DAP_config.h中:
externuint8_tswd_write_word(uint32_taddr,uint32_tval);//引入外部函数__STATIC_FORCEINLINEvoidPIN_nRESET_OUT(uint32_tbit){if(bit&1)nRESET_PIN_PORT->BSRR=nRESET_PIN;else{swd_write_word((uint32_t)&SCB->AIRCR,((0x5FA<<SCB_AIRCR_VECTKEY_Pos)|SCB_AIRCR_SYSRESETREQ_Msk));//补充这一句nRESET_PIN_PORT->BRR=nRESET_PIN;}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 10:47:16

【滤波跟踪】基于带线性等式约束(LEC)的固定滞后平滑问题研究ASCMKS ASEPKS ASPMKS ASMRKS ASDEKS ASLECKS多种滤波算法研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码获取及仿…

作者头像 李华
网站建设 2026/6/10 10:52:01

InoProShop汇川程序学习笔记(一、轴的快速调试)

本文仅适用于部分工程师进行参考&#xff0c;用于快速调试汇川AM500系列PLC快速调试 作者本人长期从事于工业机器人的调试&#xff0c;前置工艺专注于机器人弧焊、喷涂、搬运、点焊等简单工艺。 由于工作调动的原因&#xff0c;最近调动至电气岗位进行工作&#xff0c;以前虽…

作者头像 李华
网站建设 2026/6/10 10:50:06

基于Springboot箱包存储管理系统【附源码+文档】

&#x1f495;&#x1f495;作者&#xff1a; 米罗学长 &#x1f495;&#x1f495;个人简介&#xff1a;混迹java圈十余年&#xff0c;精通Java、小程序、数据库等。 &#x1f495;&#x1f495;各类成品Java毕设 。javaweb&#xff0c;ssm&#xff0c;springboot等项目&#…

作者头像 李华
网站建设 2026/6/10 10:50:50

LLM → 系统级智能体(System-level Agent)的演进

1. 起点&#xff1a;LLM 作为通用认知引擎 核心突破 通过大规模预训练获得&#xff1a;语言理解、生成、一定程度推理与泛化能力。对外表现&#xff1a;对话、写作、总结、编码、问答、推理。 关键缺陷&#xff08;为什么还不是“智能体”&#xff09; 被动&#xff1a;只能被问…

作者头像 李华
网站建设 2026/6/9 17:25:47

Function Calling的现状和未来的发展

一、核心摘要Function Calling&#xff08;函数调用&#xff09;作为2023年大型语言模型&#xff08;LLM&#xff09;突破性技术&#xff0c;标志着AI从单纯的文本生成向具备实际行动能力的智能体系统的关键转变。本报告基于2024-2025年最新技术发展&#xff0c;系统分析Functi…

作者头像 李华