STM32单片机bootloader扫盲

您所在的位置:网站首页 miform怎么读发音 STM32单片机bootloader扫盲

STM32单片机bootloader扫盲

2024-07-16 02:19:49| 来源: 网络整理| 查看: 265

STM32单片机BootLoader扫盲 BootLoader和APP之间的关系

APP就是平时写的单片机上的应用程序,而BootLoader本质上和APP一样,也是平时写的应用程序。BootLoader只不过是拥有从外部接收数据,更新Flash(也就是APP),跳转至APP功能的特殊APP罢了。

以STM32F103为例,如果没有BootLoader,flash分布就如下图左半部分。如果有BootLoader,就如下图右半部分,将flash分为两部分(这里举例用0x800 4000做分界线),存储了两个应用程序(BootLoader和APP)

在这里插入图片描述

如何从BootLoader跳转到APP

从外部接收数据,更新Flash,普通的APP也会有这样的需求。不常见的也就是从BootLoader跳转到APP这个功能了。STM32 单片机启动流程中介绍了单片机上电后的启动流程,其实也就主要干了两件事:

将栈顶位置加载到MSP寄存器中将复位中断服务函数的入口地址给PC寄存器

然后单片机执行复位中断服务函数,在复位中断服务函数中设置中断向量表的偏移地址,准备C环境,最后跳转到main()函数。同理,从Bootloader跳到APP也需要干这两件事情,只不过上电时是单片机自动加载的MSP和PC,而从Bootloader跳到APP则需要我们编写函数进行跳转。

下面是STM32 跳转到APP的具体函数,在BootLoader函数中调用即可跳转到APP_ADDR,如果该地址存放了APP的bin文件则会运行APP的复位中断服务函数(一定要记得在APP中修改中断向量表偏移地址,如APP中不修改则默认使用BootLoader的中断向量表,APP中发生中断时就会去查BootLoader的中断向量表,从而调用BootLoader的中断服务函数),进而运行APP的main()函数。同理,APP跳转到BootLoader,修改跳转地址 APP_ADDR 为BootLoader地址(这里为0x8000000)即可实现.

/* 开关全局中断的宏 */ #define ENABLE_INT() __set_PRIMASK(0) /* 使能全局中断 */ #define DISABLE_INT() __set_PRIMASK(1) /* 禁止全局中断 */ #define APP_ADDR 0x8004000 /* APP地址 */ /* ********************************************************************************************************* * 函 数 名: JumpToApp * 功能说明: 跳转到APP * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ void JumpToApp(void) { void (*SysMemBootJump)(void); /* 声明一个函数指针 */ __IO uint32_t AppAddr = APP_ADDR; /* APP地址 */ /* 如果初始化了外设,需要反向初始化外设 */ /* 设置所有时钟到默认状态,使用HSI时钟 */ HAL_RCC_DeInit(); /* 关闭滴答定时器,复位到默认值 */ SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; /* 关闭全局中断 */ DISABLE_INT(); /* 关闭所有中断,清除所有中断挂起标志 */ for (uint32_t i = 0; i } } 常用的BootLoader+APP框架

单片机升级的原理大致是:收到升级指令——>MCU复位或者跳转到Boot程序区——>擦除对应的Flash区域——>获取APP数据——>写入FLASH数据——>校验——>跳转到APP应用程序区

单APP

在这里插入图片描述

单APP方案将Flash分成了三个部分,Boot+APP+Config,Boot负责更新APP;APP实现程序的主要功能;Config区域主要是存放APP是否完整的标志位,协助Boot判断是否要跳转到APP。单APP有个明显的缺点:开始升级时就将原来的APP擦除了,如果升级中断则会一直停留在BootLoader,直至APP升级完成。

在这里插入图片描述

双APP

在这里插入图片描述

双APP方案将Flash分成了四个部分,Boot+APP1+APP2+Config,Boot负责更新APP;APP1实现程序的主要功能;APP2相当于缓冲区,Boot升级APP时,会将接收到的APP数据包写入APP2,当APP数据包全部接收完毕,再将APP2搬运到APP1,这样就避免了单APP方案,升级中断一直停留在BootLoader的尴尬; Config区域主要是存放APP1是否需要升级的标志位,协助Boot判断是否要将APP2的内容搬运至APP1。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1h8UZhVP-1634826311355)(https://note.youdao.com/yws/res/573/WEBRESOURCE9f58c37b82b61bd1f9cb2807c2d1055d)]

STM32系统BootLoader

STM32自举具体信息可以去官网查看手册AN2606 如果BOOT0为高电平,复位后将从系统存储器自举(系统存储区存放着系统bootLoader,出厂时,官方固化在单片机中的一段代码,用户无法修改的。在STM32中,常用的串口下载,DFU就是系统bootLoad中的功能)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kkPeB2VH-1634826311356)(https://note.youdao.com/yws/res/3/WEBRESOURCE1bf266619a522750a44281bafa410193)]

使用系统bootLoader需要在复位时调整BOOT0管脚的电平,使用起来还是比较麻烦的。系统BootLoader也是FLash中的一段程序,只不过是官方烧录的不可修改的,我们可以利用前面说的跳转到APP的方法跳转到系统BootLoader,这样就可以不修改BOOT0管脚电平,直接进入系统BootLoader,利用系统BootLoader的下载功能下载更新程序。

在这里插入图片描述

在手册中的闪存章节,找到系统BootLoader的起始地址0x1FFF F000,将APP_ADDR宏定义改为系统BootLoader地址即可跳转到系统BootLoader

/* 开关全局中断的宏 */ #define ENABLE_INT() __set_PRIMASK(0) /* 使能全局中断 */ #define DISABLE_INT() __set_PRIMASK(1) /* 禁止全局中断 */ #define APP_ADDR 0x1FFFF000 /* 系统bootloader地址 */ /* ********************************************************************************************************* * 函 数 名: JumpToApp * 功能说明: 跳转到APP * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ void JumpToApp(void) { void (*SysMemBootJump)(void); /* 声明一个函数指针 */ __IO uint32_t AppAddr = APP_ADDR; /* 跳转地址 */ /* 如果初始化了外设,需要反向初始化外设 */ /* 设置所有时钟到默认状态,使用HSI时钟 */ HAL_RCC_DeInit(); /* 关闭滴答定时器,复位到默认值 */ SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; /* 关闭全局中断 */ DISABLE_INT(); /* 关闭所有中断,清除所有中断挂起标志 */ for (uint32_t i = 0; i } }

从APP跳转到系统BootLoader后,利用STM32CubeProgrammer工具更新程序 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭