Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Bootloader
QSPI
STM32H743
关于bootloader跳转到app,app在QSPI中运行的问题总结
发布于 2020-12-18 11:25:54 浏览:4547
订阅该版
自己手头有一块H743的开发板,外挂了一个W26Q64的FLASH在QSPI总线上。虽然H743有2MB的内部FLASH空间,但是总是垂涎于QSPI总线上那8MB的空间,人性的贪婪啊!于是乎给自己挖了一个坑,要像H750那样,将app的代码放在qspi中,通过bootloader引导到QSPI上运行。没想到这个想法就给自己挖了一个坑,还不小的一个坑,花了不少时间和精力,总算是把坑填平了,现在分享出来,希望后面的小伙伴遇到问题的时候多一个思路解决问题。 首先,参考Art_Pi的参考项目,中的simple_bootloader,自己写了一个bootloader,这个很简单的一个bootloader,就是上电初始化之后跳转到QSPI执行app。然后再写一个APP,也是很简单,就是led循环闪烁+打印消息循环打印。再准备好外部SPI下载算法。然后将生成的bin都烧录进去,走你!完蛋,完全没有反应。 仔细一查,Art_Pi上使用的是W25Q128,我的板子上用的是W25Q64,自己又懒不想去改程序配置。就又找了另外一个裸机bootloader来试。 裸机bootloader和裸机app烧录进去,成功! 裸机bootloader和rtt_app烧录进去,不成功! 这是为什么呢?参考了几篇大佬的网文,慢慢找思路 [这个很重要] (http://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=1073902&page=1&authorid=530197) [这个很重要] (http://www.armbbs.cn/forum.php?mod=viewthread&tid=98231) 下面开始分析自己的问题 STM32H743VIT6开发板自带的简单裸机bootloader的时钟配置 主频率240MHz,HCLK3 120MHz,QSPI使用HCLK3时钟 ![image.png](/uploads/20201218/b8bd22627886e0bbf6219c6254e68084.png) 对应的代码中的QSPI初始化代码 ![image.png](/uploads/20201218/8bb19d85b03d8213c276a6e3379d9801.png) 这里的时钟应该是对应于前面main.c文件中的说明 ![image.png](/uploads/20201218/660a96f77d4f8f9156bd75fb38f1283a.png) 对应的裸机app的时钟配置 ![image.png](/uploads/20201218/3df1930ab2a73ff3d9ce47b919714331.png) 从这里可以看到QSPI的频率和bootloader不一样,但不会超过bootloader的设置 实验: 1.自己建的RTTHREAD项目,如果将drv_clk.c文件中的时钟配置函数配置的和bootloader一样,则可以正常跳转到QSPI运行。 ![image.png](/uploads/20201218/c2b0f30e4c94333b28f708af3a76474c.png) 2. 自己建的RTTHREAD项目,如果将drv_clk.c文件中的时钟配置函数配置的和app一样,则可以正常跳转到QSPI运行。 3. 自己建的RTTHREAD项目,如果将drv_clk.c文件中的时钟配置函数配置的主频480MHz HCLK3240MHz,则没办法跳转到QSPI运行,会出现hardfault错误。 结合网上大佬的贴子 ![image.png](/uploads/20201218/93187c6fb993924ddabd1194008ed647.png) 里面提到QSPI时钟默认选择HCLK3作为时钟源,因此bootloader跳转到app的时候,相当于一次复位操作,所以,最好就是bootloader和app都选择HCLK3作为QSPI的时钟源。应该能跳转成功。 另外再根据上面的实验,应该是app的时钟配置,最终得到的HCLK3的频率不能超过bootloader的配置。因为在app中实际上是不能去配置QSPI的,因为此时QSPI已经作为外挂FLASH来使用,跑代码。因此不能再去配置,否则可能引起错误。 但是让H743降频使用总觉得很别扭,放着480MHz不用,用240MHz,不行不行! 接下来尝试提高bootloader的时钟配置频率 现在修改bootloader的时钟配置,更改为下面的代码模式,将配置主频率为480MHz,HCLK3 240MHz QSPI还是使用HCLK3 240MHz ![image.png](/uploads/20201218/ae14c827c5f1f89104d2736c0cb54b77.png) 配置完成之后编译通过,下载后,没成功,debug一下之后发现出现hardfault 应该是此时的QSPI时钟没改,还是2分频,那就相当于是240/2=120MHz 尝试一下修改QSPI的初始化代码 ![image.png](/uploads/20201218/d6b4d1beaf3c568a0e3d485fe951c86b.png) 改成4分频,那就是240/4=60MHz,编译通过下载,成功跑起来。此时的APP设置主频还是前面的降频使用的。 尝试提高APP的主频率 ![image.png](/uploads/20201218/a7024687d19bf4931508444da9692a48.png) 编译通过下载,成功跑起! **所以,结论就是,bootloader中设置QSPI的时钟频率是多少,要根据具体的SPI型号来定。APP中的QSPI时钟频率不能高于bootloader中的配置**。
6
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
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
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部