stm32 QUADSPI外设总结

stm32F746Discovery 带有一块四线16MByte的spi Flash。stm32F7带有四线spi的外设。

问题一:使用MDK烧写官网的demo的时候,gui图标显示异常。

原因:gui的图标数据是保存的spi flash里的,官方的默认配置,不会烧写spi flash,使用STM32官方烧写工具ST-LINK Utility直接烧写hex,就不会有问题。那么就引出下一个问题。

问题二:如何配置MDK,实现在烧写片内flash的同时,也会烧写片外spi flash。

首先,需要添加spi flash的下载算法,什么试试spi flash下载算法?下载算法是一段读写存储介质的接口,存储介质可以是内部的flash,ram,外部的flash。仿真器会把下载算法拷贝到stm32内部的ram中运行。然后,仿真器通过下载算法提供的接口,读写存储介质。stmF7disco板上带的spi flash型号是N25Q128A,由于MDK的软件中带有该芯片的下载算法,所以不需要自己去实现,直接添加即可

stm32 QUADSPI外设总结_第1张图片  stm32 QUADSPI外设总结_第2张图片

添加完之后,点击下载按钮,会提示错误,原因是由于算法占用的内存空间不够了,需要更改内存空间大小,再次下载就没有问题了。

stm32 QUADSPI外设总结_第3张图片

问题三:如果没有对应芯片的下载算法怎么办?

后续补充。

问题四:如何在程序中使用spi flash

stm32的spi flash接口有三种使用模式

1、间接模式,所有的读写都是通过访问寄存器方式

2、轮询方式

3、内存映射方式,和访问单片机内部存储类似,适合只读flash

这里只介绍第三种方式。

第一步:修改分散加载文件

LR_IROM1 0x08000000 0x00100000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00100000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00050000  {  ; RW data
   .ANY (+RW +ZI)
  }
}

 LR_QSPI 0x90000000 0x10000000  {
    ER_QSPI 0x90000000 0x10000000 {
    *.o (ExtFlashSection)          
  }
}

第二步:

__attribute__((section(".ExtQSPIFlashSection")))

设置内存属性,之后就可以在spi flash里面定义只读数据了。

 

你可能感兴趣的:(stm32 QUADSPI外设总结)