[NUCLEO-L476RG开发]首发QSPI 之一 4线数据读写25QXX 和映射读..... 1。 前言 QUADSPI 是一种专用的通信接口,连接单、双或四(条数据线)SPI Flash 存储介质。该接 口可以在以下三种模式下工作: 间接模式:使用 QUADSPI 寄存器执行全部操作 状态轮询模式:周期性读取外部 Flash 状态寄存器,而且标志位置 1 时会产生中断(如 擦除或烧写完成,会产生中断) 内存映射模式:外部 Flash 映射到微控制器地址空间,从而系统将其视作内部存储器 2。 QUADSPI 主要特性 三种功能模式:间接模式、状态轮询模式和内存映射模式 双闪存模式,通过并行访问两个 Flash,可同时发送/接收 8 位数据 支持 SDR 和 DDR 模式 针对间接模式和内存映射模式,完全可编程操作码 针对间接模式和内存映射模式,完全可编程帧格式 集成 FIFO,用于发送和接收 允许 8、16 和 32 位数据访问 具有适用于间接模式操作的 DMA 通道 在达到 FIFO 阈值、超时、操作完成以及发生访问错误时产生中断 STM32L476 的QSPI 速度是可以支持到80M 读写速度的, 看上面的图我们可以知道25QXX 的4线读写速度是只能支持到 70M(4线)的,这个需要注意了。(当然你要超频也是可以的目前我用80M 的读写速度也没发现什么异常,但不建议超频了可能会不稳定) 了解了上面的的,那我们就开始建工程 工具还是用STM32CubeMX 版本4.11、库用的1.1.1 1.这里选择我们的开发板型号,一些基本的外设和端口就不需要我们再进行设置的了。 2.开启我们要使用的QSPI 外设4线。 3.开启一个串口外设方便我们输出数据查看。 4. 设置一下串口的位数和波特率,波特率就默认选择115200 了,位数为8位。 5.( 1。主频为80M ,分频系数为1(F CLK = F AHB /2)=40M 的读写速度, 2.FIFO 中存在 4 个或更多空闲字节可供写入 3.移位半个周期 4.容易大小我们给个默认的为20个位大小 5.( 2 nCS 在 Flash 命令之间保持高电平至少 3 个周期) 6. nCS 为高电平(片选释放)时,CLK 必须保持高电平。这称为模式 3。 ) 6.给QSPI 添加一个DMA 以进行高速度写,如果不用DMA 速度会慢很多,这个大家可以去试验了。 7.设置好DMA 之后记得还要把这两个中断选上。 8.设置好外设参数之后就生成工程这里还需要给工程起个名字,我就起STM32L476QSPI 了。再选上MDK V5 IDE 由于我是用的KEII 5.16编绎器的。 9.选上这个选项给每一个外设都添加一个*.C ,*.H 这样可以方便我们管理每一个外设,选好了就点OK 生成工程了。 10.打开生成的工程,给25QXX 的操作函数起一个单独的文件夹,再把25QXX 文件添加进来。 11. 给25QXX.C 的文件路径添加进来,按步骤操作就行了。 12.上面步骤都完成后,我们就打开main.c 把25QXX 的头文件添加进来。 13.这里看上面代码注释写的很清楚了。编绎没有错误就可以下载到我们的开发板了。 14. 到这一步就看程序的输出结果了,这里可以看到我用的16MB 的FLASH 读到的ID 为EF17 是正确的,再把读到的0-99地址的数据输出来。结果也是正确的。 我们再看看开启了内存映射的方法读取内存输出也是正确的。(开启内存映射就可以像内部FLASH 一样的操作了) 工程源代码放在附件里了,需要的就下载,觉得好的就顶。不好的话就喷吧,现在的技术也就这样子了 |
STM32L476QSPI.rar
下载7.08 MB, 下载次数: 406, 下载积分: ST金币 -1
好高级啊。。。只能先仰望下。。。
|
大神,求教如果用w25q256,4byte地址线,怎么改啊? |
谢谢分享 mark一下 |
顶一个 |
顶一个 |
学习。。。。。。。。。 |
谢谢分享 |
感谢分享 |
marj一下 |
感谢分享 |
不错,又有一份QSPI的例程! |
强悍,谢谢分享 |