基于STM32F746G-Discover的扩展电路板
【合集】STM32F7教程、资料大集合
F769 Discovery实现播放U盘音乐的播放器
STM32 VS Code Extension (在Ubuntu上开发STM32,ST官方vscode插件使用指南)
STM32F765@216MHz跑NES模拟器【代码】【视频】
基于STM32F7实现ADC软件触发+轮询采集
基于STM32F7进行ADC采集解决更新问题
基于STM32F7使用定时器经验分享
实现基于STM32F7中周期采集
基于STM32F7中实现采集和中断
从Table8可知,该指令的功能是使能QPI,该指令对比0x90,他只能在SPI模式下使用,且无返还的数据。同样0xFF,是失能QPI的指令,只能在QPI模式下使用,所以我们配置如下:
qspi.c(存放QSPI的引脚配置和QSPI时钟等配置,是由stm32cubemx生成的,另外包括3个自己写的函数:QSPI_Send_CMD、QSPI_Receive、QSPI_Transmit);" C2 ?2 t4 K$ Z! A- X
w25qxx.c(存放NM25Q64EB的一系列函数,包括读ID,读,写,擦除,QPI使能等), Z6 K" b' o& z2 @' \
实验过程中,我们在main()函数中调用NM25Q64EB的一系列函数进行测试读写功能:7 I+ W% u# G: _# D: @
Ⅰ、先读取ID是否等于0x5216;: J1 C+ O( R1 l7 c
Ⅱ、flash的大小,在读写的时候,读写的起始地址+数据大小不能超过8*1024*10242 D; L' e; C, h1 B, m }
Ⅲ、擦除1 v/ [. W4 c# N( o% H) X% P
Ⅳ、写数据/ _/ c1 ?1 Y1 {8 y% h+ @
Ⅴ、读出数据并打印出来
对IPS6404L和NM25Q64EB的读写,可以对比进行学习。两者的引脚,QSPI系数配置是一致的,工作过程照样是发送指令,让IPS6404L做出不同的操作,但有一些差异。
这是IPS6404L和NM25Q64EB的第一个区别,IPS6404L要读取ID只允许在SPI的模式下,所以在读取ID之前我们要先退出QPI的模式,利用指令码0Xf5,该指令只能在QPI模式下使用,使用我们指令模式要选择4线。此处的Waitcycles和NM25Q64EB的dummycycles是同样的作用,查表该值为0.
读取ID和NM25Q64EB也有差异,读取ID的指令是0x9F,只能在SPI模式下读取,根据时序图的注释,我们可以看出,读出的地址有两个字节(16bits),我们同样经过移位操作(在QSPI_PARAM_Test()中,将读取到的第一个字节左移8位,再与第二个字节做或运算)将其通过串口打印出来,读到ID=0Xd5d说明正确。
读取完ID后进入QPI模式,指令码是0X35,只能再SPI模式下操作。除了指令码,其他配置和退出QPI模式的配置函数一致。) k, X ` i, h4 t
(4)写PSRAM数据% p9 x* h% K: l* ? z% i8 d
指令码是0x38,指令模式、数据模式、地址模式全部为4线,地址大小为24bits,赋值好后调用HAL_QSPI_Command()完成配置并调用HAL_QSPI_Transmit()发送
指令码是0xEB,此处特别注意要配置dummy cycles为6,一般涉及到Read的函数都要查表确认。
最后将写入PSRAM的数据和读取到的数据进行逐一比较,按位比较成功,说明测试成功。可以正式在main()函数中正常读写,测试得到以下结果,说明通讯正常。
Ⅰ、IPS6404L如果在进入QPI模式后没有退出QPI模式,尽管在函数中将进入QPI模式的函数屏蔽,照样会保持QPI模式,无法读取ID,必须在读ID前退出QPI模式。5 _& ]! i; Z( s) i+ ?
2 p& D9 |+ m) i" `, n3 A" C
Ⅱ、配置指令所用的宏定义放在stm32f7xx_hal_msp.h中,请对照移植。
Ⅰ、IPS6404L如果在进入QPI模式后没有退出QPI模式,尽管在函数中将进入QPI模式的函数屏蔽,照样会保持QPI模式,无法读取ID,必须在读ID前退出QPI模式。) K: h [; v3 c6 Y0 h
" A' H; S0 d; a( S; M' o
Ⅱ、配置指令所用的宏定义放在stm32f7xx_hal_msp.h中,请对照移植。