首页 > 其他分享 >分享1

分享1

时间:2024-03-19 21:36:22浏览次数:15  
标签:cb yaml window var 固件 分享 pack

<!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>&nbsp;
<a href="https://www.cnblogs.com/USTHzhanglu">USTHzhanglu</a>&nbsp;
阅读(<span id="post_view_count">86</span>)&nbsp;
评论(<span id="post_comment_count">0</span>)&nbsp;
<a href="https://i.cnblogs.com/EditPosts.aspx?postid=17960327" rel="nofollow">编辑</a>&nbsp;
<a href="javascript:void(0)" onclick="AddToWz(17960327);return false;">收藏</a>&nbsp;
<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 &copy; 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

相关文章