基于STM32F4和RT-Thread通用BootLoader使用经验

发布者:自由漫步最新更新时间:2024-08-27 来源: elecfans关键字:STM32F4  RT-Thread 手机看文章 扫描二维码
随时随地手机看文章

硬件资源

正点原子stm32f407zgt6探索者开发板,片上Flash(ROM)大小为1024KB,RAM大小为192KB,板载一个SPI Flash W25Q128。

BootLoader配置

根据官方文档:

https://www.rt-thread.org/document/site/application-note/system/rtboot/an0028-rtboot/

(公号不支持外链接,请复制链接到浏览器打开) BootLoader的基本配置如下,加密压缩的配置可以不选。

上述的分区表以及bootloader所占空间可以用下面的图表示,偏移地址的概念为从0x08000000开始偏移。 flash空间的前128KB用来存放Bootloader固件,因此排在BootLoader之下的download分区的起始地址为0x08020000。

生成Bootloader固件,固件会自动发送到自己的邮箱。

烧录Bootloader

将得到的Bootloader固件通过STM32 ST-LINK Utility.exe 烧录到片上flash。要注意的是,烧录的起始地址为0x0800000。

关于ST-Link知识,推荐阅读我的文章:【专栏】ST-Link资料

烧录完成后串口工具会输出以下信息:

要注意的是,其中的NJUST字样是自定义的,可以在bootloader生成的页面自行定义。

两个CRC32的error信息可以忽略,因为此时的flash中并没有包含分区表,分区表信息需要我们通过烧录app程序完成初始化配置。

FAL分区表中的onchip_flash为片上flash空间,起始地址为0x08020000,扇区大小为128KB。

烧录app程序和打包

参考官方文档:

https://www.rt-thread.org/document/site/application-note/system/rtboot/an0028-rtboot/

烧录出厂固件

出厂固件的keil编译相关设置同app程序一样,中断向量表偏移地址也是一样的。

在制作出厂固件app_factory时,需要将keil生成的bin用ota打包器进行打包,打包器的固件分区名为app,固件版本为1.0.0,然后将打包生成的app_factory.rbl改后缀名为app_factory.bin。最后使用st-link-utility将修改后缀名的app_factory.bin烧录到Flash的0x08060000地址即可。

要注意,不可以直接把keil编译的bin文件直接下载到factory分区,因为此时的bin并没有app的头信息,这个头信息需要由OTA打包器打包后才能添加。

恢复出厂固件的方法:按住WK_UP按键的同时按下复位按键,保持WK_UP按键处于按下状态10秒,即可进入恢复状态。


关键字:STM32F4  RT-Thread 引用地址:基于STM32F4和RT-Thread通用BootLoader使用经验

上一篇:关于STM32的四类嵌入式软件 (库)
下一篇:STM32G474 逐波限流保护的实现

推荐阅读最新更新时间:2026-03-24 11:10

AVR通用Bootloader折腾记
最近做一个新东西, 正好手边有ATMega128的芯片, 资源也足够用, 于是决定就用它了. 考虑到以后PCB会装到外壳中, 导致软件升级困难, 而正好在电路中会用到蓝牙串口, 于是决定使用串口更新程序. 于是乎在网上找到”AVR通用Bootloader“, 打算折腾一番. 不得不说作者很牛X, 考虑的也很周到, 特意制作了一个兼下载与图形化配置的软件, 直接生成配置头文件, 和编辑的批处理文件, 相当方便, 所以这一部分很简单, 配置了一下, 编译, 然后使用ISP下载到MCU中, 嗯, 别忘记还要配置一下Boot相关的熔丝. 完成之后写了一个简单的程序使用Bootloader下载到芯片中进行测试. 程序的内容很简单, 就是让一
[单片机]
RT-Thread nano在STM32F103上的移植指南
准备工作 裸机工程模板 移植之前需要准备一个STM32裸机工程,这个裸机工程要能使用串口发送数据、在串口中断中接收数据。因为后面移植之后主要用串口来验证程序。 RT-Thread 准备 使用的是3.1.5版本。下载地址:RTT官网 下载完成后,我们打开跟我们最相近的工程模板:stm32f103-msh 打开工程后,打开rtconfig.h的文件路径,把rtconfig.h复制到裸机工程中(如下图)。按这个方法,再把board.c复制到裸机工程中。 最后把RT-Thread中,除了bsp文件夹全部拷贝到裸机工程。 RT-Thread添加到工程 接下来要把复制过来的文件添加到工程,需要添加到工程的文件如下:
[单片机]
<font color='red'>RT-Thread</font> nano在STM32F103上的移植指南
STM32 CM3/CM4 ------ startup.s 启动文件分析 ------ GCC RT-Thread Studio 版本
startup.s 功能 startup.s 文件定义了向量表,包含栈初始值和各个中断服务函数指针。 芯片一上电,自动设置SP,PC,然后执行复位中断:   设置栈顶寄存器的值 --- 多余,芯片一上电自动设置了   data段的数据从 flash 拷贝到 SRAM   bss段位于SRAM,初始化为0   执行 SystemInit,初始化时钟,设置SCB- VTOR的值为向量表起始地址   跳转到 entry 函数,entry() 函数添加一些我们要在 main() 函数之前执行的代码,entry() 函数的最后调用 main()。 向量表 在 startup.s 内,定义了一个向量表,由链接脚本决
[单片机]
STM32 CM3/CM4 ------ startup.s 启动文件分析 ------ GCC <font color='red'>RT-Thread</font> Studio 版本
基于RT-Thread设备运行数据分析预警系统
概述 我们在工厂里,特别是生产重型机械的工厂里工作过的人都知道,当我们需要吊起几百斤到到几十吨的重物时,一般都会用到起重机,常见起重机又分为桥式起重机、门式起重机等,都具有自身运行轨道的起重机设备,他们的运行轨道一般根据车间的长度来安装和车间的宽度来设计制造,相当于每台起重设备都是定制的。常见的起重机有双梁和单梁,一般10吨以下多以单梁和小型双梁为主,10吨到20吨以小型双梁为主,20吨以上以双梁为主,同时还配有司机室。 由于轨道很长,所以是由多根轨道拼接而成,连接处会有缝隙,如果缝隙过大会造成起重机运行过程出现剧烈抖动,如果轨道不平,起重机运行时就会有上坡下坡的情况。设备会增加自身负载而影响运行安全。为了实时监测设备运行状态,需
[单片机]
基于<font color='red'>RT-Thread</font>设备运行数据分析预警系统
解析使用RT-Thread Studio指定特殊函数加载到RAM的方法
用ITCM给ART-Pi(STM32H7)代码加速 , 这篇文章就提到了,将特殊的函数(如,算法相关)加载到速度更快的 ITCM,但是这篇文章中使用 GCC 编译器的时候,无法保证在断电复位后 RAM 段的代码不消失,所以本文来研究这个问题。 众所周知,RAM 是掉电丢失数据的,为了做到产品中也能使用这种操作,就需要将代码编译到 ROM 中,然后启动的时候,从 ROM 拷贝到 RAM 当中,知道了原理,具体如何操作呢? 二、RT-Thread Studio 指定特殊函数到RAM的办法 为了实现这种操作,需要知道可执行程序的生成过程,预处理- 》编译 -》汇编-》 链接,可以从这几个地方去着手解决这个问题。RTT Studi
[单片机]
利用RT-Thread与MQTT实现智慧班车管理系统的设计
项目硬件开发总结 下面从开发者的角度对本项目进行总结:(因为不是写paper所以比较随意哈~) 项目采用的IoT架构,底层是STM32L475VET6潘多拉开发板+RT-Thread,对于RT-Thread的资源使用情况在论文中也有提到,这里直接截个图: RT-Thread使用情况详情 内核层的信号量、邮箱、消息队列等机制是用于线程同步以及线程通信的,中断一开始是用于检测PIN设备的IRQ,但是后来去掉了,原因是不好用,确实是用中断的时候自己懒得调试了,程序运行会出现很多问题,所以直接开了个线程,这个后面会讲到。 设备与驱动层中I/O设备模型是最基本的设备Model,所以不再赘述。UART设备是值得一提的哈。因为这个项目需要用
[单片机]
利用<font color='red'>RT-Thread</font>与MQTT实现智慧班车管理系统的设计
基于RT-Thread的RoboMaster电控框架(三)
背景 使用的开发板为大疆的 RoboMaster-C 型开发板,基础工程为 rt-thread bsp stm32f407-robomaster-c BMI088模块开发 BMI088 为 robomaster-c 开发板上集成的6轴imu,在此为提高速度陀螺仪和加速度计均使用使用 SPI 通讯方式, 添加 SPI 通信 API 首先将飞控程序中针对 RT-Thread 的 SPI 设备驱动封装的 SPI 读写函数借鉴过来: #define SPI_DIR_READ 0x80 #define SPI_DIR_WRITE 0x00 /** This function write a 8 bit reg. @param devic
[单片机]
RT-Thread中Lan8720和lwip协议栈的使用
开发环境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,stm32f4的资源包为0.2.2,Agile Modbus软件包版本为v1.1.2。新建选择芯片工程。 修改工程使用外部晶振,可参考第一篇文章 rt-thread studio新建stm32f407工程 。 查看野火工程的资料,可知道芯片的使用引脚为: PG11 : RMII_TX_EN; PG13 : RMII_TXD0; PG14 : RMII_TXD1; PC5 : RMII_RXD1; PC4 : RMII_RXD0; PA7 : RMII_CRSDV; PA1 : RMII_REF_CLK; PC1 : RMII_MD
[单片机]
<font color='red'>RT-Thread</font>中Lan8720和lwip协议栈的使用
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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