图文详解STM32单片机远程升级

点击蓝字

f39d2d01538227c1e5916961c5c13168.png

关注我们

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享

来源于网络,侵删

1、需要两份程序

BootLoader和App程序,两份程序均可以通过jlink下载,只需要将下载地址修改一下即可:

36305b9a9179aacb25a73992141b65bf.png0d4e834604c43757cbd03c74c087e40f.png

2、在BootLoader中的跳转函数

#define APP_FLASH_ADDR 0x8008000 iap_load_app(APP_FLASH_ADDR);
//#include "include.h"#include "iap.h"#include "main.h"typedef  void (*iapfun)(void);//?¨ò?ò???oˉêyààDíμ?2?êy.iapfun jump2app; __asm void MSR_MSP(u32 addr) {MSR MSP, r0    //set Main Stack valueBX r14}/*******************************************************************************   Function name  £o iap_load_app*    Function describe     £o ì?×aμ?app3ìDò?£*    Input      £o appxaddr£oapp3ìDòμ?μ??·?£       *    Output      £o No*    Illustration     £o  *   Revise   £o*   Existing problems  :  No*****************************************************************************/
void iap_load_app(u32 appxaddr)
{if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000){ jump2app=(iapfun)*(vu32*)(appxaddr+4);MSR_MSP(*(vu32*)appxaddr);jump2app(); //ì?×aμ?APP.}}

3、在app中修改中断向量表的偏移地址

f4406d9fac999918f423d4531d885ef7.png

cdf8a5f8c059c2458000e1145cced092.png0f6b695366f403d90a837246b6d6c6ac.png

4、程序自动选择向量表的偏移地址

适用场景,一颗芯片里面有3个程序:

  1. BootLoader程序,起始地址:0x08000000

  2. APP1程序,起始地址:0x08008000

  3. APP2程序,起始地址:0x08013000

这种情况就需要BootLoader程序自动选择往哪个地址跳转,这个地址再升级完以后会变,比如当前的跳转地址是app1,那么升级后跳转的地址就变为app1。

针对这种场景,做如下修改:

5874c2e8bad6c3da799a8d9d7cdd3580.png

5、keil编译器中设置的程序起始地址会别写进bin文件

13a4aacfb2cf2dbf0907cbce568f5b0b.png

上图中的地址会被写入到bin文件中,所有在编译APP1程序和APP2程序的时候,要记着修改这里的起始地址。

如果你年满18周岁以上,又觉得学【C语言】太难?想尝试其他编程语言,那么我推荐你学Python,现有价值499元Python零基础课程限时免费领取,限10个名额!
▲扫描二维码-免费领取

戳“阅读原文”我们一起进步

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

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

相关文章

建立索引lucene_用Lucene建立搜索索引

建立索引lucene本文是我们名为“ Apache Lucene基础知识 ”的学院课程的一部分。 在本课程中,您将了解Lucene。 您将了解为什么这样的库很重要,然后了解Lucene中搜索的工作方式。 此外,您将学习如何将Lucene Search集成到您自己的应用程序中…

spring javafx_Oracle Spring Clean JavaFX应该吗?

spring javafx我们确实在Codename One上依赖JavaFX,我们的模拟器需要它。 我们的桌面版本使用它,而我们的设计器工具基于Swing。 我们希望它成功,这对我们的业务至关重要! 即使您是Java EE开发人员并且不关心桌面编程,…

哪些著名软件是用C、C++编写的?

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删经常跟大家谈论C/C是多么的厉害,但总是耳听为虚,还需眼见为实,那如何做到眼见为实呢?当然还是要从…

java ee 下版本_将旧版本从Java EE 5减少到7

java ee 下版本Java EE 5于2005年首次引入,而Java EE 7于2013年问世。这两个版本之间存在7年的差距,从技术角度来说,这就像一个世纪。 许多组织仍然对使用Java EE 5感到困惑,并且有很多正当的理由选择不升级。 不过,如…

哪款 Linux 才是更好的 CentOS 替代品?

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删AlmaLinux 是基于 RHEL 的企业级 Linux 发行版。以下是选择 AlmaLinux 作为 CentOS 替代方案的一些原因。CentOS 将于 2024 年 6 月到期。截至 2…

绩效从C到S,分享渣渣程序员逆袭秘诀!

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删绩效面谈结束,从会议室出来,有一种不真实的感觉——这个季度我竟然拿了S?!要知道,上个…

海贼王为什么画风突变_什么是突变测试?

海贼王为什么画风突变最近,我再三提到突变测试一词。 因为可以说这种方法能够以超出代码覆盖范围的方式检测测试安全网的空白,所以我花了一些时间来追赶这个话题并尝试一下。 这篇文章总结了我的发现,作为对该主题的快速介绍。 什么是变异测…

C语言 #define 与 typedef 的区别与用法

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删在C语言编程中,typedef 和 #define是最常用语句,可能很多工作过几年的工程师都没有去深究过它们的一些用法和区别。typed…

硬核!400 行代码实现一个虚拟机

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删我们都知道理工科类的大学专业,一般都会在大一选择教授 C 语言作为编程入门语言,我最初接触编程也是入的 C 语言的坑。课…

Spring集成基础知识

本文是我们名为“ EAI的Spring集成 ”的学院课程的一部分。 在本课程中,向您介绍了企业应用程序集成模式以及Spring Integration如何解决它们。 接下来,您将深入研究Spring Integration的基础知识,例如通道,转换器和适配器。 在这…

C++最佳实践 | 工具

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删前言C最佳实践: 支持Fork的编码标准文档本文档旨在收集对C最佳实践所进行的协作性讨论,是《Effective C》(Meyers) 和《C Coding Sta…

C语言函数返回 1 和返回 0 哪个好?

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删基本上,没有人会将大段的C语言代码全部塞入 main() 函数。更好的做法是按照复用率高、耦合性低的原则,尽可能的将代码拆分…

抽象工厂和工厂方法示例_抽象工厂设计模式示例

抽象工厂和工厂方法示例本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查…

史上最污技术解读,我竟然秒懂了

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删假设你是个妹子,你有一位男朋友,于此同时你和另外一位男生暧昧不清,比朋友好,又不是恋人。你随时…

tdd java_Java TDD简介–第1部分

tdd java欢迎来到测试驱动开发 (TDD)系列的介绍。 我们将在TDD上下文中讨论Java和JUnit ,但这只是工具。 本文的主要目的是使您全面了解TDD,而无论使用哪种编程语言和测试框架。 如果您在项目中不使用TDD,那么您要么是…

C++最佳实践 | 代码风格

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删C最佳实践:1. 工具2. 代码风格(本文)3. 安全性4. 可维护性5. 可移植性及多线程6. 性能7. 正确性和脚本代码风格代码风格最…

okhttp 连接池_okhttp 源码分析

https://square.github.io/okhttp/​square.github.iosquare/okhttp​github.com0 概述okhttp是一个现代的网络请求框架Http/2 支持 所有访问同一个主机的Request都共用一个socketconnection pool 连接池 减少请求延迟GZIP 压缩数据,减少传输所用的带宽Response Cac…

程序员日均写7行代码被开除,公司:正常员工每天200行

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删根据前不久CSDN发布的《2021-2022中国开发者调查报告》显示,大部分程序员平均每天会写200行左右的代码。那么代码的数量能衡量一个程…

抽象工厂和工厂方法示例_工厂方法设计模式示例

抽象工厂和工厂方法示例本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查…

这10个C语言技巧让初学者少走180天弯路!

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删技巧 1:不要使用“GOTO”语句二十几年前,当计算机编程尚处于起步阶段时,程序流程是由“GOTO”语句来控制。该…