开发环境:

rt-thread studio

开发板:

ART-PI和stm32h750vbt6通用开发板

a175d68b0e3ad96ee4ca6e7207ff2558.png

手头除了art-pi,还有一块stm32h750vbt6的通用开发板,板子小巧,已经集成了TF卡座,QSPI和SPI,可以作为核心板来用。虽然原版配套的SDK中已经提供了bootloader。不过是裸机的,心痒痒想用art-pi的基于rtt的bootloader。于是就又给自己挖了一个坑,然后又想办法把坑给填了。这里将过程记录下来,分享给大家。

1.首先修改applications目录下的main.c文件的修改

ea9161719c40b661736eeab881688080.png

修改LED0的宏定义,改成开发板上的PE3

39392495fbb77e6e043e7204b2b828e8.png

2.接下来修改board目录下的stm32h7xx_hal_msp.c

这个文件主要是负责硬件初始化的,因此要修改成和开发板上相对应的GPIO

066efef01d0e682072f5296ed2730018.png

修改void HAL_QSPI_MspInit(QSPI_HandleTypeDef* hqspi)函数,让GPIO和开发板的对应起来。

开发板上的QSPI的GPIO如图所示:

ac3bcf185151b0b1c00668be15469000.png

可以使用cubemx配置好功能和引脚,然后用cubemx生成代码,直接拷贝过来。

533c54b955d9016fc7db60ce95d8bb6f.png

还需要修改void HAL_QSPI_MspDeInit(QSPI_HandleTypeDef* hqspi)函数

bba497015c7a0fe58f8c8c13ba8d8e21.png

接下来修改void HAL_UART_MspInit(UART_HandleTypeDef* huart)函数,这是调试终端的输出口,虽然都是使用uart4,但是映射到不同的IO上,因此也要初始化相应的IO。

694bc3420fa548c2e616fa21b0b4b062.png

同样需要修改void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)函数

2e119ab490c342396812266626a01a89.png

3.接下来修改board目录下的board.h文件

主要是关于UART4的引脚宏定义

63fed5684ef108427940e2b55c85e1be.png

完成上述修改之后编译一次,没有报错。可以下载进开发板看看什么情况。

3153b2367d98c47ab43997aab66c5a41.png

运行之后会出现hardfault,提示是在main线程中。现在去检查问题。

7334cc7d5dca704c176ceeb840b03350.png

由于这个开发板上使用的spiflash并不是25Q128JVSQ,而是25Q64JVSIQ,和art-pi上的还是有一些不同,因此需要修改w25qxx.c文件中的static void MX_QUADSPI_Init(void)函数,如下图所示:

e37cc7996eed50d647f7935fa79e0d04.png

然后再次烧录进去就可以了。

5b975a4d47428d96416ddde6c43169d0.png

至此,就已经完成了一个基本功能的bootloader的移植,实现了上电后跳转到外部qspi运行app的功能。后续看看再研究研究,加上其他功能。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐