STM32的boot和app

系列文章目录

提示:STM32系列芯片应用学习,所遇问题的解决过程记录
例如:串口升级篇 


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

STM32F765VGT6程序升级


提示:以下是本篇文章正文内容,下面案例可供参考

一、期望目标

能够通过串口、CAN口等外部接口通信方式,更新用户应用程序,方便产品批量化的固件升级和产品升级维护。

二、STM32中程序的组织和执行过程

1.一般程序的执行过程

STM32的内部(FLASH)地址起始于0x08000000,一般情况下,程序就从此地址开始写入。

STM32的微控制器,其内部通过一张“中断向量表”来响应中断。程序启动后,将首先从“中断向量表”取出复位中断向量执行复位中断程序完成启动,而这张“中断向量表”的起始地址是0x08000004,当中断来临,STM32的内部硬件机制亦会自动将PC指针定位到“中断向量表”处,并根据中断源取出对应的中断向量执行中断服务程序。

在上图中,STM32在复位后,先从0x08000004地址取出复位中断向量的地址,并跳转到复位中断服务程序,如图标号①所示;

在复位中断服务程序执行完之后,会跳转到我们的main函数,如图标号②所示;

而我们的main函数一般都是一个死循环,在main函数执行过程中,如果收到中断请求(发生中断),此时STM32强制将PC指针指向中断向量表处,如图标号③所示;

然后根据中断源进入相应的中断服务程序,如图标号④所示;

在执行完中断服务程序以后,程序再次返回main函数执行,如图⑤所示。

试想一下,如果没有中断情况,程序会在MAIN中一直循环执行下去(假设第一次跳转是系统所为,且能正常跳到main中),由于有了中断,程序必须跳转,如果能够通过某种方式,使得程序每次跳转都成功无误,程序也会正确的执行下去。为什么要如此强调中断跳转成功,因为,在后续的升级方案中,就是设置其跳转成功就OK的。

想象一下,我们要对程序升级,并且升级后的程序要正确运行。1、升级过程,芯片本身帮不了你,即升级过程也是开发者自己写的程序来完成的,所以这个地方有一份程序;2、用户应用程序,即真正实现功能的程序,这也是一份程序;这两份程序都在芯片中,在不同情况下,运行不同的程序;

在升级方案里,有把以上两份程序看做一个整体,在开发工程里只用一个工程来开发,然后升级的时候,擦除特定区域,更新特定区域(一般来说是用户应用程序区域),工程本身的中断跳转没有改变,程序能正常运行;

在我的方案里,我把上述两份程序,当做两个工程来开发,即是常见的BOOT区和APP区;正常运行APP区域程序就要用到我上述提到的中断正常跳转。

两个程序都是独立的程序,都有栈顶地址、复位中断向量等;BOOT在程序开始的地址,即0800 0000,运行,而APP在另外一个地址,假定是0808 0000
————————————————
版权声明:本文为CSDN博主「Car12」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010261063/article/details/124234496

2.升级设置

我们需要有几个设置:

1、在BOOT中,能够跳转到APP区域地址中去,要不然程序一直在BOOT中运行,而APP得不到运行;

        pFunction JumpToApplication;

                /* Jump to user application */
                /*中断向量表第二项存放复位地址*/
                JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
                /*指向复位地址*/
                JumpToApplication = (pFunction) JumpAddress;

APPLICATION_ADDRESS 就是0808 0000

2、在编译APP时将程序起始地址设置为0808 0000:


3、在APP中设置中断向量偏移地址

 

 这个很重要,因为中断跳转就是基址+偏移量,我们正常程序(即类似BOOT一样的程序,从开始地址0800 0000运行的程序)其偏移量默认是0,所以它的跳转每次都跳到0800 000那个地方,但是有了偏移量,它就能跳到APP开始的那个地址,则APP就能正常运行。

总结

1、boot中设置跳转;

2、APP编译地址改变;

3、APP中设置中断偏移量;

4、在STM32F1XX中,中断偏移量设置:

  • 4
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值