搭建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信息要改成你自己的,其他好像不用怎么改

还有奇葩:

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

相关推荐
Mortal_hhh1 小时前
VScode的C/C++点击转到定义,不是跳转定义而是跳转声明怎么办?(内附详细做法)
ide·vscode·stm32·编辑器
深圳市青牛科技实业有限公司1 小时前
【青牛科技】应用方案|D2587A高压大电流DC-DC
人工智能·科技·单片机·嵌入式硬件·机器人·安防监控
Mr.谢尔比2 小时前
电赛入门之软件stm32keil+cubemx
stm32·单片机·嵌入式硬件·mcu·信息与通信·信号处理
LightningJie2 小时前
STM32中ARR(自动重装寄存器)为什么要减1
stm32·单片机·嵌入式硬件
鹿屿二向箔2 小时前
STM32外设之SPI的介绍
stm32
西瓜籽@3 小时前
STM32——毕设基于单片机的多功能节能窗控制系统
stm32·单片机·课程设计
远翔调光芯片^138287988725 小时前
远翔升压恒流芯片FP7209X与FP7209M什么区别?做以下应用市场摄影补光灯、便携灯、智能家居(调光)市场、太阳能、车灯、洗墙灯、舞台灯必看!
科技·单片机·智能家居·能源
极客小张6 小时前
基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
stm32·单片机·嵌入式硬件·mqtt·sqlite·毕业设计·智能充电桩
m0_739312879 小时前
【STM32】项目实战——OV7725/OV2604摄像头颜色识别检测(开源)
stm32·单片机·嵌入式硬件
嵌入式小章9 小时前
基于STM32的实时时钟(RTC)教学
stm32·嵌入式硬件·实时音视频