彻底拿下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 |下载算法(二)_国企摸鱼程序猿的博客-CSDN博客

已经给出了源码和算法文件,下面介绍一下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中程序卡死问题解决办法_雍正不秃头的博客-CSDN博客

有了这样的基础配置,为后续的项目大小基础,但是在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

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
根据引用和引用的内容,可以总结出STM32h750 QSPI W25Q64驱动的一些关键信息。 首先,W25Q64是一种SPI NOR Flash芯片,它被连接到STM32h750的QSPI(Quad SPI)接口上。W25Q64的引脚连接为PB2、PB6、PF6、PF7、PF8和PF9。 在设置QSPI时,一些关键的配置参数需要注意。首先是时钟预分频器(clock prescaler),根据W25Q256的最高时钟频率为104MHz,因此需要将分频设置为2。其次是闪存大小(FLASH SIZE),W25Q64的大小为8MB,所以需要将设置为2的(22-1)次方。时钟模式(Clock Mode)应设置为Low,表示CLK空闲时为低电平。芯片选择(Chip Select)需要设置为High Time为5,以确保高电平持续时间大于50ns。 另外,为了保证正常的工作,所有的QSPI引脚都应该设置为very high,而NCS脚(PB6)必须设置为PULL-UP。关于为什么要设置为PULL-UP,具体原因在引用中没有提及。 最后,需要注意W25Q64与W25Q256之间的一些区别。首先是地址位数,W25Q64只支持24位地址,而W25Q256支持24位和32位地址。其次是读写状态寄存器的不同,W25Q64的读状态寄存器为05h和35h,而W25Q256的为05h、35h和15h。写状态寄存器也有所不同,W25Q64的为01h,而W25Q256的为01h、31h和11h。 综上所述,STM32h750的QSPI可以通过相应的配置来驱动W25Q64芯片。需要注意的是,具体的配置参数和引脚连接可能还取决于具体的硬件设计和应用需求。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [STM32H750 QSPI间接模式 W25Q64](https://blog.csdn.net/smallerlang/article/details/127921384)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [STM32H753 STM32H743 STM32H750 QSPI W25Q256 下载算法](https://blog.csdn.net/c101028/article/details/132073746)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值