×

如何在STM32中编写我们的自定义引导加载程序

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2023-06-21

刘勇

分享资料个

STM32 MCU中的Bootloader实现

在这里,我已经解释了如何在 STM32 中编写我们的自定义引导加载程序。

A bootloader is an application whose primary purpose is to allow the systems software that has to be updated without using any specialized hardware such as a JTAG programmer.

The bootloader manages the system's images.

It receives new program information externally via some communication means and writes that information to the program memory of the processor.

Bootloader Structure

The above figure shows a Bootloader for the microcontroller to program it. A bootloader is an optional way to program the application firmware onto the device.

STEP 1:

Creating New Projects

We are going to create two separate projects for implementing a bootloader using STM32CubeIDE. If you are a beginner, Here is an example to create a new project in stm32CubeIDE.

L0_APP1 Project - Bootloader

L0_APP2 Project - User Application

pYYBAGSAY8-AKxxNAACy1DQK9nc637.png

STM32CubeIDE 中的项目

第2步:

分离闪存

我们需要根据 MCU 内存布局将内存部分分开。就我而言,我使用的是 STM32L0 微控制器。单击此处获取数据表,并在此处找到STM32L0 的硬件用户手册。

我把它从总的闪存大小分成了两部分。

 

1. Bootloader            0x8000000 - 0x08008FFF
2. User Application      0x8009000 - 0x0802FFFF

 

下图描述了闪存映射,

pYYBAGSAY9GAGZkMAACnsOVF9tM929.png

闪存映射

第 3 步:

将此部分分离到源代码中。

将此源添加到引导加载程序和用户应用程序以切换内存地址

 

uint32_t go_address = *((volatile uint32_t*) (MEM_ADDR+ 4));
void (*jump_to_app)(void) = (void *)go_address;
jump_to_app();

 

在我的例子中,内存地址,

引导加载程序,

 

#define MEM_ADDR         0x08009000

 

用户申请

 

#define MEM_ADDR         0x08000000

 

为各自的项目添加以上内容。MACRO

步骤4:

Changing the Vector Table OFFSET for User Application as per your separated memory sections. Bootloader OFFSETremains the same,

To change the OFFSETplease go to the below file,

L0_APP2\Src\system_stm32l0xx.c

VECT_TAB_OFFSET

STEP 5:

Change the ORIGIN to keep the bootloader section erasable while we are uploading the User application program from STM32CubeIDE.

To change the ORIGIN, please go to the below file,

L0_APP1 \STM32L073RZ_FLASH.ld

STM32L073RZ_FLASH.ld

connect the board to your computer and flash the application source code into your STM32 microcontroller one by one.

Here we go we are done with all changes. we can write our bootloader application program in the L0_APP0 project.

It is possible to write two different applications and able to switch alternatively depending on user applications.

我创建了两个基本项目。我想这可以让您很好地理解引导加载程序的概念。

最后,这是切换在同一个 STM32 微控制器中运行的两个应用程序的输出。

输出

NOTE :在从一个应用程序切换到另一个应用程序之前,请确保禁用所有 ISR 并使用外围设备

 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !