关于正点原子H750北极星核心板的外部QSPIfalsh启动的BootLoader的上手指南

关于正点原子H750北极星核心板的外部QSPIfalsh启动的BootLoader的上手指南

一.前言

因为像 STM32H750、730 以及 7B0 这类单片机片内的 flash 空
间很小,通常只有 128KB,很多时候无法满足使用,所以需要将程序
下载到片外扩展的 flash 中。(虽然小,但是性价比高一些,外部flash较便宜)
现在目标就是将代码下载到外部芯片中(如W25Q64),但是一般的外部芯片还不行,因为读取的速度太慢了,影响性能发挥。
所以要使用QSPI(注:单片机和flash芯片都要相互支持才行)来进行,这样才能保证好的速率。

二.硬件平台讲解

北极星开发板图:

25b398ff45755b24760abfe4ef0b66d3

核心板图:

我们实验室买了很多这样的板子,但是没人学,不忍心资源的浪费好吧。我就在此基础上绘制了拓展板,这样也可以用来打电赛了。

8ef69dd65343be44da399b8d9ab3722b

电赛拓展板图:

V1.0拓展板设计说明:

PCB板使用两层板设计(嘉立创两层板可以选颜色,黑色沉金真的很好看好吧)
拓展板是将核心板的引脚引出,添加了按键和ADC、DAC的SMA接口引出。

还引出了串口1和串口4和STlink牛角管方便调试。
使用了HT7333芯片,将5V转为3.3V,引出参考电压引脚使用跳线帽选择参考电压3.3V or 0V

f7a0f9a1e4ed14ac21ba35013627c915 e9b7d487f8ec6795b0bc0739aac7d07b

三.原理讲解

BootLoader思路讲解

即内部代码控制指针运行外部芯片中已经下载的代码

所以有两份代码工程,一个下载到内部的负责初始化QSPI然后跳转。另外一个负责执行你需要的程序

image-20240915162000755

核心板原理图解释:

通过PCB原理图查看W25Q64的引脚配置

PB2----->CLK
PB6----->NCS
PF6----->IO3
PF7----->IO2

PF8----->IO0
PF9----->IO1

在BOOT文件里修改对应好自己的板子

image-20240915112139351

四.工程文件

Boot启动文件是源自反客(一般情况下都一次烧录后就不会再修改了)

App文件我已经移植成了cubemx的工程,集合了LTDC、触控、DMA2D、串口等,方便实验室的成员直接使用正点原子的7寸RGB屏幕。

仓库链接:Dian-Sai/ at main · xianshijun/Dian-Sai (github.com)

五.快速上手工程文件

内部Flash下载Boot引导程序

就像一般程序一样直接下载进去

image-20240915161656127

image-20240915161737039

image-20240915161809674

确认完这些配置后下载代码到芯片中,然后可以在串口一中看到情况

image-20240915162726143

添加外部下载算法

ATK-DNH750_QSPI_W25Q64JV.FLM是正点原子的核心板提供的外部下载算法。需要添加到keil里面才能选择。

1.找到桌面keilMDK的快捷方式,右键后选择“打开文件所在位置”

2.返回一级后找到ARM/Flash 将下载算法粘贴到此目录下(注:下载算法链接xianshijun/Dian-Sai: 记录我在实验室里写的重要代码 (github.com)

下载代码到外部Flash

image-20240915164658485

image-20240915164725748

image-20240915164809342

注意:此处留下一个外部下载算法

image-20240915164905142

检查一下,看看此处是否添加的这个代码,要求必须有这行代码

image-20240915165213813

最后全编译然后下载,就能正常运行了。

六.后言

此教程为电赛快速上手教程,UP断断续续地折腾了一个月。希望看客们留下关注和点赞。

### STM32H750 使用外部 Flash 存储扩展及编程方法 #### 初始化配置 对于STM32H750,由于仅有128K的内部Flash,在添加外部Flash之后能够把应用程序存储于外部Flash之中,而内部Flash则专门用于Bootloader的设计[^1]。通过这种方式不仅解决了程序存储空间不足的问题,还提高了系统的灵活性。 为了实现这一目标,首先需借助STM32CubeMX工具来生成初始化代码并确保QSPI接口被正确配置以便连接至外部Flash设备。这一步骤至关重要,因为它奠定了后续操作的基础框架。 ```cpp // 利用STM32CubeMX生成初始化代码片段示例 HAL_QPSI_MspInit(&hqpsi); HAL_QPSI_Init(&hqpsi, &qspi_init_structure); ``` #### 编程模式选择 当涉及到对外部Flash的操作时,可以选择不同的工作模式以适应具体应用场景的需求: - **状态轮询模式**:此模式下会定期查询外部Flash的状态寄存器直至特定标志位变为1(例如擦除或写入完成后触发)。这种机制允许CPU执行其他任务而不必等待长时间的Flash操作完成[^2]。 ```cpp while (HAL_OK != HAL_QPSI_GetStatus(&hqpsi, QPSI_FLAG_ENDOFPROGRAM)) ; ``` - **内存映射模式**:在此模式中,外部Flash会被映射到MCU的地址空间内,使得其看起来就像一片连续的片上RAM一样可以直接寻址访问。这对于频繁的数据交换场景非常有用,并且简化了软件开发过程。 ```cpp __HAL_RCC_QSPI_CLK_ENABLE(); HAL_QPSI_MemoryMappedMode(&hqpsi, QPSI_FUNCTIONAL_MODE_MEMORY_MAPPED_READ_WRITE); ``` #### 安全性和性能优化 考虑到系统安全性以及效率方面的要求,可以启用Memory Protection Unit(MPU),它能帮助定义各个存储区间的权限级别,比如区分用户级与管理员级别的访问控制;同时也可以设定缓存策略等参数进一步提升整体表现[^3]。 综上所述,通过对上述技术要点的理解和应用,可以在STM32H750平台上成功实施基于外置NOR型Flash的大容量数据保存解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值