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

news2024/11/19 19:25:13

        清晨一大早起来开始撰写STM32 10个例程篇的第一章即串口IAP远程升级,虽然网络上有很多免费和付费的STM32教程,但是仍然不断地说服自己沉住气、静下心写一份独一无二的,这份独一无二中也凝聚了一名MCU工程师5年间不断地项目迭代积累,这时突然想到FPGA特权同学书序言里面一句话:没有人会记得你做过多少项目,但是一定会有人记得你写过一本好书,这句话从侧面说明了一个不争的事实:有价值的教程和文档确实太少了,所以可能一本好书或者一个博客能被人所传颂吧!

        关于IAP远程升级笔者打算多写几篇博客,其本身确实是项目当中必备的一个开发要点,当我们的产品最后批量转产封装到密闭的容器或者结构内,这时再想着去拆机用STLINK或者JLINK下载器更新程序是非常不现实的,那么自然而然地就需要PC端上位机通过RS232、LAN、USBTMC等接口把APP的BIN文件打包发送到下位机,下位机STM32在接收后再把二进制码自己写入对应的FLASH空间里实现不用下载器远程升级程序的目标。

       这时可以假设一个真实的场景,比如大家去参加公司技术面试,面试官上来就抛出一个问题:在项目中用过IAP升级吗,可以介绍介绍具体的实施细节吗?

       也都是从学生时代过来笔者本科刚毕业只知道有串口这个名词,硕士刚毕业知道有串口助手和波特率玩过STM32开发板demo,当然面试官问这个问题,心里自然有一个期待答案,那么严格要求的话,这道题回答知道波特率和串口助手只能得10分;

       如果有的朋友可能在校玩过原子或者野火的STM32开发板里面也有IAP升级demo,用心跑了一遍然后知道大概流程回答上位机整个BIN文件发送,下位机串口中断接收环形队列写入那么这道题可得30分;

       但是市场上开发板demo和网络上泛滥成灾的demo改写版显然不是面试官最后期待的答案,如果实际工作过积累了两年以上经验回答我们用Labview或者C#做了个上位机,按照每包1024字节或者512字节打包发送给下位机,下位机接到以后环形队列写入,加入了CRC校验和上位机重发机制,那么考虑到了串口收发的不确定性重发机制的引入、上位机下位机联调经验这题可得50分;

       如果工作真的实际用心做过IAP升级,回答采用了串口空闲中断DMA收发减轻MCU负担,写入前APP后续FLASH扇区全部擦除,程序里加入了对HAL库底层FLASH扇区删除和写入返回值等判断等,数据收发CRC校验错误,FLASH擦除写入错误都会告诉上位机,上位机接到后会重新发包那么已经非常接近完美了,这题可得90分;

       直到你告诉面试官产品外挂了一个Eeprom,用了Eeprom固定地址的一位作为APP和BOOT的标志位,产品上电跳入BOOT立刻读出Eeprom固定地址的值,默认跳入APP,上位机有控件APP跳入和BOOT跳入,下位机对应写入Eeprom不同的值后,再NVIC_SystemReset()软件复位重启,这题可以得100分如同教科书般的经典回答;

       这时候如果再补充说明,为了节约物料没有外挂Eeprom,而是把STM32内部FLASH分成了BOOT、APP、存储校准标志数据等,展开细节说明等,那么面试官真的是120分满意了。

        如图1所示是笔者用Labview编写的IAP升级助手,借助这个上位机可以实现任何MCU的IAP升级功能,并且可以实现BOOT和APP之间随意跳转。

       在第一章即串口IAP远程升级中,笔者会把STM32CubeMX配置、串口DMA空闲中断收发、CRC校验裸机代码结构、HAL库擦除写入FLASH、上位机下位机联调、BUS Hound抓包下位机联调等详细说明吧!

1 IAP升级助手上位机

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/388348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

总结磁共振成像的脑龄预测的人工智能模型

脑龄预测的人工智能模型 介绍基于神经影像的BA预测BA预测建模:从统计方法到DL统计方法使用统计/最大似然估计方法的BA研究的主要结果深度学习使用DL方法进行BA研究的主要结果可解释的人工智能(即可解释的深度学习方案)可解释的能力(Interpretability,)、可因果性和可解释性…

剑指 Offer —— 数组和字符串

文章目录剑指 Offer 04. 二维数组中的查找代码实现解题方案 思路算法步骤剑指 Offer 05. 替换空格题目描述代码实现解题方案 思路算法步骤剑指 Offer 11. 旋转数组的最小数字 - 解决方案题目描述代码实现剑指 Offer 04. 二维数组中的查找 在一个 n * m 的二维数组中&#xf…

csdn写文章自定义表格怎么做

前言 CSDN写文章时,经常会用到表格,不同于Word文档中直接插入表格(自定义几行几列),使用CSDN自带的md文本编辑器时,很难快速插入想要的表格样式,追究原因,也是因为md的语法问题&…

C语言刷题(4)——“C”

各位CSDN的uu们你们好呀,今天小雅兰的内容又到了我们的复习啦,那么还是刷题噢,话不多说,让我们进入C语言的世界吧 BC55 简单计算器 BC56 线段图案 BC57 正方形图案 BC58 直角三角形图案 BC59 翻转直角三角形图案 BC60 带空格…

Python计算分类问题的评价指标(准确率、精确度、召回率和F1值,Kappa指标)

机器学习的分类问题常用评论指标有:准确率、精确度、召回率和F1值,还有kappa指标 。 每次调包去找他们的计算代码很麻烦,所以这里一次性定义一个函数,直接计算所有的评价指标。 每次输入预测值和真实值就可以得到上面的指标值&a…

Camtasia2023电脑屏幕录像视频编辑录屏软件

Camtasia是一款专业的录屏软件,由TechSmith开发。它旨在帮助用户创建高质量的视频内容,包括演示、培训视频、演讲录像、教程等等。 Camtasia适合于需要制作视频教程、软件演示、游戏录像等内容的个人和企业用户。例如,软件开发人员可以使用它…

JUC并发编程与源码分析笔记10-聊聊ThreadLocal

ThreadLocal简介 恶心的大厂面试题 ThreadLocal中ThreadLocalMap的数据结构和关系ThreadLocal的key是弱引用,这是为什么ThreadLocal内存泄漏问题你知道吗ThreadLocal中最后为什么要加remove方法 是什么 ThreadLocal提供线程局部变量。这些变量与正常的变量不同&…

基于神经辐射场(Neural Radiance Fileds, NeRF)的三维重建- 简介(1)

Nerf简介 Nerf(neural Radiance Fileds) 为2020年ICCV上提出的一个基于隐式表达的三维重建方法,使用2D的 Posed Imageds 来生成(表达)复杂的三维场景。现在越来越多的研究人员开始关注这个潜力巨大的领域,也…

十大排序(C++版)

测试排序的题目&#xff1a; 912. 排序数组 - 力扣&#xff08;LeetCode&#xff09; 堕落的做法&#xff1a; class Solution { public:vector<int> sortArray(vector<int>& nums) {sort(nums.begin(),nums.end());return nums;} };视频推荐&#xff1a; …

洛谷:P1554 梦中的统计 JAVA

思路&#xff1a;定义一个长度为10的数组&#xff0c;数组下标代表数组元素的数字&#xff0c;比如arr[0]代表数字0.用一个for循环&#xff0c;对每个数先取余再取整&#xff0c;知道取整得到的数为0&#xff0c;说明该数字已经被拆解完了。今天又学了一个输入&#xff0c;原来…

2020蓝桥杯真题美丽的2(填空题) C语言/C++

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小蓝特别喜欢 2&#xff0c;今年是公元 2020 年&#xff0c;他特别高兴。 他很好奇&#xff0c;在公元 1 年到公元 2020 年&#xff08;包含&#xff09;中&#xff…

论文投稿指南——中文核心期刊推荐(电影、电视艺术)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

73. python第三方库安装教程(超详细)

73. python第三方库安装教程&#xff08;超详细&#xff09; 文章目录73. python第三方库安装教程&#xff08;超详细&#xff09;1.知识回顾2. openpyxl 库的作用3. 第三方库的安装步骤【警告内容释义】4. 更新pip5. pip 常用命令1. 什么是pip2. pip --version 查看 pip 版本和…

车载雷达实战之Firmware内存优化

内存&#xff08;Memory&#xff09;是计算机中最重要的部件之一&#xff0c;计算机运时的程序以及数据都依赖它进行存储。内存主要分为随机存储器&#xff08;RAM&#xff09;,只读存储器&#xff08;ROM&#xff09;以及高速缓存&#xff08;Cache&#xff09;。仅仅雷达的原…

树莓派Pico W无线WiFi开发板使用方法及MicroPython编程实践

树莓派Pico W开发板是树莓派基金会于2022年6月底推出的一款无线WiFi开发板&#xff0c;它支持C/C和MicroPython编程。本文介绍树莓派Pico W无线WiFi开发板的使用方法及MicroPython编程示例&#xff0c;包括树莓派Pico W开发板板载LED使用及控制编程示例&#xff0c;Pico W开发板…

Spring——什么是IOC?

一、原则高内聚、低耦合二、什么是IOC&#xff1f;控制反转&#xff0c;把对象创建和对象之间的调用过程&#xff0c;交给spring进行管理三、使用IOC的目的是什么&#xff1f;降低耦合&#xff08;谁和谁的耦合&#xff1f;&#xff1f;如何降低的&#xff1f;&#xff09;原来…

openai-chatGPT的API调用异常处理

因为目前openai对地区限制的原因&#xff0c;即使设置了全局代理使用API调用时&#xff0c;还是会出现科学上网代理的错误问题。openai库 0.26.5【错误提示】&#xff1a;raise error.APIConnectionError(openai.error.APIConnectionError: Error communicating with OpenAI: …

泛型详解.

1 泛型的引入 问题&#xff1a;我们之前实现过的顺序表&#xff0c;只能保存 int 类型的元素&#xff0c;如果现在需要保存 指向 Person 类型对象的引用的顺序表&#xff0c;请问应该如何解决&#xff1f;如果又需要保存指向 Book 对象类型的引用呢&#xff1f; 之前写的顺序表…

红黑树-随记

文章目录1.为什么hashmap用红黑树不用二叉树和平衡二叉树1.1 二叉树&#xff08;Binary Search Tree&#xff09;1.2 红黑树&#xff08;Red Black Tree&#xff09;1.3 平衡二叉树&#xff08;Balence Binary Tree&#xff09;也称AVT2.为什么mysql用b数&#xff0c;不用B数或…

Windows程序员学习Linux环境下VI(VIM)编辑器的使用方法

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重新审视一下Windows程序员如何学习Linux环境知识。由于很多程序在Windows环境下开发好后&#xff0c;还要部署到Linux服务器上去&#xff0c;所以作为Windows程序员有必要学习Linux环境的知识。VI…