Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Bootloader
qboot
STM32H743
为STM32H743VIT6开发板制作一个简单的bootloader
发布于 2021-07-27 10:17:32 浏览:3218
订阅该版
开发环境 Rtthread studio 内核版本 4.0.3 参考链接 rt thread studio使用QBOOT和片外flash实现OTA升级_love潇潇熊的博客-CSDN博客 https://blog.csdn.net/qq_25186745/article/details/113512172 首先,通过rtthread studio创建一个新项目,并进行一些基础配置,比如调试串口,时钟树配置,MPU配置等。 Board.h文件的修改,主要是修改ROM_SIZE和RAM_START ![image.png](https://oss-club.rt-thread.org/uploads/20210727/3afb6b81df59b8a896c7e8816b8f6191.png.webp) 链接脚本也进行相应的修改 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/a4adad0abba348f9ae79f9310cae5917.png) 然后是修改drv_clk.c文件,将默认的HIS配置改成HSE配置 然后是添加drv_mpu.c文件,设置MPU和cache ![image.png](https://oss-club.rt-thread.org/uploads/20210727/287d158c6a30af9dab6df8387756e39a.png.webp) ![image.png](https://oss-club.rt-thread.org/uploads/20210727/0055fd574dcc74590781562eabca6cdf.png) 注释掉main.c文件中的内容,只留下return RT_EOK; 然后编译一次,没有问题则可以下载到板子上,这就是一个基础工程了。下面在此基础上添加spi驱动和flash驱动。 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/ac16cfdbbccd397fe72bf86cfe7a93b8.png) 这里使用SFUD来驱动SPI_FLASH,具体配置如下 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/d98604e6686bd5747b1c4d5254cd50cb.png) 记得要修改board.h文件,增加BSP_USING_SPI1的宏定义,因为我这里将SPI FLASH硬件连接在SPI1上,所以使能了SPI1,如果是接在其他硬件SPI上则做相应的修改 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/8b251062c10df64281a94b116bc0fa9f.png.webp) 要在board.c文件中添加SPI1的硬件HAL初始化代码 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/e51a7dc1ea4b72b0d8f64ebc8c1c8d64.png.webp) 然后在项目中新建一个c文件,目的是用来上电初始化spi flash的,这里我自命名为drv_spi_flash.c,内容如下: ![image.png](https://oss-club.rt-thread.org/uploads/20210727/f186880e9ff9d343939c1010adbde048.png.webp) 之后编译一次,没问题就下载到板子上,复位后见到下面的打印消息,则说明spi_flash成功识别到并初始化成功。 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/3e6123fd84119f0fae6f109845892470.png) 接下来在项目中添加fal软件包,并配置如下: ![image.png](https://oss-club.rt-thread.org/uploads/20210727/f80f7ff3031725b58db9da24d67391fd.png) 然后在项目中添加fal_cfg.h文件,定义分区表,分区表中定义了内部flash的分区,但是至此我们还没有使能内部flash的使用,因此会编译不通过。 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/5efc6b3034d40bc750aa74ddb0d82380.png.webp) 那么下面就来看看如何使用内部flash,首先要到board.h文件下,打开BSP_USING_ONCHIP_FLASH的宏定义 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/ea668c1d934ec6f0824220a4ea3d47e9.png) 然后在项目中添加drv_flash_h7.c,这个文件可以在如下网址中找到 rt-thread/drv_flash_h7.c at master · RT-Thread/rt-thread · GitHub https://github.com/RT-Thread/rt-thread/blob/master/bsp/stm32/libraries/HAL_Drivers/drv_flash/drv_flash_h7.c 直接将文件复制到项目中即可 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/f0051f1d0ec7bafe5bfb5f570d0c52d7.png) 前面在分区表中使用到的const struct fal_flash_dev stm32_onchip_flash_128k 就是在这个文件中定义的 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/dd9758babac60207caeefa41cc59ba98.png.webp) 因为我使用的是H743vit6内部flash中间有2MB,所以这里定义了大小为 2*1024*1024 完成之后就可以编译一次项目了。编译通过之后下载到板子上,从打印输出内容就可以检查内部flash是否已经驱动成功。 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/17ba459d4ffda1d0e0df9931dfdea25b.png.webp) 从上面的图中看到内部和外部flash都已经初始化成功,并且分区也是按照我们的分区表进行了分区。如果要保险,还可以使用fal提供的串口调试指令进行验证。 Fal probe 用来挂载分区 Fal read 用来读取内容 Fal write 用来写入内容 可以先挂载分区,然后写入数据,再读取出来,如果读取的内容和写入的内容一致,就说明已经驱动成功。 接下来就是添加qboot软件包,添加之后会自动将关联的软件包也添加到项目中来。 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/5d724ea9ad9a1419c69f99f06c9a8c31.png) Qboot软件包的配置如下: ![image.png](https://oss-club.rt-thread.org/uploads/20210727/bdec7cab19495a2347335ae6b33a4474.png.webp) 正常配置之后保存,编译通过,下载到板子上,就可以看到打印内容了 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/f33b0d37e6c90f071e34ad2d88dcbec2.png.webp) 上电后会等待5秒,如果没有通过调试终端输入enter,则跳转到app。 好了,到目前位置,bootloader已经做好,下面来做一个简单的app项目。 项目非常简单,把drv_clk.c和drv_mpu.c设置的和bootloader一样,然后添加一个robot.h文件用于版本管理。 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/d057c69191289c4ee1de656776d9d7a5.png) 然后要修改board.h文件的ROM_START,这里的起始位置要和bootloader中的app分区起始位置相对应 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/f9ffa54e668aee73ec2fbe94538e376e.png.webp) 然后修改链接脚本 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/48a5d40f6060dc2a4a546cbe60d571ee.png) 然后在main.c文件中添加中断向量偏移 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/769c67c67d8aa63c95fac4c993f04628.png.webp) 然后编辑一下robot.h文件,这个是用来做版本控制的 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/2c9241a55495f6f6221ad086bb8dd743.png) 完成之后就可以编译项目了。 编译完成之后,可以到项目的debug目录下查看是否已经生成了rtthread.bin文件 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/b0c0e051efde3c212f81f6967099f341.png.webp) 接下来需要使用打包程序将bin打包一下,位于bootloader项目中的ota_downloader软件包内的tools目录 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/ad05463ba4eedc663aae6bd60986c9ed.png) 双击打开软件,选择要打包的固件,设置保存路径,固件分区名,版本号。注意版本号要和刚才robot.h文件中的版本号一致。这个版本号的作用是让bootloader判断是否需要进行ota更新的。然后点击打包。看到打包完成就表示成功了。 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/a89e2b7d2f3eae3032e9b2d5d3791ffe.png.webp) 接下来要做的就是将这个固件包通过串口ota的方式传送到开发板上。 重启开发板,在5秒内通过调试终端输入enter,会出现qboot提示符,输入ymodem_ota命令,进入ota等待固件 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/03088ca021fea20305afdc0ad4ab0dd6.png.webp) 通过串口调试工具发送文件 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/7c6f4fe8f7a56180c63d7153592b0a2c.png.webp) ![image.png](https://oss-club.rt-thread.org/uploads/20210727/c9862fd34f35a45c7a935ae920367ee9.png) 然后开始传输 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/d8888018af35cdb342cec46bb9f6403d.png) 传输完成之后会自动重启,而且重启之后会自动更新固件 ![image.png](https://oss-club.rt-thread.org/uploads/20210727/65aed991d78286879384fb883ed54787.png.webp) 至此,就完成了一个bootloader的制作。后续再研究一下如何加密。
8
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
adaphoto
这家伙很懒,什么也没写!
文章
25
回答
44
被采纳
5
关注TA
发私信
相关文章
1
Linux下通过USBTinyISP为Arduino开发板烧?写Bootloader
2
请教修改NVIC后RTT调度函数失效的问题[已解决 bootloader中打开了不必要的中断]
3
进入bootloader的方式探讨
4
求助:IAP里的APP使用的RTT,跳转后出错。[已解决]
5
有没有人在STM32F103上用UART IAP跑过RT-Thread?
6
想做网口的IAP远程升级,不知可不可行
7
IAP问题
8
[已解决]请教基于RTT的IAP程序切换到应用程序不成功的问题(基于STM32F4)?
9
stm32f4xx-----IAP移植APP程序需要注意的地方
10
在调试IAP网络升级遇到跳转之后bootloader程序网络不通
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
SFUD
msh
ulog
C++_cpp
MicroPython
本月问答贡献
出出啊
1518
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
549
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
3
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部