开发环境:
rt-thread studio
开发板:
ART-PI和stm32h750vbt6通用开发板
手头除了art-pi,还有一块stm32h750vbt6的通用开发板,板子小巧,已经集成了TF卡座,QSPI和SPI,可以作为核心板来用。虽然原版配套的SDK中已经提供了bootloader。不过是裸机的,心痒痒想用art-pi的基于rtt的bootloader。于是就又给自己挖了一个坑,然后又想办法把坑给填了。这里将过程记录下来,分享给大家。
1.首先修改applications目录下的main.c文件的修改
修改LED0的宏定义,改成开发板上的PE3
2.接下来修改board目录下的stm32h7xx_hal_msp.c
这个文件主要是负责硬件初始化的,因此要修改成和开发板上相对应的GPIO
修改void HAL_QSPI_MspInit(QSPI_HandleTypeDef* hqspi)函数,让GPIO和开发板的对应起来。
开发板上的QSPI的GPIO如图所示:
可以使用cubemx配置好功能和引脚,然后用cubemx生成代码,直接拷贝过来。
还需要修改void HAL_QSPI_MspDeInit(QSPI_HandleTypeDef* hqspi)函数
接下来修改void HAL_UART_MspInit(UART_HandleTypeDef* huart)函数,这是调试终端的输出口,虽然都是使用uart4,但是映射到不同的IO上,因此也要初始化相应的IO。
同样需要修改void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)函数
3.接下来修改board目录下的board.h文件
主要是关于UART4的引脚宏定义
完成上述修改之后编译一次,没有报错。可以下载进开发板看看什么情况。
运行之后会出现hardfault,提示是在main线程中。现在去检查问题。
由于这个开发板上使用的spiflash并不是25Q128JVSQ,而是25Q64JVSIQ,和art-pi上的还是有一些不同,因此需要修改w25qxx.c文件中的static void MX_QUADSPI_Init(void)函数,如下图所示:
然后再次烧录进去就可以了。
至此,就已经完成了一个基本功能的bootloader的移植,实现了上电后跳转到外部qspi运行app的功能。后续看看再研究研究,加上其他功能。