STM32 10个工程篇:1.IAP远程升级(四)

这篇具有很好参考价值的文章主要介绍了STM32 10个工程篇:1.IAP远程升级(四)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

      在前三篇博客中主要介绍了IAP远程升级的应用背景、下位机的实现原理、以及基于STM32CubeMXSTM32F103串口DMA的基本配置,第四篇博客主要想介绍Labview端上位机和下位机端的报文定义和通信等。

       当笔者工作上刚接触到STM32 IAP升级的时候,实事求是地说存在各种各样的困惑,所以这也是驱动我去撰写博客的动力,有很多CSDN朋友看过“FPGA基础知识”和“FPGA 20个例程”专栏后私信说写得接地气,让读者很容易接收和理解。学习都是从不懂到懂,从不理解到慢慢理解,而这个过程没有人指点的时候会非常痛苦。

     当然上面都是题外话,下面就站在工程落地的角度去想想STM32 IAP升级在具体实施中的几个问题,其实这也是当初困扰笔者的问题,主要它们也有很多共性吧。

  1. IAP升级需不需要特殊上位机的支持,网络上说法不一有很多教程说用串口助手选择本地的bin文件发送即可;
  2. IAP升级中上位机需要做什么操作,直接把bin文件一次性地发送下去就可以吗;
  3. IAP升级中下位机需要做什么操作,把收到的bin文件按十六进制数计数重新写入扇区就可以吗;
  4. 在没有本地显示屏GUI界面的情况下,用户怎么通过上位机告知下位机是跳转到Bootloader还是跳转到ApplicationBootloaderApplication之间应该怎么切换;

      首先回答第一个问题,IAP升级需不需要重新设计一个上位机,有些串口助手确实支持打开bin文件并将其按照十六进制数据格式发送,如果仅仅满足教学实验来说,完全可以用串口助手直接发送,但是现实当中串口通信是不可靠传输,即可能存在干扰等导致传输数据错误,这种没有校验和重发机制的方法发送bin文件显然没有可靠性而言;

       其次回答第二个问题,如果上位机直接把bin文件一次性发送到下位机端,下位机则需要去一个个字节接收再去计数数据,然后按照1024字节去写入一个个flash扇区,如果在传输过程中下位机计数错误了,导致flash数据写错将无法处理,所以显然一次性把一整个bin文件串口直接发送下来不是非常稳妥;

      再次回答第三个问题,假设每次要更新的bin文件有大有小,这一次更新的没有上一次的大,而上一次存在flash扇区的数据没有擦除干净可能存在风险,所以更建议每次进行IAP升级前从Application初始化地址起擦除完全;

     最后回答第四个问题,BootloaderApplication可以理解成两段独立的程序,显然同一时刻STM32只能运行在其中一个状态,且上电的时候STM32先进入Bootloader状态,然后一般情况下通过读取外挂eeprom的值跳转到Application状态,也可以设定一个定时器在5秒钟内未收到上位机发送的指令,则自动由Bootloader状态跳转到Application状态,这样可以节约一颗eeprom的物料成本;

      具体实现原理即上位机通过每次给下位机STM32发送1024字节的bin文件报文(最后一包报文如果不足1024字节,有多少发多少即可),下位机STM32收到每包bin文件后写入指定的flash空间,再由上位机程控跳转到Application上。

上位机和下位机之间的通信报文格式:

    0x7e,0x7e,0x5a三个字节作为固定报头,第四个字节作为命令码,其中命令号包括0x00 0x01 0x02 0x03 0x04,即报文格式为:3字节固定报头0x7e,0x7e,0x5a + 1字节命令号0x00-0x04 + 2字节当前报文编号(命令号是0x01才包含) + 2字节总报文编号(命令号是0x01才包含) +1024字节bin文件内容(命令号是0x01才包含)+ 2字节Modbus CRC校验码,命令号的内容具体如下,详细数据发送细节在下面结合上位机界面做说明。

     0x00:检测bootloader是否存在

     0x01:打包发送applicationbin文件内容

     0x02:发送完所有applicationbin文件内容,通知下位机从bootloader模式跳转到application模式

     0x03:检测application是否存在

      0x04:通知下位机从application模式跳转到bootloader模式

STM32 10个工程篇:1.IAP远程升级(四)

图1 IAP升级助手

      如图1所示是笔者所设计的上位机界面,控件1处选择波特率,控件2处选择打开或者关闭串口。点击控件3处“boot检测”,上位机即发送“7e 7e 5a 00 42 b4”,如果下位机STM32发送“2b 52 49 47 48 54 2e 7a”(ASCII码:+RIGHT+CRC16),则代表上位机和下位机之间串口通信正确且下位机bootloader存在,可以操作界面其他控件;如果下位机STM32发送“2d 45 52 52 4f 52 cf 0d”(ASCII码:-ERROR+CRC16),则代表上位机和下位机之间串口通信错误且下位机bootloader不存在,不可以操作界面其他控件。

     上位机在通过点击控件“boot检测”确定下位机bootloader存在的情况下,控件7“打开文件”和控件8“发送”才可以被点击,点击“打开文件”,即在本地打开.bin格式的文件,界面显示框内需要显示.bin文件的大小,需要折合发送多少包报文(每包报文默认是1024字节),再点击发送,即把.bin文件的二进制码打包报文发送给下位机STM32,上位机即发送“7e 7e 5a 00“ + 2字节该报文是第几包报文(第一包报文从0开始计数)+ 2字节一个需要多少发送总报文数 + 1024字节.bin文件二进制数据 + 2字节Modbus CRC校验码,比如第一包报文是1024字节,一共含有8包报文,则报文前八字节位是“7e 7e 5a 01 00 00 00 07“,依次类推即可。

      上位机每发送一条.bin文件二进制报文,下位机STM32确认无误后会发送“2b 52 49 47 48 54 2e 7a”(ASCII码:+RIGHT+CRC16),上位机在界面显示框内需要显示xx/yy包报文发送成功,如果下位机STM32确认有误后会发送“2d 45 52 52 4f 52 Cf 0d”(ASCII码:-ERROR+CRC16),上位机会重新发送该报文,默认同一报文最多发送五次,超过五次上位机在界面显示框内需要显示STM32远程升级失败!如果报文全部发送完成,且每包报文下位机STM32都返回正确,则上位机在界面显示框内需要显示STM32远程升级成功!

      在上位机确认下位机STM32接收完全所有的.bin文件二进制报文后,控件4 “app跳入”才可以被点击,点击此控件上位机即发送“7e 7e 5a 02 c3 75”,下位机STM32确认无误后会发送“2b 52 49 47 48 54 2e 7a”(ASCII码:+RIGHT+CRC16),上位机在界面显示框内需要显示application跳转成功!如果下位机STM32确认有误后会发送“2d 45 52 52 4f 52 cf 0d”(ASCII码:-ERROR+CRC16),上位机在界面显示框内需要显示application跳转失败!

      点击控件5处“app检测”,上位机即发送“7e 7e 5a 03 02 b5”,如果下位机STM32发送“2b 52 49 47 48 54 2e 7a”(ASCII码:+RIGHT+CRC16),则代表上位机和下位机之间串口通信正确且下位机application存在,可以操作界面其他控件;如果下位机STM32发送“2d 45 52 52 4f 52 cf 0d”(ASCII码:-ERROR+CRC16),则代表上位机和下位机之间串口通信错误且下位机application不存在。

      上位机在通过点击控件“app检测”确定下位机application存在的情况下,控件6“boot跳入”才可以被点击,点击此控件上位机即发送“7e 7e 5a 04 43 77”,下位机STM32确认无误后会发送“2b 52 49 47 48 54 2e 7a”(ASCII码:+RIGHT+CRC16),上位机在界面显示框内需要显示bootloader跳转成功!如果下位机STM32确认有误后会发送“2d 45 52 52 4f 52 cf 0d”(ASCII码:-ERROR+CRC16),

 文章来源地址https://www.toymoban.com/news/detail-459161.html

到了这里,关于STM32 10个工程篇:1.IAP远程升级(四)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32/GD32 BootLoader升级 IAP升级

    如果我们的App 程序起始地址在0x08006000 ,并且App 的中断向量表在起始地址,那么BootLoader 程序下载App 后,为了App 程序能正确运行,开始App 程序的运行后第一步,就要把中断向量表重定位到0x08006000 那里。 我们的BootLoader下载App程序后,App程序就需要做同样的事情。主要有三个

    2024年02月11日
    浏览(60)
  • STM32实战之IAP代码升级

    目录 1 IAP介绍   2 内存分区 3 整体设计流程图 4 Boot Loader的代码编写 5 APP1代码编写 6 APP2代码编写 stm32内部flash操作相关函数 IAP(In Application Programming)即在应用编程, IAP 是用户自己的程序在运行过程中对User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通

    2024年02月01日
    浏览(38)
  • STM32F0实现IAP升级固件

    好几年前写过一篇关于 STM32 bootloader 升级固件的博客,但是使用的芯片是 STM32 F4 系列,升级固件的方式是在外部 flash 的 fat32 文件系统中存入固件文件,reset 后通过特定按键进入 IAP 程序。 最近需要在 STM32 上实现同样的 IAP 功能,但是方式不太一样,也发现一些芯片的差别,

    2024年02月14日
    浏览(45)
  • STM32 IAP应用开发--bootloader升级程序

    原文链接:https://blog.csdn.net/ShenZhen_zixian/article/details/129424077 什么是IAP? IAP(In-Application Programming) 指MCU可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。在应用编程(IAP)是用户的应用代码对片内Flash存储器进行擦除/编程的方法。这种方式的典型应用就

    2024年01月17日
    浏览(81)
  • STM32单片机实现固件在线升级(IAP)

    单片机的固件升级方式有很多种, 1、ICP:In Circuit Programing,简单说就是在单片机开发时使用烧录器升级程序,比如使用J-Link烧录单片机程序。 2、ISP:In System Programing,在单片机内部实现了基于通信接口(如串口、I2C、SPI等等)的FLASH引导程序,配合厂家提供的烧录软件工具

    2024年02月13日
    浏览(56)
  • STM32 IAP应用开发——通过USB实现固件升级

    什么是IAP? IAP(In-Application Programming) 指MCU可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。在应用编程(IAP)是用户的应用代码对片内Flash存储器进行擦除/编程的方法。这种方式的典型应用就是用一小段代码来实现程序的下载,实际上单片机的ISP功能就

    2024年02月12日
    浏览(48)
  • 调试笔记-stm32的OTA/IAP 通过485升级固件

    背景:最近需要在stm32上实现通过rs485升级固件功能。经过几天搜索和调试,实现了功能。 目标:使用cubeIDE实现stm32F407VGT6,通过RS485升级固件 调试记录: 步骤1. 在keil环境下的rs485升级固件(含源码):STM32 OTA应用开发——通过串口/RS485实现OTA升级(方式2)_stm32串口升级_柒壹漆

    2024年02月11日
    浏览(53)
  • 【STM32】IAP升级01 bootloader实现以及APP配置(主要)

    通过之前的了解 之前的了解,我们知道实现IAP升级需要两个条件: 1.APP程序必须在 IAP 程序之后的某个偏移量为 x 的地址开始; 2.APP程序的中断向量表相应的移动,移动的偏移量为 x; 默认条件下的起始地址 默认的条件下,图中 IROM1 的起始地址(Start)一般为 0x08000000,大小

    2024年02月03日
    浏览(46)
  • stm32 在线升级程序 bost IAP程序 + app程序

    机器内 bootloader程序 启动默认程序 默认程序有 串口判断 是否收到 升级命令 收到升级命令后 接受串口发送过来的 更新程序 接受完成后 跳转到新程序位置开始执行 https://www.zhihu.com/people/lian-zhu-50 首先arm单片机控制程序运行是通过PC指针完成的,PC指到哪里,程序就运行到哪里

    2024年02月10日
    浏览(49)
  • 使用STM32F103的串口实现IAP程序升级功能

    🎬IAP程序烧录全过程演示: ✨这几天折腾IAP升级功能,狂补了很多相关BootLoader相关的知识。本来最想实现IAP升级程序的方式是,基于SPI通讯的SD卡,借助挂载的FatFS文件系统,来实现对目标stm32芯片的自身程序的升级,奈何没有实现,只能求其次,先来通过官方现有的串口实

    2024年02月10日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包