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

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

        伴随着催更不断,周日晚上来继续撰写STM32 IAP远程升级的项目例程,在这篇博客中笔者主要结合上位机报文发送机制来介绍下位机的报文解析设计,坚持做原创博客确实是一件很考验耐力的事情,一方面博客的文字和图片需要投入大量精力和时间,另一方面想要把意思表达清楚也需要多思考再动笔,只希望这些博客能真正帮助到需要的人吧。

       嵌入式ARM、DSP、FPGA、PCB的付费教程很多,可以说看起来市面似乎真的不缺教程,但是为什么就让人觉得入门很难提高更难呢,这里面原因无外乎是教程和项目之间的差距,比如说现实中很多人做嵌入式开发,从毕业到工作好几年,只掌握了PCB原理图、版图的简单设计和MCU一般性的裸机编程,并且做出来的产品还是感觉心里没底,不保证其可靠性和稳定性。市面上找来找去有不少告诉你怎么入门的付费教程,却没有告诉你怎么去举一反三、独当一面地承担具体项目开发的教程,并且入行以后再往上学习MCU的FREERTOS系统,ARM LIUNX开发、FPGA逻辑设计以及DSP编程就感觉非常吃力了。

       其实笔者最初只想把FPGA那块写好走专业路线,但是坦诚地说有很多粉丝私信表示想要看一看真实项目中FPGA或者ARM怎么联合工作的,或者在一个产品中ARM负责什么、FPGA负责什么、DSP负责什么,那么这就上升到一个嵌入式软件架构的问题,如何把三大处理器合理利用并且保证产品的可靠性、实时性、稳定性等,所以笔者就渐渐意识到只深耕FPGA,就算把高速接口、视频处理、数字信号都写上天也无法满足更多粉丝的需求,因为很显然这样就无法建立起一个完整的嵌入式软件架构概念,于是更新完“FPGA 20个例程”专栏就开始撰写姊妹篇“STM32 10个工程”专栏,“STM32 10个工程”专栏写完就开始做几个真实的产品项目让大家感受到产品嵌入式软件开发的过程。

       步入正文,上一期写到了STM32 IAP升级的上位机报文发送机制,那么显然在这篇博客里,我们需要把下位机和上位机对应起来让其可以正常进行数据交互,忘记上位机报文发送机制的朋友可以去看看上一篇博客,注意到上位机端把“7e 7e 5a”作为固定的报文报头,第4位字节“00”代表“boot检测”、“01”代表“发送app bin文件”、“02”代表“app跳入”、“03”代表“app检测”、“04”代表“boot跳入”,所以在下位机的bootloader程序设计中,我们需要分辨出上位机发送报文的前3字节固定包头、第4字节命令号、报文最后2字节的CRC校验正确,所以需要对前面用STM32CubeMX生成的代码进行改写。

         首先我们需要把CRC校验做好,这里笔者使用了查表法,这种方法更加适合STM32端使用减轻了计算压力,但是需要实现存储好对照表,具体计算查表函数如下图1所示。

STM32 10个工程篇:1.IAP远程升级(五),STM32 10个工程,stm32,单片机,嵌入式硬件

图1 CRC校验函数

      其次在串口空闲中断里,需要对报文头进行判断对于非“7e 7e 5a”报文头直接进行过滤处理并不再置位USART1_Type.flag,这样在mian函数的裸机程序中,因为USART1_Type.flag为0则不会进行串口数据解析操作,如图2所示则是串口空闲中断函数的具体编码。

STM32 10个工程篇:1.IAP远程升级(五),STM32 10个工程,stm32,单片机,嵌入式硬件

图2 串口空闲中断函数

      再次我们需要编写FLASH擦除函数和FLASH写入函数,以方便对STM32的自身FLASH擦除和写入,笔者参考了ST官方基于STM32F0系列的flash_if.c代码,这里不想过度赘述只想简单说明对于FLASH擦除因为STM32F103RCT6内部分为256页的FLASH且每页FLASH占1024字节而bootloader含32页即application的地址0x08008000,并对FLASH_If_Write官方函数进行了封装用FLASH_TYPEPROGRAM_HALFWORD即一次性写入2字节的方式写入片内FLASH,如图3和图4所示分别是FLASH的擦除函数和FLASH的写入函数,并且两个函数带有返回值操作正确返回0,操作错误返回1。

STM32 10个工程篇:1.IAP远程升级(五),STM32 10个工程,stm32,单片机,嵌入式硬件

图3 FLASH擦除函数

STM32 10个工程篇:1.IAP远程升级(五),STM32 10个工程,stm32,单片机,嵌入式硬件

图4 FLASH写入函数

       最后如图5所示是串口解析函数,这个函数主要把串口DMA空闲中断收到的报文数据(报头正确)进行解析,函数先进行了CRC校验判断,如果CRC校验错误直接发送“-error”报文上位机收到立刻显示错误,如果CRC校验正确则进行下一轮判断:对于命令码“00”则为BOOT检测命令,下位机收到后即可返回“+right”并直接置位Flag_Start为Jump_Boot,上位机收到即可显示正确;对于命令码“01”则为发送BIN文件指令,下位机收到第一报数据后就从application的地址0x08008000处开始擦除并解锁FLASH,并且当检测到最后一报数据后即可加锁FLASH;对于命令码“01”则为APP跳入命令,这里直接置位Flag_Start为Jump_App即可,详细过程放在下一篇博客展开讲解。

STM32 10个工程篇:1.IAP远程升级(五),STM32 10个工程,stm32,单片机,嵌入式硬件STM32 10个工程篇:1.IAP远程升级(五),STM32 10个工程,stm32,单片机,嵌入式硬件STM32 10个工程篇:1.IAP远程升级(五),STM32 10个工程,stm32,单片机,嵌入式硬件STM32 10个工程篇:1.IAP远程升级(五),STM32 10个工程,stm32,单片机,嵌入式硬件

图5 串口解析函数文章来源地址https://www.toymoban.com/news/detail-636289.html

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

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

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

相关文章

  • 基于STM32单片机BOOTLOADER通过串口升级程序IAP——APP方案

                            此方法前提是你得有一个EEPROM         我用的单片机是STM32F103ZET6 , 此单片机FLASH容量为512KB; 在此单片机里面FLASH的起始地址是0X8000000,BOOT作为引导加载程序一般都是从这个地址开始,单片机一上点默认会从这个地址开始运行,所以将自己

    2024年02月04日
    浏览(42)
  • STM32单片机IAP介绍

    1、什么是IAP? 首先区分下两个概念:ISP和IAP:         ISP:In System Programming (在系统中编程),通过芯片专用的串行编程接口对其内部的程序存储器进行擦写。         IAP:In Application Programming( 在应用中编程),通过调用特定的bootloader程序,对程序存储器的指定段

    2024年02月16日
    浏览(30)
  • STM32F407串口IAP远程升级程序

    相关代码和工程文件链接:https://pan.baidu.com/s/1wN4THWJwqzjjIe7e2TENBA?pwd=o86o 提取码:o86o         STM32代码烧录主要有三种:ICP、ISP、IAP。         ICP(In Circuit Programing),在电路编程,通过JTAG或者SWD接口进行程序的烧录,就是平时利用ST-Link或者J-Link烧录程序;       

    2024年02月10日
    浏览(89)
  • 2-远程升级篇(自建物联网平台)-STM32通过EC800使用http或https下载程序文件升级程序(APP通过MQTT控制单片机更新)

    1,用户在APP上点击 \\\"固件升级\\\" 按钮, APP使用MQTT发送:  {\\\"data\\\":\\\"updata\\\",\\\"cmd\\\":\\\"DeviceInfo\\\"} //询问设备固件信息 2,设备通过MQTT收到该消息以后,发送 {\\\"data\\\":\\\"updata\\\",\\\"cmd\\\":\\\"DeviceInfo\\\",\\\"DeviceModel\\\":\\\"STM32EC800BKAPP\\\",\\\"FirmwareVersion\\\":\\\"0.0.0\\\"} (STM32EC800BKAPP是设备的型号;  0.0.0是设备当前的固件版本) 3,APP收到

    2024年04月16日
    浏览(134)
  • stm32毕设分享 单片机远程wifi红外无接触体温测量系统 - 物联网 stm32

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月19日
    浏览(57)
  • 单片机毕设 stm32 wifi远程温控风扇系统

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月19日
    浏览(47)
  • stm32毕设分享 stm32单片机的远程WIFI密码锁 - 物联网 嵌入式

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(38)
  • STM32/GD32 BootLoader升级 IAP升级

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

    2024年02月11日
    浏览(47)
  • 单片机项目分享 单片机(stm32)远程智能宠物喂养系统 - 物联网 esp8266

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月19日
    浏览(48)
  • 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日
    浏览(27)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包