基于STM32SPI对W25Q128通信

SPI简介:
1.是串行外围设备接口
2.SPI 接口主要应用在 EEPROM,FLASH,实时时钟,AD 转换器,还有数字信号处理器和数字信号解码器之间。
3.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线

STM32上的SPI:在这里插入图片描述
从高位传出,一般单片机作为主机,外设作为从机例如W25Q128外部FLASH;MOSI,和MISO作为数据传输线,在MOSI线上主机输出数据,从机接收数据,在MISO线上主机接收数据,从机输出数据。
在这里插入图片描述
1.一个字节传输一次
2.读写同步,若只需写数据则忽略收到数据,若只需读则需发一个空字节引发从机发送
3.SPI 主要特点有:可以同时发出和接收串行数据

传输时序:
在配置过程中.
a.如果时钟极性CPOL=0,串行同步时钟的空闲状态低电平即开始电平为低
如果 CPOL=1,串行同步时钟的空闲状态为高电
平,即开始电平为高
b.时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输:
如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样
如果 CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样
在这里插入图片描述
STM32SPI中断:
在这里插入图片描述
在这里插入图片描述
对应引脚模式配置规定的在这里插入图片描述
W25Q128简介:
1.W25Q128 的容量为 128Mb,也就是 16M 字节
2.W25Q128 将 16M 的容量分为 256 个块(Block),每个块大小为 64K 字节每个块又分为16 个扇区(Sector),每个扇区 4K 个字节。W25Q128 的最小擦除单位为一个扇区,也就是每次
必须擦除 4K 个字节

程序思路:在这里插入图片描述
1.配置STM32SPI相对应引脚并使能时钟
2.初始化SPI:,设置 SPI2 为主机模式,设置数据格式为 8 位,然设置 SCK 时钟极性及采样方式,设置 SPI2 的时钟频率(最大 18Mhz),以及数据的格式(MSB 在前还是LSB 在前)
3.使能SPI
4.SPI传输数据
5.查看传输状态

传输,接收,一个字节数据函数代码在这里插入图片描述
根据W25Q128读写时序要求进行读 写操作:发命令->地址在这里插入图片描述
在这里插入图片描述
//指令表
#define W25X_WriteEnable 0x06 写使能
#define W25X_WriteDisable 0x04 写不使能
#define W25X_ReadStatusReg 0x05 读状态
#define W25X_WriteStatusReg 0x01 写状态
#define W25X_ReadData 0x03 读数据
#define W25X_FastReadData 0x0B
#define W25X_FastReadDual 0x3B
删除
#define W25X_PageProgram 0x02删除
#define W25X_BlockErase 0xD8 删除
#define W25X_SectorErase 0x20
#define W25X_ChipErase 0xC7
#define W25X_PowerDown 0xB9
#define W25X_ReleasePowerDown 0xAB
#define W25X_DeviceID 0xAB 设备ID
#define W25X_ManufactDeviceID 0x90
#define W25X_JedecDeviceID 0x9F
在这里插入图片描述

每次操作前要使能写操作,且给一个低电平。结束时要给其为高电平,再失能写操作。也就是通过操作片选引脚来确定是否使能或失能。

一些函数定义
void W25QXX_Init(void);
u16 W25QXX_ReadID(void); //读取FLASH ID
u8 W25QXX_ReadSR(void); //读取状态寄存器
void W25QXX_Write_SR(u8 sr); //写状态寄存器
void W25QXX_Write_Enable(void); //写使能
void W25QXX_Write_Disable(void); //写保护
void W25QXX_Write_NoCheck(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite);
void W25QXX_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead); //读取flash
void W25QXX_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite);//写入flash
void W25QXX_Erase_Chip(void); //整片擦除
void W25QXX_Erase_Sector(u32 Dst_Addr); //扇区擦除
void W25QXX_Wait_Busy(void); //等待空闲
void W25QXX_PowerDown(void); //进入掉电模式
void W25QXX_WAKEUP(void); //唤醒
注意:在对W25Q128写数据操作之前要检查是否擦除过,若没有则需擦除再写入,该部分参考IIC读写EEPROM

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知道起个啥名“”

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值