彻底拿下QSPI双闪存W25Q256| STM32H750| QSPI 双FLASH |cubeIDE |下载算法(三)

彻底拿下QSPI双闪存W25Q256| STM32H750| QSPI 双FLASH |cubeIDE |下载算法(三)

先说结果:已实现stm32h750Pro开发板双QSPI FLASH代码下载以及运行

涉及到三个工程:

1.生成下载算法的工程

2.boot工程(在stm32内部FASH中运行)

3.APP工程(在两片QSPI FLASH中运行)

生成算法的工程在(1条消息) 彻底拿下QSPI双闪存W25Q256| STM32H750| QSPI 双FLASH |cubeIDE |下载算法(二)_国企摸鱼程序猿的博客-优快云博客

已经给出了源码和算法文件,下面介绍一下boot和app

boot工程完成的功能为:

1.初始化MPU、初始化时钟

2.使能UART(用来打印信息)

3.使能QSPI双闪存模式

4.串口打印“boot run",并读一下首地址也打印出来

5.使能QSPI映射模式

6.跳转到QSPI FLASH执行

这里的跳转参考了安富莱的资料,删除了RTOS的相关配置,代码如下

static void JumpToApp(void)
{
	uint32_t i=0;
	void (*AppJump)(void);
	__IO uint32_t AppAddr = 0x90000000;  

	DISABLE_INT();

	HAL_RCC_DeInit();

	SysTick->CTRL = 0;
    SysTick->LOAD = 0;
    SysTick->VAL = 0;

	for (i = 0; i < 8; i++)
	{
		NVIC->ICER[i]=0xFFFFFFFF;
		NVIC->ICPR[i]=0xFFFFFFFF;
	}

	ENABLE_INT();

	AppJump = (void (*)(void)) (*((uint32_t *) (AppAddr + 4)));

	AppJump();

	while (1)
	{

	}
}

app工程完成的功能为:

1.初始化MPU、初始化时钟

2.使能UART(用来打印信息)

3.串口打印“HELLO!"

运行结果为:
在这里插入图片描述

值得注意:

1.只有将boot烧录到内部FLASH后,才能对APP工程进行Debug调试,否则无法进行调试

2.APP的时钟初始化必须与BOOT的时钟初始化保持一致,否则时钟初始化会失败。SystemClock_Config函数将会卡在 HAL_RCC_OscConfig ,从而进入Error_Handler()。类似问题参考(1条消息) STM32实战项目:HAL_RCC_OscConfig中程序卡死问题解决办法_雍正不秃头的博客-优快云博客

有了这样的基础配置,为后续的项目大小基础,但是在QSPI里执行代码性能可能会受到影响,可以考虑进行一个搬移工作,将QSPI里的代码搬移到SDRAM,然后再在SDRAM中运行。另外在boot软件中也可以考虑软件升级功能,即将APP区域擦除,并上传新的APP代码进行烧录,上传形式可以考虑串口、网口、USB等。这里说的很多功能,都已经有成熟的软件层的案例了,个人觉得越是软件层的东西,越没有必要重复造轮子,因此考虑上RT-Thread,使用一些里面的组件。这是后面的目标。

先附上APP源码和BOOT源码,这两个工程都是基于cubeIDE的。

https://gitee.com/li-changdong/stm32h7_boot.git

https://gitee.com/li-changdong/stm32h7_app.git

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值