STM32H743_DFU_QSPI_flash

代码在:GitHub.com/affe00

愿意在CSDN捧场下载的:我的资源

转载请标明来源。代码按BSD-3-Clause授权使用。代码包中包含STM32CubeMX生成的代码,使用时应遵循各个文件中标注的使用许可要求。

2020-1-31:

DFU写入W25Q64 flash后执行成功。
H743_Proj06:在BOOT0=1时reset,进入刷固件的模式,用DfuSe Demo(v3.0.6)刷入。
H743_Proj05_XIP_on_QSPI_Flash:BOOT0=0,按下K2(pin C5=0)和reset,先释放reset,进入H743_Proj06的DFU模式后,用DfuSe Demo刷入。

H743_Proj05_XIP_on_QSPI_Flash刷入后,BOOT0=0,不按K2,reset,H743_Proj06程序启动后做QSPI MemMap,查找QUADSPI Flash中是否有可执行的代码。如果有就转入。


一、H743_Proj06, ExtBoot部分:

CubeMX生成模板后,USB_DEVICE/App/usb_device.c:

void MX_USB_DEVICE_Init(void){
  ...
  if (USBD_DFU_RegisterMedia(&hUsbDeviceFS, &USBD_DFU_fops_FS) != USBD_OK)

改成:

  if (USBD_DFU_RegisterMedia(&hUsbDeviceFS, &USBD_DFU_QSPI_FLASH_fops_FS) != USBD_OK)

从USBD_DFU_fops_FS改成USBD_DFU_QSPI_FLASH_fops_FS,用自己的操作QSPI Flash的处理程序代替刷片内flash的处理程序


二、H743_Proj05_XIP_on_QSPI_Flash,Application部分:

1. STM32H743VITX_FLASH.ld:

MEMORY{
  ...
  FLASH    (rx)    : ORIGIN = 0x90000000,    LENGTH = 8192K

根据手册,QSPI flash Memory Map 后的地址是0x90000000
如果计划刷在片内flash的DFU程序后面,可以改成:

  FLASH    (rx)    : ORIGIN = 0x08020000,    LENGTH = 1920K

严谨来说,前面H743_Proj06,如果计划把片上Flash后面的部分划给用户程序用,STM32H743VITX_FLASH.ld应该这样改:

  FLASH    (rx)    : ORIGIN = 0x08000000,    LENGTH = 128K

这样如果DFU程序编译时超过128K,编译软件会给出Error提示。

2. stm32h7xx_hal_msp.c:

#ifdef VECT_TAB_SRAM
  SCB->VTOR = D1_AXISRAM_BASE  | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D1 AXI-RAM */
#else
  SCB->VTOR = FLASH_BANK1_BASE| VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */

改成:

  SCB->VTOR = QSPI_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in QSPI FLASH */

如果计划刷在片内flash的DFU程序后面,可以改成:

  SCB->VTOR = 0x08020000 | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH with offset*/

System Control Block -> vector table, 中断向量表

编写应用程序应注意:不能再把QSPI接口用作其他用处,不能把QSPI的时钟信号关掉。否则处理器就取不到指令了。推荐在STM32CubeMX中给QSPI flash的针脚做上标记,防止误用。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值