搭建STM32F407的SPI-Flash(基于STM32CubeMX)

网上有不少例子,都对,但对我来说碰到几个坑,避免以后再犯错,mark下。

目标:通过SPI接口,对Nor Flash进行读写

开发板上Nor Flash 是W25Q128, 128Mbit,也就是16MB样子

CubeMx端配置,配置要分两个:

  1. 一个SPI本身的(需要配置三个复用GPIO口)
  2. 还要单独配置一个CS口(也是GPIO,起到片选作用)

切记,要根据原理图来配置,千万不用使用默认

切记,要根据原理图来配置,千万不用使用默认

切记,要根据原理图来配置,千万不用使用默认

先来看下原理图:

由原理图得出结论:

SPI FLASH 是挂载在SPI1上面,这个要记住的

通过搜索:知道对应关系

|-----------|------|----------------|
| FLASH_CS | PB14 | 片选,要记住,代码里要自己改 |
| SPI1_SCK | PB3 | 时钟 |
| SPI1_MISO | PB4 | 发送 |
| SPI1_MOSI | PB5 | 输入 |

CubeMX端配置:

Connectivity - 选择SPI1,然后选择 Full-Duplex Master

此时,SPI1会默认关联三个IO口,好像是PA5~7,注意:默认跟原理图是不一致的!

这里还要手动再配一下,这个地方搞了好久,一开始没有注意到!!以为默认都是对的!!

找到PB3,然后选择SPI1_SCK。依次类推,把PB4、PB5都设置下!!!

片选那边IO,到还好,在GPIO里面配置。

接下去就是代码部分:

网上有不少驱动程序,可以去下载,大部分都可以用。实际上大部分SPI的操作,包括读写都是:

  1. 片选信号拉低
  2. 发送指令
  3. 操作写(顺便读)
  4. 片选信号拉高

所有操作都是以上套路,知道就好,网上down个驱动,就可以操作了。需要改动的地方就是

#define _W25QXX_CS_GPIO GPIOB

#define _W25QXX_CS_PIN GPIO_PIN_14

片选信号的IO信息要改成你自己的,其他好像不用怎么改

还有奇葩:

要想写入数据,必须先擦除(已擦除可以写入)

相关推荐
A9better1 天前
嵌入式开发学习日志37——stm32之USART
stm32·嵌入式硬件·学习
国科安芯1 天前
ASP4644芯片低功耗设计思路解析
网络·单片机·嵌入式硬件·安全
充哥单片机设计1 天前
【STM32项目开源】基于STM32的智能厨房火灾燃气监控
stm32·单片机·嵌入式硬件
CiLerLinux1 天前
第四十九章 ESP32S3 WiFi 路由实验
网络·人工智能·单片机·嵌入式硬件
时光の尘1 天前
【PCB电路设计】常见元器件简介(电阻、电容、电感、二极管、三极管以及场效应管)
单片机·嵌入式硬件·pcb·二极管·电感·三极管·场效应管
Lu Zelin1 天前
单片机为什么不能跑Linux
linux·单片机·嵌入式硬件
宁静致远20211 天前
stm32 freertos下基于hal库的模拟I2C驱动实现
stm32·嵌入式硬件·freertos
Wave8452 天前
STM32--智能小车
stm32·单片机·嵌入式硬件
wdfk_prog2 天前
[Linux]学习笔记系列 -- lib/timerqueue.c Timer Queue Management 高精度定时器的有序数据结构
linux·c语言·数据结构·笔记·单片机·学习·安全
helesheng2 天前
用低成本FPGA实现FSMC接口的多串口(UART)控制器
stm32·fsmc·fpga·uart控制器