怎么使用stm32写IAP的bootloader和APP

发布者:meilidaowl最新更新时间:2017-09-11 来源: eefocus关键字:stm32  IAP  bootloader  APP 手机看文章 扫描二维码
随时随地手机看文章

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();

         }

}

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

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

 

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

Stm32的中断重定向比较简单,因为它有一个专用的寄存器

         NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x9800);

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

 

6、             App中怎么生成bin文件

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

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

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

 

 

 

总结:

Bootloader里面主要是

1、设置bootloader和app的空间

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

3、实现跳转

App里面主要修改的地方是

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

2、         重定向中断向量

3、         生成bin文件

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


关键字:stm32  IAP  bootloader  APP 引用地址:怎么使用stm32写IAP的bootloader和APP

上一篇:STM32F407 RTC 配置理解与总结
下一篇:STM32F407的ADC单次转换

推荐阅读最新更新时间:2024-03-16 15:36

基于STM32的物联网环境监测系统
本应用笔记以STM32单片机作为控制和数据处理的单元,使用AHT10、BH1750和BMP280传感器去监测周围的环境参数,在LCD屏完成传感器数据和相关信息的显示。 同时,采用了无线模组与单片机之间进行数据交互。当无线通讯模组成功连接网络,并接入机智云物联网云平台时,用户可以通过登录物联网云平台后台查看传感器上报的数据和进行远程控制。 01 总体方案设计 本环境监测系统设计选取了控制和数据处理能力强的ST32单片机作为核心部件。使用温湿度传感器对周围环境中的温度与湿度监测,选取高精度的光强度传感器完成对周围环境的光照强度的测量,对于气压数据的测量,将选取高精度的气压传感器完成工作。 该系统使用液晶显示屏幕完成对
[单片机]
基于<font color='red'>STM32</font>的物联网环境监测系统
AVR之BOOTLOADER技术详解
ATmega128具备引导加载支持的用户程序自编程功能(In-System Programming by On-chipBoot Program),它提供了一个真正的由MCU本身自动下载和更新(采用读/写同时 Read-While-Write 进行的方式)程序代码的系统程序 自编程更新的机制。利用AVR的这个功能,可以实现在应用编程(IAP)以及实现系统程序的远程自动更新的应用。 IAP的本质就是,MCU可以灵活地运行一个常驻Flash的引导加载程序(Boot Loader Program),实现对用户应用程序的在线自编程更新。引导加载程序的设计可以使用任何的可用的数据接口和相关的协议读取代码,或者从程序存储器中
[单片机]
Jlink的三线制SWD方式连接STM32芯片无法识别的解决方案
网上找到此文章解决了j-flash只能连接后不能烧录的问题,希望遇到相同问题的小伙伴,可以用同样的办法解决: 前段时间,做了一块板子,调试接口只留了三个口SWD、SWCLK、GND,在使用Jlink的SWD方式调试的时候发现无法连接。使用ST-link的时候可以连接,无奈楼主的ST-link的链接方式相当的不可靠,时而能识别时而不能识别:当然我的ST-link是山寨版的。 那么问题来了:为什么通过20针全部连接的方式可以调试,而三针的方式就不行了呢? 古人云知之为知之,不知Google之,Google不让用,那就问度娘好了。 通过查阅网上资料发现,jlink的20针,不光有调试的功能还有供电和检测电压的功能。 下面是jl
[单片机]
Jlink的三线制SWD方式连接<font color='red'>STM32</font>芯片无法识别的解决方案
基于STM32四轴飞行器参考电路设计
四轴飞行器是一种利用四个旋翼作为飞行引擎来进行空中飞行的飞行器。进入20世纪以来,电子技术飞速发展四轴飞行器开始走向小型化,并融入了人工智能,使其发展趋于无人机,智能机器人。 四轴飞行器不但实现了直升机的垂直升降的飞行性能,同时也在一定程度上降低了飞行器机械结构的设计难度。四轴飞行器的平衡控制系统由各类惯性传感器组成。在制作过程中,对整体机身的中心、对称性以及电机性能要求较低,这也正是制作四轴飞行器的优势所在,而且相较于固定翼飞机,四轴也有着可垂直起降,机动性好,易维护等优点。 系统方案 本设计采用STM32F4作为核心处理器,该处理器内核架构 ARM Cortex-M4,具有高性能、低成本、低功耗等特点。 设计总
[单片机]
基于<font color='red'>STM32</font>四轴飞行器参考电路设计
一种基于STM32的光功率计的设计与实现
1、引言 针对目前市场上传统的光功率计动态范围小、测试精度低、非线性误差明显、档位切换速度慢等缺点,设计了一款基于STM32的高精度光功率计,采用先进的大动态波长响应范围的INGAAS-PIN光电探测器,配合使用ADI公司的光电前置放大器AD795,TI公司的24位模数转换器ADS1232和美信公司的高速多路模拟开关MAX4051进行系统的设计,利用STM32控制放大量程增益自动切换技术,消除光电探测器在同一波长不同光强下对光的非线性响应导致的测量误差,可以大大提高光功率计测试的精度和可靠性。 2、系统工作原理 系统的原理框图如图1所示,INGAAS-PIN光电探测器将检测到光信号转变为电流信号,进行I/V(电流电压)变换后输
[单片机]
一种基于<font color='red'>STM32</font>的光功率计的设计与实现
STM32中断优先级(默认和不默认情况)
可能对于刚接触抢占式优先级和响应优先级的人来说学习STM32的中断优先级有点障碍,这里先介绍下优先级: 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。 STM32 可以支持的 68 个外部中断通道,已经固
[单片机]
<font color='red'>STM32</font>中断优先级(默认和不默认情况)
苹果公布App Store2021精选榜单:LOL获得年度iPhone游戏奖
12月2日下午消息,苹果公司今日公布了App Store年度精选游戏和应用。往年这场活动被称为Best of(年度最佳),今年成为了App Store Awards。 App Store年度精选   不管名称怎么变,我们都期待看到苹果推荐的年度App,并从中感受到应用的发展趋势,以及App对于生活的丰富与改变。今年,也就是2021年度,我们看到App的新趋势是——连接(这一年中有些App让你我的联系更加紧密)。   开发者们如何利用新技术、新手段,通过一款款精心制作的App,让我们的生活变得丰富多彩?今天我们就和Craft(一款文件及笔记编辑器)、LOL(Moba类手游)和Canva(在线设计工具)的开发者聊了聊,看看这背后
[手机便携]
STM32操作访问内部Flash
目录: 1、STM32 FLASH操作流程 2、Flash基本知识点 3、OK,上干货,上代码 ------------------------------------------------------------------------------------------------- STM32中存储区分为:随机存取存储器RAM和只读存储器ROM。 其中: RAM为常说的内存,比如手机的2G内存4G内存等,就是程序跑起来的时候所占用的存储空间,特点是掉电数据丢失。 ROM为常说的硬盘,比如手机的64G和128G等,可以简单的理解为硬盘的存储空间,特点是掉电数据不丢失,所以又叫“非易失性存储器件”。 R
[单片机]
<font color='red'>STM32</font>操作访问内部Flash
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved