<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="referrer" content="origin-when-cross-origin" /> <meta name="description" content="前言 daplink是个好东西,又便宜又好用,还不担心盗版,但是没有stlink和jlink那样的上位机可以直接下载固件,这就很头疼了。怎么办? 还好通过jtag/sw协议下载固件有很多开源的项目 项目介绍 openOCD 大名鼎鼎的openOCD(上手难度太高了,pass) python写的pyO" /> <meta property="og:description" content="前言 daplink是个好东西,又便宜又好用,还不担心盗版,但是没有stlink和jlink那样的上位机可以直接下载固件,这就很头疼了。怎么办? 还好通过jtag/sw协议下载固件有很多开源的项目 项目介绍 openOCD 大名鼎鼎的openOCD(上手难度太高了,pass) python写的pyO" /> <meta http-equiv="Cache-Control" content="no-transform" /> <meta http-equiv="Cache-Control" content="no-siteapp" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>使用daplink下载任意格式固件 - USTHzhanglu - 博客园</title> <link rel="canonical" href="https://www.cnblogs.com/USTHzhanglu/p/17960327" /> <link id="favicon" rel="shortcut icon" href="https://assets.cnblogs.com/favicon_v3_preview.ico?v=3" /> <link rel="stylesheet" href="/css/blog-common.min.css?v=g-c5Yfdgh3oAoyQibjhmJ6ylVcBcMRHNIG6JkF70hpY" /> <link id="highlighter-theme-prism-vs" type="text/css" rel="stylesheet" href="/css/prismjs/prism-vs.css?v=iw94Vx6XGFo5fy49uNJMV-ufDfBnPBmg30wF42RVSCk" /> <link type="text/css" rel="stylesheet" href="https://www.cnblogs.com/USTHzhanglu/custom.css?v=Y6fPrcDhXQiemHt2WNuAlI3O7Mk=" /> <link id="mobile-style" media="only screen and (max-width: 767px)" type="text/css" rel="stylesheet" href="/skins/SimpleMemory/bundle-simplememory-mobile-pure.min.css?v=F2e9dMGzAUzDRZU-W-4qVsoLMeDjGqD2cUFxFY5EcWc" /> <link type="application/rss+xml" rel="alternate" href="https://www.cnblogs.com/USTHzhanglu/rss" /> <link type="application/rsd+xml" rel="EditURI" href="https://www.cnblogs.com/USTHzhanglu/rsd.xml" /> <link type="application/wlwmanifest+xml" rel="wlwmanifest" href="https://www.cnblogs.com/USTHzhanglu/wlwmanifest.xml" /> <script> var currentBlogId = 684784; var currentBlogApp = 'USTHzhanglu'; var isLogined = true; var isBlogOwner = false; var skinName = 'SimpleMemory'; var visitorUserId = '8003c9f5-c155-4cd6-c10f-08d94e762654'; var hasCustomScript = true; window.cb_enable_mathjax = true; window.mathEngine = 0; window.codeHighlightEngine = 2; window.enableCodeLineNumber = false; window.codeHighlightTheme = 'prism-vs'; window.darkModeCodeHighlightTheme = 'prism-vsc-dark-plus'; window.isDarkCodeHighlightTheme = false; window.isDarkModeCodeHighlightThemeDark = true; window.isDisableCodeHighlighter = false; window.enableCodeThemeTypeFollowSystem = false; window.enableMacStyleCodeBlock = false; </script> <script> window.currentPostId = 17960327; window.currentPostDateAdded = '2024-01-12 17:46'; </script> <script src="https://assets.cnblogs.com/scripts/jquery-3.3.1.min.js"></script> <script src="https://cdn-www.cnblogs.com/js/blog-common.min.js?v=E8kiz0yWOWB4k5jcScxZT6kREQmnElTu0TN8_HETKio"></script> <script>updateCustomBlogReferrer();</script> </head> <body class="skin-simplememory no-navbar mathjax2"> <a name="top"></a> <div id="top_nav" class="navbar forpc navbar-custom"> <nav id="nav_main" class="navbar-main"> <ul id="nav_left" class="navbar-list navbar-left"> <li class="navbar-branding"> <a href="https://www.cnblogs.com/" title="开发者的网上家园" role="banner"> <img src="//assets.cnblogs.com/logo.svg" alt="博客园Logo" /> </a> </li> <li><a href="https://cnblogs.vip/">会员</a></li> <li><a href="https://www.cnblogs.com/cmt/p/17974346">周边</a></li> <li> <a href="https://news.cnblogs.com/" onclick="countClicks('nav', 'skin-navbar-news')">新闻</a> </li> <li> <a href="https://q.cnblogs.com/" onclick="countClicks('nav', 'skin-navbar-q')">博问</a> </li> <li> <a href="https://ai.hanghang.com/page/4649915" target="_blank">AI培训</a> </li> <li><a href="https://market.cnblogs.com" target="_blank">云市场</a></li> </ul> <ul id="nav_right" class="navbar-list navbar-right"> <li> <form id="zzk_search" class="navbar-search dropdown" action="https://zzk.cnblogs.com/s" method="get" role="search"> <input name="w" id="zzk_search_input" placeholder="代码改变世界" type="search" tabindex="3" autocomplete="off" /> <button id="zzk_search_button" onclick="window.navbarSearchManager.triggerActiveOption()"> <img id="search_icon" class="focus-hidden" src="//assets.cnblogs.com/icons/search.svg" alt="搜索" /> <img class="hidden focus-visible" src="//assets.cnblogs.com/icons/enter.svg" alt="搜索" /> </button> <ul id="navbar_search_options" class="dropdown-menu quick-search-menu"> <li tabindex="0" class="active" onclick="zzkSearch(event, document.getElementById('zzk_search_input').value)"> <div class="keyword-wrapper"> <img src="//assets.cnblogs.com/icons/search.svg" alt="搜索" /> <div class="keyword"></div> </div> <span class="search-area">所有博客</span> </li> <li tabindex="1" onclick="zzkBlogSearch(event, 'USTHzhanglu', document.getElementById('zzk_search_input').value)"> <div class="keyword-wrapper"> <img src="//assets.cnblogs.com/icons/search.svg" alt="搜索" /> <div class="keyword"></div> </div> <span class="search-area">当前博客</span> </li> <li tabindex="2" onclick="zzkBlogSearch(event, 'Motor-Control', document.getElementById('zzk_search_input').value)"> <div class="keyword-wrapper"> <img src="//assets.cnblogs.com/icons/search.svg" alt="搜索" /> <div class="keyword"></div> </div> <span class="search-area">我的博客</span> </li> </ul> </form> </li> <li id="navbar_login_status" class="navbar-list"> <a class="navbar-user-info navbar-blog" href="https://i.cnblogs.com/EditPosts.aspx?opt=1" alt="写随笔" title="写随笔"> <img id="new_post_icon" class="navbar-icon" src="//assets.cnblogs.com/icons/newpost.svg" alt="写随笔" /> </a> <a id="navblog-myblog-icon" class="navbar-user-info navbar-blog" href="https://passport.cnblogs.com/GetBlogApplyStatus.aspx" alt="我的博客" title="我的博客"> <img id="myblog_icon" class="navbar-icon" src="//assets.cnblogs.com/icons/myblog.svg" alt="我的博客" /> </a> <a class="navbar-user-info navbar-message navbar-icon-wrapper" href="https://msg.cnblogs.com/" alt="短消息" title="短消息"> <img id="msg_icon" class="navbar-icon" src="//assets.cnblogs.com/icons/message.svg" alt="短消息" /> <span id="msg_count" style="display: none"></span> </a> <a id="navbar_lite_mode_indicator" data-current-page="blog" style="display: none" href="javascript:void(0)" alt="简洁模式" title="简洁模式启用,您在访问他人博客时会使用简洁款皮肤展示"> <img class="navbar-icon" src="//assets.cnblogs.com/icons/lite-mode-on.svg" alt="简洁模式" /> </a> <div id="user_info" class="navbar-user-info dropdown"> <a class="dropdown-button" href="https://home.cnblogs.com/"> <img id="user_icon" class="navbar-avatar" src="//assets.cnblogs.com/icons/avatar-default.svg" alt="用户头像" /> </a> <div class="dropdown-menu"> <a id="navblog-myblog-text" href="https://passport.cnblogs.com/GetBlogApplyStatus.aspx">我的博客</a> <a href="https://home.cnblogs.com/">我的园子</a> <a href="https://account.cnblogs.com/settings/account">账号设置</a> <a href="javascript:void(0)" id="navbar_lite_mode_toggle" title="简洁模式会使用简洁款皮肤显示所有博客"> 简洁模式 <img id="navbar_lite_mode_on" src="/images/lite-mode-check.svg" class="hide" /><span id="navbar_lite_mode_spinner" class="hide">...</span> </a> <a href="javascript:void(0)" onclick="account.logout();">退出登录</a> </div> </div> <a class="navbar-anonymous" href="https://account.cnblogs.com/signup">注册</a> <a class="navbar-anonymous" href="javascript:void(0);" onclick="account.login()">登录</a> </li> </ul> </nav> </div> <div id="page_begin_html"> <!-- <embed class="aplayer" style="margin-right: 10%;" frameborder="no" border="0" marginwidth="0" marginheight="0" width=300 height=240 src="//music.163.com/outchain/player?type=1&id=48418&auto=1&height=430"> --> </div> <!--done--> <div id="home"> <div id="header"> <div id="blogTitle"> <a id="lnkBlogLogo" href="https://www.cnblogs.com/USTHzhanglu/"><img id="blogLogo" src="/skins/custom/images/logo.gif" alt="返回主页" /></a> <!--done--> <h1><a id="Header1_HeaderTitle" class="headermaintitle HeaderMainTitle" href="https://www.cnblogs.com/USTHzhanglu">USTHzhanglu</a> </h1> <h2></h2> </div><!--end: blogTitle 博客的标题和副标题 --> <div id="navigator"> <ul id="navList"> <li><a id="blog_nav_sitehome" class="menu" href="https://www.cnblogs.com/"> 博客园</a> </li> <li> <a id="blog_nav_myhome" class="menu" href="https://www.cnblogs.com/USTHzhanglu/"> 首页</a> </li> <li> <a id="blog_nav_newpost" class="menu" href="https://i.cnblogs.com/EditPosts.aspx?opt=1"> 新随笔</a> </li> <li> <a id="blog_nav_contact" class="menu" href="https://msg.cnblogs.com/send/USTHzhanglu"> 联系</a></li> <li> <!--<partial name="./Shared/_XmlLink.cshtml" model="Model" /></li>--></li> <li> <a id="blog_nav_admin" class="menu" href="https://i.cnblogs.com/"> 管理</a> </li> </ul> <div class="blogStats"> <div id="blog_stats_place_holder"><script>loadBlogStats();</script></div> </div><!--end: blogStats --> </div><!--end: navigator 博客导航栏 --> </div><!--end: header 头部 --> <div id="main"> <div id="mainContent"> <div class="forFlow"> <div id="post_detail"> <!--done--> <div id="topics"> <div class="post"> <h1 class = "postTitle"> <a id="cb_post_title_url" class="postTitle2 vertical-middle" href="https://www.cnblogs.com/USTHzhanglu/p/17960327"> <span role="heading" aria-level="2">使用daplink下载任意格式固件</span> </a> </h1> <div class="clear"></div> <div class="postBody"> <div id="cnblogs_post_description" style="display: none"> 使用daplink直接下载固件,无需keil </div> <div id="cnblogs_post_body" class="blogpost-body cnblogs-markdown"> <h1 id="前言">前言</h1> <p>daplink是个好东西,又便宜又好用,还不担心盗版,但是没有stlink和jlink那样的上位机可以直接下载固件,这就很头疼了。怎么办?<br> 还好通过jtag/sw协议下载固件有很多开源的项目</p> <h2 id="项目介绍">项目介绍</h2> <h3 id="openocd">openOCD</h3> <p>大名鼎鼎的openOCD(上手难度太高了,pass)</p> <h3 id="python写的pyocd">python写的<a href="https://github.com/pyocd/pyOCD" target="_blank" rel="noopener">pyOCD</a></h3> <blockquote> <p>Open source Python library for programming and debugging Arm Cortex-M microcontrollers</p> </blockquote> <p>人生苦短,我用python</p> <h3 id="rust写的probe-rs">rust写的<a href="https://github.com/probe-rs/probe-rs" target="_blank" rel="noopener">probe-rs</a></h3> <blockquote> <p>A debugging toolset and library for debugging embedded ARM and RISC-V targets on a separate host</p> </blockquote> <p>考虑下用rust重构项目吗?</p> <p>pyOCD和probe-rs都可以使用命令行下载,前者有pack包就可以,后者需要用软件将pack包转换成yaml使用。</p> <p>命令行指令官方有提供,但是用起来还是不够方便,打包成GUI会好很多。</p> <h2 id="获取gui">获取GUI</h2> <p>好人当然要做到底,这里奉上对应的GUI项目:</p> <ol> <li> <p><a href="https://github.com/USTHzhanglu/dap_download" target="_blank" rel="noopener">dap-download</a></p> <blockquote> <p>一个简单的GUI,为DAP-LINK提供烧录工具,基于tkinter,pygubu和pyocd。</p> </blockquote> <p>早期写的GUI,由于pyocd有bug,只能给daplink用</p> </li> <li> <p><a href="https://github.com/USTHzhanglu/probe-rs-gui" target="_blank" rel="noopener">probe-rs-gui</a></p> <blockquote> <p>a easy gui for probe-rs, use daplink/stlink/jlink download bin/elf/hex file</p> </blockquote> <p>好处是下载快,支持大部分link</p> </li> </ol> <h2 id="上手使用">上手使用</h2> <p>两个GUI操作方式相同(毕竟长得也完全一样),只是使用的配置文件不同。</p> <h3 id="dap_download">dap_download</h3> <p>使用该上位机,需要以下几个文件:</p> <ol> <li>pack包</li> <li>固件,可以是bin/elf/hex</li> <li>配置文件</li> </ol> <p>配置文件介绍:</p> <pre><code class="language-yaml">target_override: GD32F310G8 #目标芯片型号 pack: #烧录算法所在位置,可以存放多个 ./GD32F3x0_DFP.3.0.2.pack frequency: 10000000 #烧录速率 </code></pre> <p>yaml文件主要告诉pyocd要烧录的chip型号和对应的pack包在哪,通常把pack包和yaml放在一起即可。</p> <p>然后在上位机页面,<code>选择bin文件</code>一项,选择要烧录的固件;</p> <p><code>选择配置文件所在文件夹</code>一项,选择yaml文件所在的文件,点击<code>开始下载</code>即可。</p> <h3 id="probe-rs-gui">probe-rs-GUI</h3> <p>使用该上位机,需要以下几个文件:</p> <ol> <li>pack包</li> <li>固件,可以是bin/elf/hex</li> <li>配置文件</li> </ol> <p>配置文件介绍:</p> <pre><code class="language-yaml">chip: HC32F4A0PGTB pack_yaml: ./HC32F4A0-Series.yaml speed: '16000' base_address: '0x00000000' #just for bin file, default is 0x08000000. negligible </code></pre> <p>和dap_download不一样的是,probe-rs需要手动将pack包转成yaml文件,好在官方提供了转换方法 <a href="https://github.com/USTHzhanglu/probe-rs-gui/tree/main/example#yaml" target="_blank" rel="noopener">how to use</a></p> <p>还有烧录Bin文件时,需要手动指定起始地址</p> <p>然后在上位机页面,<code>Select Bin</code>一项,选择要烧录的固件;</p> <p><code>Select Config</code>一项,选择yaml文件(注意不是pack包转换的yaml文件),点击<code>Download</code>即可。</p> </div> <div class="clear"></div> <div id="blog_post_info_block" role="contentinfo"> <div id="blog_post_info"></div> <div class="clear"></div> <div id="post_next_prev"></div> </div> </div> <div class="postDesc">posted @ <span id="post-date" data-last-update-days="67.1477056339155" data-date-created="BlogServer.Application.Dto.BlogPost.BlogPostDto" data-date-updated="2024-01-12 17:46">2024-01-12 17:46</span> <a href="https://www.cnblogs.com/USTHzhanglu">USTHzhanglu</a> 阅读(<span id="post_view_count">86</span>) 评论(<span id="post_comment_count">0</span>) <a href="https://i.cnblogs.com/EditPosts.aspx?postid=17960327" rel="nofollow">编辑</a> <a href="javascript:void(0)" onclick="AddToWz(17960327);return false;">收藏</a> <a href="javascript:void(0)" onclick="reportManager.report({ currentUserId: '8003c9f5-c155-4cd6-c10f-08d94e762654', targetType: 'blogPost', targetId: '17960327', targetLink: 'https://www.cnblogs.com/USTHzhanglu/p/17960327', title: '使用daplink下载任意格式固件' })">举报</a> </div> </div> </div><!--end: topics 文章、评论容器--> </div> <script> var cb_entryId = 17960327, cb_entryCreatedDate = '2024-01-12 17:46', cb_postType = 1, cb_postTitle = '使用daplink下载任意格式固件'; var allowComments = true, cb_blogId = 684784, cb_blogApp = 'USTHzhanglu', cb_blogUserGuid = 'a6f83abb-ac6f-4c63-8051-08d91391c1ab'; mermaidRender.render() markdown_highlight() zoomManager.apply("#cnblogs_post_body img:not(.code_img_closed):not(.code_img_opened)"); </script> <a id="!comments"></a> <div id="blog-comments-placeholder"></div> <div id="comment_form" class="commentform"> <a name="commentform"></a> <div id="divCommentShow"></div> <div id="comment_nav"> <div class="comment-nav-right"> <span id="span_refresh_tips"></span><a href="javascript:void(0);" onclick="return RefreshCommentList();" id="lnk_RefreshComments" runat="server" clientidmode="Static">刷新评论</a><a href="#" onclick="return RefreshPage();">刷新页面</a><a href="#top">返回顶部</a> </div> </div> <div id="comment_form_container"></div> <div class="ad_text_commentbox" id="ad_text_under_commentbox"></div> <div id="cnblogs_ch"></div> <div id="opt_under_post"></div> <div id="cnblogs_c1" class="under-post-card"> <a href="https://click.aliyun.com/m/1000390858/" rel="nofollow" target="_blank" onclick="countCreativeClicks('C1-阿里云-年度大降价')"> <img src="/i/l/?n=24&i=blog/35695/202402/35695-20240229194456450-851239093.jpg" onl oad="countCreativeImpressions('C1-阿里云-年度大降价')" alt="" /> <span id="c1_impression" style="display:none"></span> </a> </div> <div id="under_post_card1"></div> <div id="under_post_card2"></div> <div id="HistoryToday" class="under-post-card"></div> <script type="text/javascript"> var commentManager = new blogCommentManager(); commentManager.renderComments(0); fixPostBody(); window.footnoteTipManager.generateFootnoteTips(); window.tocManager.displayDisableTocTips = false; window.tocManager.generateToc(); setTimeout(function() { countViews(cb_blogId, cb_entryId); }, 50); deliverT2(); deliverC1C2(); loadNewsAndKb(); LoadPostCategoriesTags(cb_blogId, cb_entryId); LoadPostInfoBlock(cb_blogId, cb_entryId, cb_blogApp, cb_blogUserGuid); GetPrevNextPost(cb_entryId, cb_blogId, cb_entryCreatedDate, cb_postType); loadOptUnderPost(); GetHistoryToday(cb_blogId, cb_blogApp, cb_entryCreatedDate); </script> </div> </div><!--end: forFlow --> </div><!--end: mainContent 主体内容容器--> <div id="sideBar"> <div id="sideBarMain"> <div id="sidebar_news" class="newsItem"> <h3 class="catListTitle">公告</h3> <div id="blog-news"> <div id="sidebar_news_content"> </div> </div> <script>loadBlogNews();</script> </div> <div id="sidebar_c3"></div> <div id="blog-calendar" style="display:none"></div><script>loadBlogDefaultCalendar();</script> <div id="leftcontentcontainer"> <div id="blog-sidecolumn"></div> <script>loadBlogSideColumn();</script> </div> </div><!--end: sideBarMain --> </div><!--end: sideBar 侧边栏容器 --> <div class="clear"></div> </div><!--end: main --> <div class="clear"></div> <div id="footer"> <!--done--> Copyright © 2024 USTHzhanglu <br /><span id="poweredby">Powered by .NET 8.0 on Kubernetes</span> </div><!--end: footer --> </div><!--end: home 自定义的最大容器 --> <div id="page_end_html"> <!-- require APlayer --> <link rel="stylesheet" href="https://cdn.cnblogs.com/npm/aplayer/dist/APlayer.min.css"> <script src="https://cdn.cnblogs.com/npm/aplayer/dist/APlayer.min.js"></script> <!-- require MetingJS --> <!-- <script src="https://unpkg.com/[email protected]/dist/Meting.min.js"></script> --> <script src="https://cdn.cnblogs.com/npm/[email protected]/dist/Meting.min.js"></script> <meting-js id="48418" lrc-type="1" server="netease" order="random" type="album" fixed="true" mini="true" autoplay="true" volume="0.3" list-olded="true"> </meting-js> <!--https://www.cnblogs.com/fby698/p/12663089.html --> </div> <input type="hidden" id="antiforgery_token" value="CfDJ8C838EyK0EpKpQQcC9VwxBlQngFv2jZJAClsfzHuMSKzFF9X9uBwvmFizlCNBLlLilihqK1MB9044JhQp3KRg5rDG-FoM1bm763X5o9GP8_kw4mgf7HeLXc04TI7pxL0ScfoIYkNjP43UaxFW65-pcLQaDfW8iSLnt7r5ERvQTeWJxao_LblWNpxrAik5HZHkQ" /> <script async src="https://www.googletagmanager.com/gtag/js?id=G-M95P3TTWJZ"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'G-M95P3TTWJZ'); </script> <script defer src="https://hm.baidu.com/hm.js?866c9be12d4a814454792b1fd0fed295"></script> </body> </html>
标签:cb,yaml,window,var,固件,分享,pack From: https://www.cnblogs.com/Motor-Control/p/18083983