当前位置: 首页 > news >正文

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

       在IAP远程升级的最后一篇博客里,笔者想概括性地梳理总结IAP程序设计中值得注意的问题,诚然市面上或者工作后存在不同版本的IAP下位机和上位机软件,也存在不同定义的报文格式,甚至对于相似的知识点不同教程又有着完全不同的解读,这就很容易让初学者摸不清思路,所以在最后不准备过度赘述代码上的细枝末节,实际上大家在搞清楚整个IAP升级的过程后,便可以自定义报文设计出无数种下位机和对应的上位机软件,真实投产项目中IAP升级设计也是基于这些思想,但需要考虑到通信解析的完整性,即上位机和下位机的报文握手机制和重发机制,当然这些机制笔者都已添加到上位机软件中。

      另外笔者最近也买了一台新的戴尔小型台式主机,正考虑录制哔哩哔哩视频,前段时间也收到哔哩哔哩官方的邀请,但STM32和FPGA具体录制什么内容,具体怎么操作这些录屏软件等还在思考学习中,如果做视频想着视频内容不会太长都保持在一刻钟内,练习普通话言简意赅把关键点说明清楚,配上相关的背景知识、代码讲解、具体操作、上板现象等。

概括性地下面这些是笔者对IAP单片机升级程序设计中的关键技术点总结:

  1. 单片机上电首先进入的是Bootloader段程序,而默认是直接跳入Application段程序,这时候便自然而然地需要一些逻辑判断,比如板载Eeprom或者Flash置位相关标志位,即开机上电后单片机先读取掉电保存的标志位,如果标志位是跳转Application,则直接从Bootloader跳转到Application,如果标志位是停留Bootloader,则停留在Bootloader进行等待;
  2. 上位机中有“app跳入”和“boot跳入”两个按键,即按下两个按键,单片机向Eeprom或者Flash置位相关标志位再调用API函数NVIC_SystemReset(),单片机重启后立刻执行读取标志位操作,即可实现跳转到Application或者停留在Bootloader;
  3. 如果单片机没有外挂Eeprom或者Flash,那么也可以用系统时钟实现这个功能,如图1所示是系统滴答时钟默认是1ms,这里笔者用了10s的滴答时钟进行超时计时,即10s内单片机没有收到上位机的“boot检测”则直接跳转到Application,反之则停留在Bootloader等待上位机端发送BIN文件的二进制码;
  4. STM32单片机中向内部Flash中写入需要先解锁后加锁,即调用HAL_FLASH_Unlock()和HAL_FLASH_Lock()函数,同时要在HAL_FLASH_Unlock()解锁Flash并对Application段的Flash进行全擦除操作,再进行写入操作;
  5. 上位机端是主机,下位机STM32端是从机,为了确保程序的稳定性和可靠性,应引入报文握手机制和重发机制,这里很好理解上位机端每发一条指令,下位机都需要给出回应,如图2所示是下位机端正确和错误应答报文的定义,上位机端在发送任何一条报文后即进行了5s的超时等待,在这5s内下位机回复正确报文,上位机端则判断此条报文有效,反之收到下位机回复错误报文或者超过5s无回复判断此条报文无效,则如果是判断和跳转报文在上位机的信息菜单中显示相关提示,如果是发送BIN文件报文最多5次的进行重发;
  6. 在上位机发送BIN文件报文时,除了特定报头一般性地还需要加入报文帧信息,例如目前是第几帧数据,一共需要发送多少帧数据,举个例子在这个上位机中笔者把BIN文件按照1024字节进行划分,当然这里也可也划分成512字节和256字节,相对地要发送更多报文才能实现IAP升级,如图3所示是BusHound软件抓包上位机发送的BIN文件报文,其中红框固定报文头“7E 7E 5A”,“01”是命令码,而“00 06 00 07”代表这个BIN文件需要发送8个1024字节的报文,当前这个报文是第7包报文(报文统计从0计数),这些报文定义在前面博客中均有详细介绍,下位机STM32端在收到当前是第一包报文后就从Application段的Flash进行全擦除操作并进行Flash去锁处理,下位机检测CRC校验正确则回复上位机正确报文,触发上位机发送下一包BIN文件报文,下位机STM32端在收到当前报文是最后一包报文后即进行Flash加锁处理;

图1 系统滴答时钟10s超时等待计时

图2 下位机的正确和错误应答报文

图3 Bus Hound软件抓包上位机发送的BIN文件报文

       如图4所示是KEIL5下在线仿真的截图我们输入0x08008000这个Flash偏移地址,即可发现和如图5所示的用WinHex插件打开的Application程序RTC.Bin文件内容是完全一致的,则侧面说明了整个IAP升级的可靠性和稳定性。

图4 KEIL5下在线仿真截图

图5 WinHex插件打开的Application程序RTC.Bin文件内容

       如图6所示是KEIL5中配置Application程序自动生成RTC.BIN文件的操作方法,因为KEIL中默认生成的是.HEX文件,而IAP升级中我们需要的是.BIN文件所以需要配置下在程序文件夹下的指定路径下生成.BIN文件,如图7所示是笔者自己编写的“豌豆升级IAP上位机软件”,在IAP升级过程中的截图。

图6在KEIL5中配置Application程序自动生成RTC.BIN文件

图7 IAP升级过程中上位机的截图

http://www.lryc.cn/news/183552.html

相关文章:

  • 【智能家居项目】裸机版本——字体子系统 | 显示子系统
  • PDF中跳转到参考文献后,如何回到原文
  • 了解基于Elasticsearch 的站内搜索,及其替代方案
  • 【多模态融合】TransFusion学习笔记(2)
  • Pyhon-每日一练(1)
  • MySQL:数据库的物理备份和恢复-冷备份(3)
  • 功能比较:Redisson vs Jedis
  • Spring web security
  • SpringCloud(二)Docker、Spring AMQP、ElasticSearch
  • 7.Tensors For Beginneers - Convector Components
  • 直线导轨坏了可以维修吗?
  • Java基础--泛型详解
  • 学习搜狗的workflow,MacBook上如何编译
  • Ubuntu使用cmake和vscode开发自己的项目,引用自己的头文件和openCV
  • 2) dataset, dataloader
  • 阿里云PolarDB自研数据库详细介绍_兼容MySQL、PostgreSQL和Oracle语法
  • [软件工具]opencv-svm快速训练助手教程解决opencv C++ SVM模型训练与分类实现任务支持C# python调用
  • 邮件注册(一)验证码发送
  • 【网络安全---sql注入(2)】如何通过SQL注入getshell?如何通过SQL注入读取文件或者数据库数据?一篇文章告诉你过程和原理。
  • 正点原子嵌入式linux驱动开发——TF-A移植
  • GB28181学习(六)——实时视音频点播(数据传输部分)
  • JMeter接口自动化测试(数据驱动)
  • 数据结构:二叉树(超详解析)
  • 【考研数学】高等数学第七模块 —— 曲线积分与曲面积分 | 4. 对坐标的曲面积分(第二类曲面积分)与场论初步
  • 使用Thrift实现跨语言RPC调用
  • 【QT5-程序控制电源-RS232-SCPI协议-上位机-基础样例【1】】
  • leetcode 1049. 最后一块石头的重量 II、494. 目标和、474. 一和零
  • Error string: Could not load library
  • pom.xml里的标签
  • 微服务部署的正确策略