iap stm32l4_怎么使用stm32写IAP的bootloader和APP-程序员宅基地

技术标签: iap stm32l4  

Stm32的bootloader和App的编写注意事项

1、 怎么分配bootloader和app的空间

2、 怎么得到数据和写入flash

3、 怎么从bootloader跳转到app

4、 怎么设置App的中断向量

5、 App中怎么生成bin文件

6、程序执行的流程

1、怎么分配bootloader和app的空间

因为我用的是stm32f103c8t6,它的flash的大小是64k,所以把它分成如上所示

0x08000000 —0x0800 33FF分配给bootloader使用,大小是13k

0x0800 3400----0x080097FF分配给第一个APP的使用,大小是25k

0x08009800----0x0800 FBFF分配给第二个APP的使用,大小是25k

0x0800FC00----0x0800 FFFF 分配给user_flag和其它标志使用,大小是1k

在keil中设置rom的大小

A、bootloader中rom大小的设置

B、APP1中rom大小的设置

C、APP2中rom大小的设置

Rom设置好了就可以在map中看见地址的改变,这里拿bootloader和app1来说。

Bootloader的map

App1的map

这里就可以看到RESET的地址改变了

但是要想我们改变的rom在map中也改变keil里面必须要设置如下图,

这里必须要打勾,默认新建的工程是没有选择的

2、怎么得到数据和写入flash

在我的程序是通过串口接收数据,然后调用app_bin_handler(&timer);函数来在里面完成写flash(函数iap_write_appbin(Flash_Current_Write_addr(),g_RxBuf1,length))、和校验写入的数据是否正确(函数flag =read_flash_ECC(Flash_Current_Write_addr(),length);)、校验通过就可以跳转到app中(函数JumpToApp(Flash_Current_Write_addr(),1);)

3、怎么从bootloader跳转到app

voidJumpToApp(u32 ApplicationAddress,u8 flag)

{u32 temp;

if (((*(vu32*)ApplicationAddress) &0x2FFE0000 ) == 0x20000000)

{

if(flag == 1)

{

User_write_Flash_falg();

}

temp = (*(vu32*)(ApplicationAddress + 4));

JumpToApplication =(FunVoidType)temp;

MSR_MSP(*(vu32*)ApplicationAddress);

JumpToApplication();

}1234567891011121314151617181920212223

}

程序中就是利用上面的函数实现跳转,中间有个User_write_Flash_falg()函数是用来设置app的标志的,如果当前正在使用的是app1,那么就设置标志位为2,好在下次启动的时候跳转到app2,如果当前正在使用的是app2,那么就设置标志位为1,好在下次启动的时候跳转到app1

至于上面函数的详解可以百度。

4、怎么设置App的中断向量

Stm32的中断重定向比较简单,因为它有一个专用的寄存器NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x9800);1

这个函数就是重定向了app2的中断向量,实现起来简单

6、App中怎么生成bin文件

因为我的程序是通过串口下载app的所以必须要生成bin文件,才方便下载,

在工程里面进行如下设置就可以生成bin文件

其中主要是路径要对,不然找不到.axf文件,也就生成不了bin文件

总结:

Bootloader里面主要是

1、设置bootloader和app的空间

2、接收编译好的app的bin文件,写入flash

3、实现跳转

App里面主要修改的地方是

1、 ROM起始地址和分配的空间大小

2、 重定向中断向量

3、 生成bin文件

这里就是整个程序执行的流程

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39740737/article/details/111728677

智能推荐

【Linux】Bonding配置,管理-程序员宅基地

文章浏览阅读217次。1 通过Ifenslave手动配置Bonding该方法适用于某些发行包,它们的网络初始化脚本(sysconfig或initscripts包)没有bonding相关的知识。SuSE Linux Enterprise Server 版本8就是这样的一个发行包。对于这些系统一般的方法是,把bonding模块的参数放进/etc/modules.conf或..._echo "all" > /sys/class/net/bond0/bonding/arp_validate echo "100" > /sys

pip更新或安装包的时候出现错误:拒绝访问_pip23.3.2安装包时拒绝访问-程序员宅基地

文章浏览阅读4.7k次,点赞3次,收藏8次。pip更新安装包的时候出现错误,如下图所示:解决方法是:pip install --user [要安装的包] #加上一个–user就好了_pip23.3.2安装包时拒绝访问

计蒜客(39341):腾讯益智小游戏—矩形面积交(简单)_游戏两矩形相交计算-程序员宅基地

文章浏览阅读331次。题目链接:题目腾讯游戏开发了一款全新的编程类益智小游戏,最新推出的一个小游戏题目是关于矩形面积交的。聪明的你能解出来吗?看下面的题目接招吧。给定二维平面上 nnn 个与坐标轴平行的矩形,每个矩形是形如 {(x,y)∣x,y∈R,x1≤x≤x2,y1≤y≤y2}\lbrace (x,y) | x,y \in R, x_1 \le x \le x_2, y_1 \le y \le y_2 \rbrace{(x,y)∣x,y∈R,x1​≤x≤x2​,y1​≤y≤y2​} 的点集,你的任务是对于每个矩形,计算它与_游戏两矩形相交计算

计算机毕业设计项目:宠物店管理系统19849(开题答辩+程序定制+全套文案 )上万套实战教程手把手教学JAVA、PHP,node.js,C++、python、大屏数据可视化等-程序员宅基地

文章浏览阅读733次,点赞16次,收藏16次。免费领取项目源码,请关注●点赞收藏并私信博主,谢谢~宠物店管理系统主要功能模块包括宠物类型、宠物医生、普通挂号、会员挂号、宠物护理、护理订单、提醒信息、会员提醒、护理订单(会员)等信息维护,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取MySQL作为后台数据的主要存储单元,采用Java技术、Ajax技术进行业务系统的编码及其开发,实现了本系统的全部功能。本次报告,首先分析了研究的背景、作用、意义,为研究工作的合理性打下了基础。针对

用R语言为柱状图指定填充色_如果对柱状图进行颜色润色的话,需要用到下面 哪一个参数?-程序员宅基地

文章浏览阅读271次。在R语言中,我们可以使用ggplot2包来创建漂亮的柱状图,并且可以自定义每个柱子的填充颜色。在本例中,我们将使用mtcars数据集,该数据集包含了不同汽车型号的性能指标。通过使用fill参数,我们可以轻松地为柱状图指定填充颜色,以增强数据可视化效果。你可以根据自己的需要选择不同的颜色方案,或者根据数据的特点来选择合适的填充颜色。现在我们可以使用ggplot函数创建柱状图,并使用fill参数指定填充颜色。每个柱子将使用不同的颜色进行填充,颜色的顺序与数据中汽车品牌的顺序相对应。在这个例子中,我们使用了。_如果对柱状图进行颜色润色的话,需要用到下面 哪一个参数?

随便推点

基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计-程序员宅基地

文章浏览阅读3.6k次。来自:http://blog.zyan.cc/post/360/前言:本文阐述的是一款经过生产环境检验的千万级数据全文检索(搜索引擎)架构。本文只列出前几章的内容节选,不提供全文内容。  在DELL PowerEdge 6850服务器(四颗64 位Inter Xeon MP 7110N处理器 / 8GB内存)、RedHat AS4 Linux操作系统、MySQL 5.1.26、MyIS

HTML嵌入JavaScript代码的三种方式_24、在html中,可以引入javascrint代码方式(3分)是()。a、a、行内式b、b、内嵌-程序员宅基地

文章浏览阅读5.4k次,点赞2次,收藏11次。HTML嵌入JavaScript代码的三种方式_24、在html中,可以引入javascrint代码方式(3分)是()。a、a、行内式b、b、内嵌

edge等浏览器打开开发者工具(F12)之后在NetWork看不到请求头等信息_浏览器开发者工具 console没有请求信息-程序员宅基地

文章浏览阅读6w次,点赞73次,收藏50次。问题打开调试器,F5刷新页面后出现下面这种情况没有出现资源等想要的信息(注:从参考1里面得到如下图)解决方法1、打开Edge浏览器里面的调试器的设置2、重置默认并刷新即可注:chrome浏览器的开发者工具的设置也在类似位置参考1、edge等浏览器打开开发者工具(F12)之后在NetWork看不到请求头等信息..._浏览器开发者工具 console没有请求信息

top level_adv7280a移植-程序员宅基地

文章浏览阅读953次。1, 调试前肩后肩的驱动,那个文件是那个设备的驱动?,lcd刷新频率。2,MMC sdiosd驱动框架看下;大概了解记忆sdio协议。复读一下wifi驱动的框架,3,i2c驱动框架。4,Makefile基本常识基本语句 1,解决过什么问题:收货什么经验,自己的review的总结: 1,解决当wifi没有连接到路由器上时,此时通过_adv7280a移植

c#获取当前应用程序所在路径_c获取当前程序的路径-程序员宅基地

文章浏览阅读875次。1.asp.net webform用“Request.PhysicalApplicationPath获取站点所在虚拟目录的物理路径,最后包含“\”;2.c# winform用A:“Application.StartupPath”:获取当前应用程序所在目录的路径,最后不包含“\”;B:“Application.ExecutablePath ”:获取当前应用程序文件的路径,包含文件_c获取当前程序的路径

分布式事务解决方案-TCC-程序员宅基地

文章浏览阅读233次。分布式事务解决方案-TCC什么是TCC事务TCC是Try、Confirm、Cancel三个词的缩写,TCC要求每个分支事务实现三个操作,预处理Try、确认Confirm、撤销Cancel。Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与Try相反得cao操作的回滚操作。TM首先先发起所有的分支事务的try操作,任何一个分支事务的Try操作执行失败,TM将会发起所有的分支事务的Cancel操作,若Try操作全部成功,TM将会发起所有分支事务的Confirm操作,其中Co

推荐文章

热门文章

相关标签