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升级过程中上位机的截图

相关推荐
Wallace Zhang1 小时前
STM32F103_Bootloader程序开发15 - 从Keil到vscode + EIDE + GCC的迁移实践
stm32·gcc·eide
RaLi和夕1 小时前
单片机学习笔记.C51存储器类型含义及用法
笔记·单片机·学习
ShiMetaPi1 小时前
操作【GM3568JHF】FPGA+ARM异构开发板 使用指南:蓝牙
arm开发·嵌入式硬件·fpga开发·rk3568
武文斌772 小时前
ARM工作模式、汇编学习
汇编·嵌入式硬件·学习·arm
月阳羊2 小时前
【硬件-笔试面试题-76】硬件/电子工程师,笔试面试题(知识点:H桥驱动电路的设计要点)
java·单片机·嵌入式硬件·面试·职场和发展
wdfk_prog3 小时前
Python脚本深度解析:实现基于YMODEM的单片机固件自动化升级
python·单片机·自动化
纳祥科技3 小时前
分享:一种为蓝牙、WIFI、U段音频发射设备提供ARC回传数字音频桥接功能的方案
网络·单片机·音视频
代码总长两年半6 小时前
STM32物联网项目---ESP8266微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制---代码篇(四)
stm32·单片机·物联网
咕咚.萌西6 小时前
RISC-V体系架构
嵌入式硬件·架构·risc-v
玉~你还好吗7 小时前
【嵌入式电机控制#进阶10】参数辨识(一):电阻辨识
单片机·嵌入式硬件