STM32 | OpenBLT Bootloader的使用分享

发布者:DreamyEclipse最新更新时间:2021-08-12 来源: eefocus关键字:STM32 手机看文章 扫描二维码
随时随地手机看文章

OpenBLT 简介

OpenBLT是一种开源引导加载程序,可以在任何微控制器上运行并使用任何类型的通信接口来执行软件更新,而无需专用的调试器硬件。

官网介绍页:

https://www.feaser.com/openblt/doku.php?id=homepage

源码下载页:

https://sourceforge.net/projects/openblt/files/

关于STM32的IAP、ISP、BootLoader相关的内容见往期笔记:

《STM32串口IAP分享》

《STM32的ISP下载的原理是什么呢?》


OpenBLT实践

下载源码,得到:

我们拿个ARMCM0_STM32G0_Nucleo_G071RB_Keil来跑跑看:

1、首先,编译OpenBLT BootLoader并使用ST-LINK下载OpenBLT BootLoader程序。OpenBLT BootLoader工程中我们需要可以关注如下信息:

boot程序的存放的flash的起始地址及最大size为8KB。实际占用为6.85kB:

所以这个size可以根据实际需要调整,稍微留出足够余量给boot程序即可。剩下的全给app。


2、编译APP demo程序。我们需要注意APP工程的如下信息:

APP的flash起始地址为0x8002800,下面使用MicroBoot工具下载app程序就是往这个地址写入app程序。


该app程序默认编译生成.axf后缀的调试文件,再经过formelf工具生成对应的.srec后缀的文件,这个文件就是我们要下载到板子里运行的可执行文件。这个后缀文件我们不经常看到。

.srec后缀的文件是一种FLASH格式的编程文件,是Motorola公司制定的一种烧写格式标准。SREC文件是描述地址与数据的文件。

其内容如:

(ps:关于hex文件、bin文件、axf文件的区别可移步至:《一文看懂hex文件、bin文件、axf文件的区别》)

3、使用openbltHost路径下的MicroBoot.exe工具下载.srec后缀的APP可执行程序:

然后点Browser去openbltTargetDemoARMCM0_STM32G0_Nucleo_G071RB_KeilProgbin路径下查找.srec后缀的文件,即可自动下载到板子里:

可以看到flash编程地址(下载地址)就是0x8002000地址。板子led闪烁,成功:

OpenBLT要点分析

无boot程序时,app程序存放于0x08000000,向量表也是位于这个地址。当存在有boot程序,我们的app程序在修改其起始地址的同时也要同步修改向量表地址。


第一种方法是修改SystemInit函数:

第二种方法是修改.sct文件。demo使用的就是第二种方法:

所以,如果我们的boot程序过大,在调整boot程序的预留空间大小的同时也要同步修改app这边的这些信息。


还需要注意的细节就是,boot程序的预留空间大小应为目标芯片扇区大小的整数倍,因为这是最小擦除单位。


如STM32G0系列的扇区大小为0x800(2 KB),boot程序的预留空间大小为0x2000(8KB),占4个扇区的大小。

关键字:STM32 引用地址:STM32 | OpenBLT Bootloader的使用分享

上一篇:STM32 | 请写一个函数输出如下波形
下一篇:STM32 | 分享一个简单易用的单片机裸机程序模板

推荐阅读最新更新时间:2024-11-13 15:18

STM32I2C通讯配置(硬件实现)——学习笔记(6-2)
文章内容根据野火学习教程进行整理,仅仅是学习记录。 开发板: 野火STM32F429-挑战者V2 官方固件库版本: STM32F4xx_DSP_StdPeriph_Lib_V1.8.0 这里以与EEPROM进行通讯的代码作为例子。 一、看电路图 1、要得知那些信息 从电路图上主要是要知道3点关键信息 I2C设备挂载在I2C1、I2C2、I2C3的哪一个总线上 SDA、SCL接的是哪两个GPIO I2C设备地址(有的是可以选择的,比如这个EEPROM) 2、挂在哪个I2C总线以及哪个GPIO 从电路图上可以看出: 挂载在I2C1上的 SDA接的是PB7引脚 SCL接的是PB6引脚 这个一般硬件工程师都会在电路
[单片机]
<font color='red'>STM32</font><font color='red'>的</font>I2C通讯配置(硬件实现)——学习笔记(6-2)
ARM嵌入式Bootloader实现自动升级
0 引言 作为一种32位的高性能、低成本、低功耗的嵌入式RISC(Reduced Instruction Set Computer)微处理器,ARM(Advanced RISC Machines)微处理器目前已经成为应用最广泛的嵌入式微处理器。和基于简单RTOS甚至没有使用任何操作系统的嵌入式程序设计相比,基于ARM- uClinux嵌入式系统的开发采用了成熟、高效、可靠、模块化、易于配置的操作系统,使程序具有良好的可移植性,博得众多嵌入式开发者的青睐 。嵌入式系统由硬件和软件两部分组成,软件部分主要包括Bootloader、内核和文件系统。但由于Bootloader与处理器的体系结构和具体嵌入式板级设备的配置密切相关,至今没
[单片机]
ARM<font color='red'>的</font>嵌入式<font color='red'>Bootloader</font>实现自动升级
关于STM32GPIO详细解析
一、GPIO的综合描述 stm32每一个GPIO端口拥有2个32bits的configuration寄存器(GPIOx_CRL,GPIOx_CRH),2个32bits的数据寄存器(GPIOx_IDR,GPIOx_ODR),1个32bits的set/reset寄存器(GPIOx_BSRR),1个16bits的reset寄存器(GPIOx_BRR)和1个32bits的Lock寄存器(GPIOx_LCKR)。 (一)每一个IO引脚都可以使用软件配置为以下几种模式: 1. 浮空输入 2. 带上拉输入 3. 带下拉输入 4. 模拟输入 5. 开漏输出——(此模式可实现hotpower说的真双向IO) 6. 推挽输出 7. 复用
[单片机]
STM32 CubeMX如何生成微秒(us)级延时
会自动在tim.c里面生成代码,如下: /* Includes ------------------------------------------------------------------*/ #include tim.h /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ TIM_HandleTypeDef htim17; /* TIM17 init function */ void MX_TIM17_Init(void) { htim17.Instance = TIM17; htim17.Init.Prescaler = 0; htim17.Init.CounterM
[单片机]
<font color='red'>STM32</font> CubeMX如何生成微秒(us)级延时
STM32 NIVC了解
用STM32做项目已经有段时间了,但是我忽然发现我对NVIC其实一点都不了解,所以今天补习了一下NVIC的知识以及我自己对NVIC中断优先级设置的了解,希望对大家有所帮助: 对于NVIC中断优先级的设置一直都不是很清楚; 具体函数如下: /* Configure one bit for preemption priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); // 优先级组设置 /* Timer2中断*/ NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; // 通道设置 NVIC_
[单片机]
stm32系统时钟配置问题
系统从上电复位到72mz配置好之前,提供时钟的是内如高速rc振荡器提供8MZ的频率,这个由下面void SystemInit (void)函数的前面的一部分代码来完成的和保证的: RCC- CR |= (uint32_t)0x00000001; #ifndef STM32F10X_CL RCC- CFGR &= (uint32_t)0xF8FF0000; #else RCC- CFGR &= (uint32_t)0xF0FF0000; #endif RCC- CR &= (uint32_t)0xFEF6FFFF; RCC- CR &= (uint32_t)0xFFFBFFFF;
[单片机]
STM32 | hex文件、bin文件、axf文件区别?
在STM32开发中,经常会碰到hex文件、bin文件与axf文件,这些都是可以烧写到板子里运行的文件。这三个文件有什么区别呢?在这之前,先来一起回顾一下C语言编译的过程: 编译的原理 在之前的C语言笔记《C程序的编译过程》中,有简单的分析了C程序编译的几个过程: STM32也是用C语言来开发,也会经过类似的编译过程,只不过我们常常用MDK或者其它IDE来编译,其编译过程如下: 例如,我们的LED程序编译过程如下: 在IDE中进行编译时,我们只需点击编译按钮即可完成这些过程,编译过程用到的工具(.exe文件)在IDE的安装目录下的某个文件夹下,比如我们这里用的MDK的编译工具路径: 一般这些IDE或者工具集的一些
[单片机]
<font color='red'>STM32</font> | hex文件、bin文件、axf文件<font color='red'>的</font>区别?
STM32时钟讲解(内部构架说明)
在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。 其实是四个时钟源,如下图所示(灰蓝色),PLL是由锁相环电路倍频得到PLL时钟。  ①、HSI是高速内部时钟,RC振荡器,频率为8MHz。  ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。  ③、LSI是低速内部时钟,RC振荡器,频率为40kHz。  ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。  ⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。 其中40kHz的LSI供独立看门狗IW
[单片机]
<font color='red'>STM32</font>时钟讲解(内部构架说明)
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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