版本协议

BSD

标签
标准版
#第三届立创大赛#STM32/STM8离线下载器

创建时间:4年前

描述

<p style="line-height: 2;"><span style="font-size: 18px;">1. 参赛者姓名:</span><span style="font-size: 18px;">程人杰、王徽</span></p> <p style="line-height: 2;"><span style="font-size: 18px;">2. </span><span style="font-size: 18px;">参赛作品的名字:</span><span style="font-size: 18px;">STM32/STM8离线下载器</span></p> <p style="line-height: 2;"><span style="font-size: 18px;">3. 简要陈述您的idea和作品:</span></p> <p style="line-height: 2;"><span style="font-size: 18px;">    当前嵌入式开发中,STM32与STM8是大多数工程师使用的主控芯片,传统的方法是通过电脑和仿真器进行程序的下载,生产上也就必须要配置有电脑,但是对于一些量产型生产,通过电脑显然合适,增加工作量, 同而且需要一定的专业知识,时把生产文件交给生产人员,非常有可能产生泄密,产生巨大的损失。而离线下载器具有体积小,价格便宜,而且可以在程序中设置生产次数,配置加密,可以有效的保护好生产资料,同时离线下载器操作方便,只要工程师在电脑上配置好后,就可以放心的交给生产人员。</span></p> <p style="line-height: 2;"><span style="font-size: 18px;">4. 拟用到的立创商城在售物料:</span><span style="font-size: 18px;">STM32,STM8,W25Q64,缓冲器,电源,电阻电容。</span></p> <p style="line-height: 2;"><span style="font-size: 18px;">5. 拟用到的非立创商城物料或其它补充:</span><span style="font-size: 18px;">TFT,外壳</span></p> <p style="line-height: 2;"><span style="font-size: 18px;">6. 拟用到的EDA工具软件名称:</span><span style="font-size: 18px;">Keil,VS2017,立创EDA设计工具</span></p> <p style="line-height: 2;"><span style="font-size: 18px;">7. 原文链接:<a href="http://club.szlcsc.com/article/details_12812_1.html" target="_blank">http://club.szlcsc.com/article/details_12812_1.html</a></span></p> <p style="line-height: 2;"><span style="font-size: 18px;">8. 原工程链接:<a href="/lengyu1226/wang1111" target="_blank">https://oshwhub.com/lengyu1226/wang1111</a></span></p> <p style="line-height: 2;"> </p> <h3 style="line-height: 2;">一、作品简介</h3> <div style="line-height: 2;"><span style="font-size: 18px;">1.作品的整机外观图片或焊接组装好的PCBA图片;</span></div> <div style="line-height: 2;"><img src="//image.lceda.cn/pullimage/otrJMeR95Igpclc9tpo3VyamKjTyGpF2ZVTVNDpM.jpeg" alt="" width="830" height="623"></div> <div style="line-height: 2;"><img src="//image.lceda.cn/pullimage/QbqDUO8HHJIAoW8XJkBh9vjHzwr4HfGbNQLdWGed.jpeg" alt="" width="830" height="623"></div> <div style="line-height: 2;"><img src="//image.lceda.cn/pullimage/FyAQj5zrLzo0io6AQopJQbNt8TcMrbbr5nrtH33c.jpeg" alt="" width="830" height="623"></div> <div style="line-height: 2;"><img src="//image.lceda.cn/pullimage/X8iB2LHAsk2c9y0a3GroR421BSrHWjHv0whPrnq8.jpeg" alt="" width="830" height="623"></div> <div style="line-height: 2;"><img src="//image.lceda.cn/pullimage/6ccdDhj5RpHF71QSSavuKpw8MvST9xjCEo8gbaS7.jpeg" alt="" width="829" height="622"></div> <h3 style="line-height: 2;">二、系统构架图</h3> <div style="line-height: 2;"><img src="//image.lceda.cn/pullimage/xQFE4UqGatogVQEVpp3j8ZcijD11wVl2jNtzmA1W.png" alt="" width="1482" height="415"></div> <div style="line-height: 2;"><img src="//image.lceda.cn/pullimage/b2LiDKtoIEvlX4MXb9SbSd9TvIudac9vuGQIX54w.png" alt="" width="1480" height="495"></div> <h3 style="line-height: 2;">三、硬件部分的描述</h3> <div style="line-height: 2;"><strong><span style="font-size: 18px;">1.原理图:</span></strong></div> <div style="line-height: 2;"><img src="//image.lceda.cn/pullimage/RSwW8wxwloWpaP7YBf5Q1Og0GNe0mAOh7BfoBprv.png" alt=""></div> <div style="line-height: 2;"><img src="//image.lceda.cn/pullimage/oMxmxusnrBGo1wy2vOlIPNnyJ9XqbUB8sa2YmSmE.png" alt="" width="1219" height="841"></div> <div style="line-height: 2;"><span style="font-size: 18px;"><strong>2. 实现原理、系统的工作过程:</strong></span></div> <div style="line-height: 2;"><span style="font-size: 18px;">    本离线下载器,主要是基于SWD(Serial Wire Debug)串行调试接口,用于连接ARM内核的芯片,同时基于SWIM( single wire interface module )单线调试模块。</span></div> <div style="line-height: 2;"><span style="font-size: 18px;">    一):SWD接口,当前基于Cortex-M内核的STM32系列应用非常广泛,其中有集成了SWD调试接口,利用该调试接口可以访问芯片内部的总线上寄存器和芯片内核,当然也可以利用此方法方法进行更新Flash程序。其中SWD主要应用框架如下:通过SWD接口用于访问其中的DP端口,再通过DP端口访问其AP端口,通过AP端口再进行系统总线的访问,从而达到程序下载的目的。</span></div> <div style="line-height: 2;"><span style="font-size: 18px;"><img style="display: block; margin-left: auto; margin-right: auto;" src="//image.lceda.cn/pullimage/HrZFotsf0J6VPVZJUfHZECJp0iXHKSgkYRrOG6cy.png" alt="" width="730" height="266"><br></span></div> <div style="line-height: 2;"><span style="font-size: 18px;"><img src="//" alt=""></span></div> <div style="line-height: 2; text-align: center;"><span style="font-size: 18px;">图1 - SWD接口</span></div> <p><img src="//image.lceda.cn/pullimage/jfBTwda4MoGJlz4HiIQ8tD43KuIDimtCkW1Pgoho.png" alt="" width="888" height="657"></p> <div style="line-height: 2;"><span style="font-size: 18px;"><img src="//" alt=""></span></div> <div style="line-height: 2; text-align: center;"><span style="font-size: 18px;">图2:STM32调试单元</span></div> <div style="line-height: 2; text-align: center;"> </div> <div style="line-height: 2;"><span style="font-size: 18px;">    SWD具体操作请求:SWD命令的开始是由8位启动,含义如图3,起始位+AP/DP选择位+读/写位 + 两位地址位 + 奇偶检验位 + 停止位 + 固定为1的校验位</span></div> <div style="line-height: 2;"><img style="display: block; margin-left: auto; margin-right: auto;" src="//image.lceda.cn/pullimage/fPUbzddPJnk7EubUAS3rOchugeaUyzEP7byProM3.png" alt="" width="557" height="207"></div> <div style="line-height: 2;"><span style="font-size: 18px;"><img src="//" alt=""></span></div> <div style="line-height: 2; text-align: center;"><span style="font-size: 18px;">图3:SWD起始命令</span></div> <div style="line-height: 2;"><span style="font-size: 18px;"> <img style="display: block; margin-left: auto; margin-right: auto;" src="//image.lceda.cn/pullimage/xe1zmi1OJY3NbsIu83NkBIvvlSv7AneKIEuTyJB6.png" alt="" width="832" height="189"><br></span></div> <div style="line-height: 2; text-align: center;"><span style="font-size: 18px;">图4:读写序列</span></div> <div style="line-height: 2;"><img style="display: block; margin-left: auto; margin-right: auto;" src="//image.lceda.cn/pullimage/6wumYQIGBEuYjO7qYKek1N2EBQ0AA7PMgcasx51u.png" alt="" width="1011" height="209"></div> <div style="line-height: 2; text-align: center;"><span style="font-size: 18px;">图5,读写序列</span></div> <div style="line-height: 2;"><span style="font-size: 18px;">    二):SWIM接口,SWIM是专用于STM8系列的调试接口,仅仅用到一根线就可以完成调试与仿真,这也是由于STM8定位主要是小的单片机,和高性价比。其SWIM接口主要框图如下:</span></div> <div style="line-height: 2;"><span style="font-size: 18px;"> <img style="display: block; margin-left: auto; margin-right: auto;" src="//image.lceda.cn/pullimage/aK5zvyYdbcW3LnvTqffYpBi1sYO0t4RsLa9XEKzO.png" alt="" width="819" height="531"><br><br></span></div> <div style="line-height: 2; text-align: center;"><span style="font-size: 18px;">图6:SWIM调试接口框图</span></div> <div style="line-height: 2;"><span style="font-size: 18px;">    由于SWIM为单线模式,所以其对时间要求非常高,其时序图如下:为此在代码中特意使用了定时器才能满足这样的操作。</span></div> <div style="line-height: 2;"><span style="font-size: 18px;"> <img style="display: block; margin-left: auto; margin-right: auto;" src="//image.lceda.cn/pullimage/ND11FnTroCkSRESPoaMIFQAx7BnQ0r22DLo8TdLG.png" alt="" width="815" height="286"><br><img src="//" alt=""></span></div> <div style="line-height: 2; text-align: center;"><span style="font-size: 18px;">图7:SWIM时序图</span></div> <div style="line-height: 2; text-align: center;"> </div> <div style="line-height: 2;"><span style="font-size: 18px;">3.注明所用到的EDA工具软件名称并附上设计链接。</span></div> <div style="line-height: 2;"><span style="font-size: 18px;">    本次EDA工具使用的是:立创EDA,开源的链接如下:</span><a href="/lengyu1226/wang1111" target="_blank"><span style="font-size: 18px;"> https://oshwhub.com/lengyu1226/wang1111</span></a></div> <h3 style="line-height: 2;">四、材料清单(BOM列表)</h3> <div style="line-height: 2;"><img src="//image.lceda.cn/pullimage/WrEUxIsNhRGJq9VXxPoV6nfwkgYMCOSjsFRFZ8WN.png" alt="" width="937" height="609"></div> <h3 style="line-height: 2;">五、软件部分的描述</h3> <div style="line-height: 2;"><img src="//image.lceda.cn/pullimage/IDzWudajsGdLxCgDBxOAsKQt8GNgPY3YEk0lnJtn.png" alt="" width="951" height="684"></div> <div style="line-height: 2;"><strong>上位机软件截图:</strong></div> <div style="line-height: 2;"> <table style="border-collapse: collapse; width: 97.3266%;"> <tr> <td style="width: 48.7742%;"><img src="//image.lceda.cn/pullimage/T841iqJoydUKJ536MRa5ZdcUW8qf7xkwv6tLmwhS.png" alt="" width="790" height="539"></td> <td style="width: 48.7742%;"><img src="//image.lceda.cn/pullimage/2peAY1kBfcFpQ5Euok23N4wH17n6FBPnpCMS0nZ0.png" alt="" width="790" height="539"></td> </tr> </table>     一):由于代码量巨大,贴出部分核心代码,下面为SWD控制的核心代码</div> <div style="line-height: 2;"> <table style="border-collapse: collapse; width: 97.3266%;"> <tr> <td style="width: 98.7313%;"> <p>/**</p> <p>* @B 可以理解为TurnAround</p> <p>*</p> <p>*/</p> <p>void SWDIO_CYCLE( void )</p> <p>{</p> <p>    if( slowModeEnable == ENABLE)</p> <p>    {</p> <p>        SWD_Delay();</p> <p>        SWD_SWDIO_PIN_OUT = 0;</p> <p>        SWD_Delay();</p> <p>        SWD_SWDIO_PIN_OUT = 1;</p> <p>        SWD_Delay();</p> <p>    }</p> <p>    else</p> <p>    {</p> <p>        SWD_SWDIO_PIN_OUT = 0;</p> <p>        SWD_SWDIO_PIN_OUT = 1;</p> <p>    }</p> <p>}</p> <p>/**</p> <p>* @B 从AP或者DP寄存器里读出数据</p> <p>* reg:显然只有4个(暂定的取值范围0-3)。 data为什么用指针,因为这样才能改变传递值,也就是指针指向的值</p> <p>* 结尾后:SWCLK保持为1</p> <p>*/</p> <p>u32 readReg( u8 APnDPReg,u8 reg, u32 *data )</p> <p>{</p> <p>    u8 i = 0;</p> <p>    u8 cb = 0; //</p> <p>    u8 parity; // 校验值</p> <p>    u8 b = 0; // 用于读ACK的位</p> <p>    u8 ack = 0; // ACK的值</p> <p>    u8 ret = SWD_ERROR_OK;</p> <p> </p> <p>    *data = 0;</p> <p>   </p> <p>    int _APnDPReg = (int) APnDPReg;</p> <p>    int _read = (int) 1; // 读请求值为1</p> <p> </p> <p>    u8 A2 = reg & 0x01;</p> <p>    u8 A3 = ( reg>>1 ) & 0x01;</p> <p>   </p> <p>    parity = ( _APnDPReg + _read + A2 + A3 ) & 0x01;</p> <p> </p> <p>    SWD_SWDIO_MODE_OUT; // 设置为输出模式</p> <p>// SWD_SWDIO_DIR_CTR2 = BUFFER_IC_DIR_OUT; // 缓冲器设置为输出模式</p> <p> </p> <p>    { // 启动发送序列</p> <p>        // 发送序列的问题:发送后,可以看出,其中SWCLK保持为1:</p> <p>        WRITE_BIT( 1 );</p> <p>        WRITE_BIT( _APnDPReg );</p> <p>        WRITE_BIT( _read );</p> <p>        WRITE_BIT( A2 );</p> <p>        WRITE_BIT( A3 );</p> <p>        WRITE_BIT( parity );</p> <p>        WRITE_BIT( 0 );</p> <p>        WRITE_BIT( 1 ); // SWDIO = 1, SWCLK = 0, SWCLK = 1</p> <p>    }</p> <p>    { // TurnAround</p> <p>        {</p> <p>            SWD_SWDIO_MODE_IN; // 设置为输入模式 //</p> <p>            SWD_SWDIO_DIR_CTR2 = BUFFER_IC_DIR_IN; // 缓冲器设置为输入模式</p> <p>        }</p> <p>        SWCLK_CYCLE();</p> <p>    }</p> <p>    { // 读ACK</p> <p>        for( i=0;i> 8) & 0xFF, 8, 0))</p> <p>        {</p> <p>            return 3;</p> <p>        }</p> <p>        if (SWIM_HW_Out((addr_tmp >> 0) & 0xFF, 8, 0))</p> <p>        {</p> <p>            return 2;</p> <p>        }</p> <p>        for (i = 0; i < cur_len; i++)</p> <p>        {</p> <p>            if (SWIM_HW_In(&data[processed_len + i], 8))</p> <p>            {</p> <p>                return 1;</p> <p>            }</p> <p>        }</p> <p>        cur_addr += cur_len;</p> <p>        processed_len += cur_len;</p> <p>    }</p> <p>    return 0;</p> <p>}</p> </td> </tr> </table> </div> <pre> </pre> <h3 style="line-height: 2;">六、作品演示</h3> <div style="line-height: 2;"><span style="font-size: 18px;">一共录制了两个视频,第一个视频详细演示了离线下载器操作过程与说明时间较长,第二个相对简单的演示了整个操作流程。</span></div> <div style="line-height: 2;"><span style="font-size: 18px;">    1):  <a href="http://url.cn/5ZQU77A?sf=uri" target="_blank">http://url.cn/5ZQU77A?sf=uri</a></span></div> <div style="line-height: 2;"><span style="font-size: 18px;">    2):<a href="http://url.cn/5OXUQgP?sf=uri" target="_blank">http://url.cn/5OXUQgP?sf=uri</a></span></div> <h3 style="line-height: 2;"><strong>七、总结</strong></h3> <ol style="line-height: 2;"> <li style="line-height: 1.8;"><span style="font-size: 18px;">在进行开发的过程中使用了立创EDA一共设计了三款PCB,第一个因为外形不够,第二个测试过程中发现几处不合理,经过三次的更改最终成型。</span></li> <li style="line-height: 1.8;"><span style="font-size: 18px;">需要支持更多的芯片类型,当前下载器可以支持STM32与STM8系列,但是为了日后能够推广,需要支持更多的芯片,这样一个下载器在手上,可以进行多种类型的芯片的下载,而不用多套设备</span></li> <li style="line-height: 1.8;"><span style="font-size: 18px;">SWD/SWIM调试阶段比较难懂,尤其是对于协议部分,但是如何仔细阅读,深刻理解其中的含义,最后发现也比较简单,所以遇到开发的难题时候,要迎难而上。</span></li> </ol> <h3 style="line-height: 2;">八:相关资料下载:</h3> <div style="line-height: 2;"><span style="font-size: 18px;"><a href="http://club.szlcsc.com/article/downFile_23013404552BFB00.html" target="_blank">1:串口通信协议.zip</a> (下载次数:325)  </span></div> <div style="line-height: 2;"><span style="font-size: 18px;"><a href="http://club.szlcsc.com/article/downFile_107D4B169A639C70.html" target="_blank">2:ARM Debug Interface v5 Architecture Specification.zip</a> (下载次数:409)  </span></div> <div style="line-height: 2;"><span style="font-size: 18px;"><a href="http://club.szlcsc.com/article/downFile_C4BB85F751AA0B6E.html" target="_blank">3:CD00226555.zip</a> (下载次数:271)  </span></div> <div style="line-height: 2;"><span style="font-size: 18px;"><a href="http://club.szlcsc.com/article/downFile_BA501022903BC4C1.html" target="_blank">4:en.CD00173911.pdf.zip</a> (下载次数:255)  </span></div> <div style="line-height: 2;"><span style="font-size: 18px;"><a href="http://club.szlcsc.com/article/downFile_076D2C055DF86808.html" target="_blank">5:en.CD00191343.pdf.zip</a> (下载次数:251)</span></div> <div style="line-height: 2;"> </div> <h3 style="line-height: 2;"><strong><span style="font-size: 18px;">更多项目详情见链接:<a href="http://club.szlcsc.com/article/details_12812_1.html" target="_blank">http://club.szlcsc.com/article/details_12812_1.html</a></span></strong></h3> <h3 style="line-height: 2;"><strong><span style="font-size: 18px;">本项目归立创社区“SuperCRJ”所有</span></strong></h3> <div> <div style="line-height: 2;"> </div> </div>

文档

Sheet_1

Sheet_2

PCB1

PCB2

PCB0

PCB4

BOM

暂无

附件

暂无

评论(2)

  • 表情
    emoji
    小嘉工作篇
    小嘉日常篇
  • 图片
成功
工程所有者当前已关闭评论
RC007 回复
<p>您好 您这个代码开源吗、</p>
灰灰小虎 回复
<p>图片挂了?开源么</p>
goToTop
svg-battery svg-battery-wifi svg-books svg-more svg-paste svg-pencil svg-plant svg-ruler svg-share svg-user svg-logo-cn svg-double-arrow