STM32H750VB核心开发板

        复刻了大佬的开源STM32H750VB/H7B0VB核心板 ,核心板兼容正点原子屏幕,但我没有,直接购买又太贵,就画了一版。

所有资源(开发板资料,配套历程可供学习):

链接:https://pan.baidu.com/s/1rnQgIgXpFH0-jDEgN7raPA?pwd=szz7 
提取码:szz7

核心开发板

基于STM32H750VB的核心板,兼容STM32H7B0VB。4层板设计,在保证小体积的基础上集成了双Flash,SD卡槽和RGB屏幕接口等外设。

STM32H750VB/H7B0VB核心板 - 嘉立创EDA开源硬件平台 (oshwhub.com)

4.3寸800*480LCD屏幕 

物料成本大概只有 60元左右。

核心板配套程序 

        这套核心板程序主要是用“反客STM32H750VBT6核心板(型号FK750M3-VBT6 半孔版)”移植修改得到的。这里主要介绍一下“下载算法”

STM32H750单片机片内的 flash 空间很小,只有 128KB,很多时候无法满足使用,所以需要将程序下载到片外扩展的 flash 中

1.1 下载引导程序

        在开始配置片外下载之前,我们先把引导程序下载一遍,因为单单把用户程序下载到片外的 flash 是无法运行的,单片机上电或者复位完成之后是从片内flash 进行启动, 所以需要用户去引导跳转到 W25Q64。直接用 keil 打开“QSPI Flash运行程序(Bootloader)”,选择您所用的下载器并且添加下载到片内 flash 的下载算法,就是和其他正常下载流程一样。

1.2 添加下载算法路径

        在核心板的资料中找到下载算法, keil 使用的下载算法文件尾缀为.FLM。找到 keil 的安装目录(每台电脑的目录不一样,取决于您实际安装的位置) ,将该文件拷贝到 keil 相应的目录下:
Keil\Keilv5\ARM\Flash

1.3 新工程配置为片外 flash 启动

         

打开 system_stm32h7xx.c,找到 SystemInit ()函数,找到该函数的结尾, 将 SCB->VTOR 的值改为外部 flash 的地址。

  SCB->VTOR = 0x90000000 ;	//如果使用外部flash存储程序,则切换中断向量表的地址

至此,全部配置完毕,直接点击下载即可。

总结:

  • 下载引导程序(引导程序负责引导从片内flash 启动后跳转到 W25Q64片外flash);
  • 运行程序配置为片外 flash 启动
  • 用下载算法进行下载(下载算法.FLM负责将程序直接下载至W25Q64片外flash,keil自带的下载算法只能下载到单片机片内)
效果 

video_20240217_195150



 

### 配置 STM32H750 使用外部 Flash 存储器 在 RT-Thread Studio 中配置 STM32H750 与外部 Flash 进行交互涉及多个方面的工作,包括硬件连接、软件驱动以及应用层编程。 #### 硬件准备 确保所选的开发板支持并已正确安装外部 Flash 设备。对于 STM32H750 来说,推荐使用如 ART-Pi 开发板这样的高性能平台[^2]。该类开发板通常已经集成了必要的外围设备和支持电路,使得开发者能够专注于核心功能而非底层细节。 #### 初始化项目环境 启动 RT-Thread Studio 并创建一个新的工程文件夹用于存放整个项目的资源。选择目标芯片型号为 STM32H750VB 或者其他变体版本,并按照向导完成初始设置过程。 #### 添加外部存储库依赖项 为了简化操作流程,在不修改 CubeMX 设置的情况下可以直接利用现有的 HAL 库函数来访问外部 Flash。因此需要引入相应的驱动程序包到当前工程项目里: 1. 打开 `pkg` 工具窗口; 2. 搜索适用于特定品牌和型号的 SPI NOR Flash 的组件; 3. 安装选定的第三方或官方提供的驱动模块; #### 修改 BSP 文件以适应新需求 根据实际使用的 Flash 类型调整 Board Support Package (BSP) 下的相关初始化代码片段。这可能涉及到更改某些寄存器配置参数或是重写部分低级 I/O 函数定义。如果采用的是正点原子等成熟方案,则可以根据已有实例做适当改动即可满足大部分应用场景的需求[^1]。 #### 编写应用程序逻辑 最后一步是在 main.c 或其它自定义源码文件内编写具体的读取/写入命令序列以及其他业务处理环节。下面给出一段简单的 C++ 伪代码示例说明如何执行基本的数据传输动作: ```cpp #include "rtthread.h" #include "spi_flash_w25qxx.h" // 假设 W25QXX 是我们选用的具体 Flash 芯片系列名 W25QXX flash; void write_data_to_external_flash(const uint8_t* buffer, size_t length){ /* Initialize the external flash */ if (!flash.init()){ rt_kprintf("Failed to initialize external flash.\n"); return; } /* Write data into specified address of the flash memory */ for(int i=0; i<length; ++i){ while(!flash.write_enable()); // Wait until ready for writing flash.write_byte(buffer[i], FLASH_BASE_ADDRESS+i); } } int read_data_from_external_flash(uint8_t* dest_buffer, size_t offset, size_t count){ int result = -1; if(flash.is_ready() && !flash.read(dest_buffer, FLASH_BASE_ADDRESS+offset, count)){ memcpy(dest_buffer, &buffer[offset], count); result = 0; }else{ rt_kprintf("Error occurred during reading from external flash\n"); } return result; } ``` 上述代码展示了怎样通过调用预封装好的 API 接口来进行数据交换活动。需要注意的是这里仅提供了一个大致框架结构,具体实现还需参照各自产品的手册文档进一步完善各个子功能单元的设计思路。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值