stm32H7 bootloader,支持U盘更新,支持SD卡更新,支持启动到QSPI, 点击查看H7PI的硬件设计参考
- 此Bootloader需要硬件在qspi flash上运行程序,请确认自己的硬件是否支持
- 默认支持H7PI开发板,主控为STM32H750VBT6
- 使用前需要根据自己的硬件设计变更引脚并重新编译
- 此Bootloader要求硬件至少存在spi flash或者SD Card
- flm文件时keil用于代码下载接口,目前仅开发了keil下的下载,其他IDE加入roadmap待开发
- 当前flm文件用qspi代码下载调试,与bootloader合用,可以直接下载调试,与内部flash的使用一致
- 用于使用Jlink下载代码到qspi flash的接口,可以支持到各种IDE
- 待开发
- 用于使用openOCD调试器下载代码到qspi flash的接口,可以支持到各种IDE
- 待开发
- 短接3V3和IO1(PD10)
- 通过USB接口接入电脑,此时电脑枚举出8MB的U盘
- 新建一个update文件夹,将固件放入update文件夹
- 在update文件夹新建一个json文件,命名为fw.json
- 在fw.json文件中建立三个字段如下:
{
"path":"1:/update/app_test.bin",
"version":"0.1",
"crc32":"653E571F"
}
- path字段为固件路径,spiflash请使用磁盘号1,SD Card请使用磁盘号0
- crc32 请使用hash工具计算bin文件的crc32值,并填入字段
- 目前没有对版本号进行比较,version无关紧要
- 引脚修改
- 芯片信息修改
- MCU初始化修改(主要是初始化,STM32系列通用,略加修改即可,这里不提)
u8 QSPI_Init(void)
{
u32 tempreg=0;
RCC->AHB4ENR|=1<<0; //??GPIOA??
RCC->AHB4ENR|=1<<1; //??GPIOB??
RCC->AHB4ENR|=1<<2; //??GPIOC??
RCC->AHB4ENR|=1<<4; //??GPIOE??
RCC->AHB3ENR|=1<<14; //QSPI????
//PB2 QUADSPI1_CLK
GPIO_Set(GPIOB,1<<2,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_HIGH,GPIO_PUPD_PU);
//PB6 QUADSPI1_BK1_NCS
GPIO_Set(GPIOB,1<<6,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_HIGH,GPIO_PUPD_PU);
//PC9,PC10 QUADSPI1_BK1_IO0, IO1,
GPIO_Set(GPIOC,1<<9,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_HIGH,GPIO_PUPD_PU);
GPIO_Set(GPIOC,1<<10,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_HIGH,GPIO_PUPD_PU);
//IO3
GPIO_Set(GPIOA,1<<1,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_HIGH,GPIO_PUPD_PU);
//PE2 QUADSPI1_BK1_IO2
GPIO_Set(GPIOE, 1<<2,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_HIGH,GPIO_PUPD_PU);
GPIO_AF_Set(GPIOB,2,9); //PB2,AF9
GPIO_AF_Set(GPIOB,6,10); //PB6,AF10
GPIO_AF_Set(GPIOC,9,9); //PC9,AF9
GPIO_AF_Set(GPIOC,10,9); //PC10,AF9
GPIO_AF_Set(GPIOA,1,9); //Pa1,AF9
GPIO_AF_Set(GPIOE,2,9); //PE2,AF9
tempreg|=0<<7; //选择FLASH1,flash1将0改为1
tempreg|=0<<6; //禁止双闪存模式,开启双闪存的话将0改为1
#ifdef W25Q64JV
struct FlashDevice const FlashDevice = {
FLASH_DRV_VERS, // Driver Version, do not modify!
"H7PI_W25Q64", // Device Name
EXTSPI, // Device Type
0x90000000, // Device Start Address
0x00800000, // Device Size (8MB)
4096, // Programming Page Size
0, // Reserved, must be 0
0xFF, // Initial Content of Erased Memory
1000, // Program Page Timeout 300 mSec
3000, // Erase Sector Timeout 3000 mSec
// Specify Size and Address of Sectors
0x001000, 0x000000, // Sector Size 4kB (2048 Sectors)
SECTOR_END
};
#endif
3.5 最后一步在自己的app工程里进行,删除原来的Programing Algorithm,然后通过add按钮选择刚才自己生成的,名字和刚才这里修改的device name一致,同时修改ram for algorithm,如果出现校验失败,请不要勾选Verify
struct FlashDevice const FlashDevice = {
FLASH_DRV_VERS, // Driver Version, do not modify!
"H7PI_W25Q64", // Device Name