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
STM32CubeIDE 中的项目
第2步:
分离闪存
我们需要根据 MCU 内存布局将内存部分分开。就我而言,我使用的是 STM32L0 微控制器。单击此处获取数据表,并在此处找到STM32L0 的硬件用户手册。
我把它从总的闪存大小分成了两部分。
1. Bootloader 0x8000000 - 0x08008FFF 2. User Application 0x8009000 - 0x0802FFFF
下图描述了闪存映射,
闪存映射
第 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条评论
快来发表一下你的评论吧 !