STM32之SPI读写外部FLASH(SST25VF016B)

void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite) 

 SPI_FLASH_Write_SR(0x02);//使能状态寄存器中的写存储器

         SST25V_DBSY();
 SPI_FLASH_Write_SR(0x02);//使能状态寄存器中的写存储器
         SST25V_DBSY();
实验目的:将数据写入外部FLASH中,然后再读出来显示在LCD上
 实验平台:基于STM32F103C8T6的彩屏开发板
FLASH:SST25VF016B

 flash_SST.c

 #include "flash_SST.h"
 #include "spi.h"
 #include "delay.h"

 //4Kbytes为一个Sector
 //16个扇区为1个Block
 //SST25VF016B
 //容量为2M字节,共有32个Block(块),512个Sector(扇区)
//初始化SPI FLASH的IO口
//修改状态寄存器,允许芯片存储器被写
void SPI_Flash_Init(void)
 {
 RCC->APB2ENR|=1<<2;        //PORTA时钟使能        
GPIOA->CRH&=0XFFFFFF0F;
 GPIOA->CRH|=0X00000030;    //PA9 推挽         
GPIOA->ODR|=1<<9;          //PA9上拉
SPIx_Init();               //初始化SPI
 SPI_FLASH_Write_SR(0x02);  //使能状态寄存器中的写存储器
SST25V_DBSY();
 } 

 //读取SPI_FLASH的状态寄存器
//BIT7  6   5   4   3   2   1   0
 //SPR   RV  TB BP2 BP1 BP0 WEL BUSY
 //SPR:默认0,状态寄存器保护位,配合WP使用
//TB,BP2,BP1,BP0:FLASH区域写保护设置
//WEL:写使能锁定
//BUSY:忙标记位(1,忙;0,空闲)
 //默认:0x00
 u8 SPI_Flash_ReadSR(void)  
 { 
 u8 byte=0;  
 SPI_FLASH_CS=0;                            //使能器件  
SPIx_ReadWriteByte(SST25_ReadStatusReg);    //发送读取状态寄存器命令   
byte=SPIx_ReadWriteByte(0Xff);             //读取一个字节 
SPI_FLASH_CS=1;                                 //取消片选    
return byte;  
 }

 //写SPI_FLASH状态寄存器
//只有SPR,TB,BP2,BP1,BP0(bit 7,5,4,3,2)可以写!!!
void SPI_FLASH_Write_SR(u8 sr)  
 {  
 SPI_FLASH_CS=0;    //片选
SPIx_ReadWriteByte(SST25_EnableWriteStatusReg);  //使能写状态寄存器命令  
SPI_FLASH_CS=1;                                                 //取消片选
SPI_FLASH_CS=0;                                                  //片选                        
SPIx_ReadWriteByte(SST25_WriteStatusReg);   //发送写取状态寄存器命令   
SPIx_ReadWriteByte(sr);                                //写入一个字节 
SPI_FLASH_CS=1;                                        //取消片选                 
 } 


 //SPI_FLASH写使能
//将WEL置位  
void SPI_FLASH_Write_Enable(void)  
 {
 SPI_FLASH_CS=0;                            //使能器件  
SPIx_ReadWriteByte(SST25_WriteEnable);      //发送写使能 
SPI_FLASH_CS=1;                            //取消片选               
 }

 //SPI_FLASH写禁止
//将WEL清零 
void SPI_FLASH_Write_Disable(void)  
 { 
 SPI_FLASH_CS=0;                                       //使能器件  
SPIx_ReadWriteByte(SST25_WriteDisable);     //发送写禁止指令   
SPI_FLASH_CS=1;                                       //取消片选               
 }                             

 //读取芯片ID SST25VF016的是 0XBF41
 u16 SPI_Flash_ReadID(void)
 {
 u16 Temp = 0;      
 SPI_FLASH_CS=0; 
    
 //发送读取ID命令                           
SPIx_ReadWri
SST25VF Nor Flash嵌入式驱动开发与SPI时序工程实践 Nor Flash是一种支持XIP(就地执行)的非易失性存储器,广泛用于嵌入式系统启动代码和关键参数存储。其核心原理基于浮栅晶体管电荷保持机制,通过精确控制SPI时序实现可靠读写擦操作。技术价值体现在高可靠性、确定性启动及硬件级写保护能力,适用于工业控制、物联网终端和安全固件存储等严苛场景。实际工程中需重点关注CS建立/保持时间、WIP状态轮询、扇区对齐擦除及页编程边界约束等关键时序规范。本文以SST25VF系列为例,深入解析SPI Mode 0通信模型、JEDEC ID识别、状态寄存器监控及FreeRTO 阅读详情

相关推荐

STM32CubeMX实战:5分钟搞定W25Q128FV Flash芯片的SPI初始化与ID读取(含代码)

本文详细介绍了如何使用STM32CubeMX工具快速配置W25Q128FV Flash芯片的SPI通信,包括SPI外设参数设置、硬件引脚映射及JEDEC ID读取代码实现。通过HAL库和可视化配置,开发者可在5分钟内完成SPI初始化,大幅提升嵌入式开发效率。

weixin_30600197的博客 592

STM32 SPI驱动W25Q80DV Flash详解:协议、寄存器与实战

SPI(串行外设接口)是一种高速同步串行通信协议,广泛应用于MCU与Flash、传感器等外设间的全双工数据交互。其核心原理基于主从架构、独立片选(CS)与可配置的时钟极性(CPOL)和相位(CPHA),形成Mode 0–3四种兼容模式,支撑灵活的硬件适配。技术价值体现在低开销、高带宽(可达36 MHz)及确定性时序,显著优于I²C等半双工总线。典型应用场景包括嵌入式系统中NOR Flash编程、SD卡控制及实时数据采集。本文以STM32F103驱动W25Q80DV为具体落点,深入解析SPI硬件架构、状态寄存

weixin_35749545的博客 153

SST25VF016B SPI NOR Flash 驱动开发与下载失败排查实战

SPI NOR Flash 是嵌入式系统中常用的存储介质,具备字节读取、页写入和扇区擦除等特性。在驱动开发中,正确识别芯片ID是确保通信与编程算法匹配的第一步,而理解状态寄存器轮询、写使能指令及擦除对齐等原理,则是实现稳定读写的基础。文章以SST25VF016B为例,介绍从JEDEC ID读取、页写擦除到Keil编程算法配置的完整流程,并针对“target dll has been cancelled”等下载失败问题给出系统性排查思路。通过掌握这些方法,开发者可以快速定位硬件、时序或算法配置问题,提升固件烧

weixin_31774841的博客 330

Keil下SST25VF016B SPI Flash驱动开发与实战

SPI Flash是嵌入式系统中常用的外部存储器件,因其接口简单、读写灵活,广泛应用于程序存储、参数保存和固件升级。其核心原理是通过SPI总线发送指令与地址,配合状态寄存器轮询完成擦除、编程等操作。与NAND Flash相比,NOR Flash具有字节随机读取、命令简洁、无需坏块管理等特点,特别适合中小容量、高可靠性的场景。在实际工程中,驱动编写的关键在于理解页编程的边界限制、扇区擦除的时序以及写使能流程。以一份Keil工程中的SST25VF016B驱动源码为实例,详细解析SPI Flash驱动设计要点,包

weixin_30036289的博客 290

STM32单片机SPI驱动SST25V_Flash驱动程序

STM32单片机SPI驱动SST25V_Flash驱动程序

SST25VF016B的FLASH的SPI通信

根据野火及网络资源参考,编写的FLASH存储及读写。 需要注意: 1:在擦除区域时,是按照块擦除的,即每次4k。 2:在写时,若要断电存储,最好预留一部分作为存储存储信息,用来上电后读取。 3:硬件接口需要根据自己的硬件修改,如PA4、PE6。

STM32控制SST25VF016B

STM32读写SST25VF016B,正常读写

SST25VF016驱动程序_中文注释.txt

SST25VF016驱动程序_中文注释,SST25VF106是常用的FLASH

stm32 驱动sst25vf016b

结合网友自己整理的STM32 SPI2驱动sst25vf016b 的程序

SST25VF016B中文手册

SST25VF016B中文手册

SST25VF016B中文数据手册

FLASH芯片-SST25VF016B中文数据手册

【具身算法】VLA算法-Diffusion Policy

《扩散策略:多模态机器人控制的新方法》摘要 本文提出了一种基于扩散模型的机器人控制策略(DiffusionPolicy),用于解决视觉运动控制中的多模态行为、高维动作空间和训练稳定性问题。该方法利用去噪扩散概率模型(DDPM)生成动作序列,通过迭代优化处理复杂动作分布,显著提升了性能。实验表明,在15项机器人操作任务中,扩散策略平均性能提升46.9%,有效解决了传统显式/隐式策略的局限性。其核心优势在于:1)优雅建模多模态动作分布;2)适应高维动作空间;3)训练过程稳定。未来工作将探索与强化学习的结合及计算

puzhinan7781的博客 1389

别再乱点U盘里的.exe了!手把手教你彻底清除那个伪装成Usb Disk的蠕虫病毒

本文详细介绍了如何识别、清除和预防伪装成Usb Disk的蠕虫病毒。从识别感染迹象到安全备份文件,再到深度清理病毒残留和构建防护策略,提供了一套完整的U盘病毒解决方案。特别提醒用户注意U盘病毒的风险,并养成良好的使用习惯。

weixin_30496999的博客 661

python爬取《你好, 李焕英》豆瓣评论数据

# 导入工具包 import requests from bs4 import BeautifulSoup import time import pandas as pd import numpy as np # 请求头 headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36'} # =

python技巧分享 3454

Windows平台MuJoCo仿真环境配置与Qt集成实战

本文详细介绍了在Windows平台上配置MuJoCo物理仿真环境并与Qt框架集成的完整实战流程。内容涵盖从环境准备、库文件配置、项目创建到核心代码编写的每一步,重点解决了Windows下常见的编译链接错误和路径问题,帮助开发者在Windows系统中高效搭建机器人仿真与可视化控制开发环境。

weixin_29221753的博客 170

【maven】idea左侧External Libraries里,没有Maven的依赖包 代码飘红

文章目录1.概述M.参考 1.概述 因为内网开发,然后这几天我被隔离了,然后公司搞了一个外网的vpn能连接的云桌面,云桌面也是网络隔离的,因此只能自己拷贝相关的文件到里面。 然后我就拷贝了代码和maven仓库中的一部分,因为本地的20G一次拷贝不完,需要多次拷贝,但是我拷贝了kafka,仍然飘红。具体如下 idea左侧External Libraries里,没有Maven的依赖包 然后整了很久都没搞定,后来我自己新建了一个项目,然后引入发现是不可以的,而且框框里面的飘红。 然后我就想是不是因为缺少依赖

九师兄 4411

3D打印开源硬件MKS Monster8 V2.0 原理图赏析--更新中

MKS MONSTER8 主板是创客基地为满足市场需求而推出的主板,可用于Voron 2.4机器安装,支Marlin 固件和Klipper固件,支持U盘打印(暂时只有Marlin固件支持),支持TMC驱动UART模式,它包含了3D打印机所需要的主要部件和接口,通过MCU集中控制,是一款功能强大的主板。下面详细分析一下。

我的专栏 7222

PyCharm高效配置Gitee全攻略

本文介绍了如何在PyCharm和VS Code中配置Gitee插件并管理代码。主要内容包括:1) PyCharm连接Gitee的配置步骤;2) 代码拉取与冲突解决方法;3) VS Code界面功能区域详解;4) 完整的代码提交流程(暂存→提交→推送)。特别说明了VS Code中Git面板的使用方法,以及推送代码到Gitee远程仓库的具体操作步骤。文章还提供了解决代码冲突的建议和注意事项,帮助开发者更好地进行版本控制。

ZhangJiqun&191cm&85kg 298

MDF和DHF、DMR、DHR三者差异?注册与备案文件?医疗器械产品技术要求编写指导原则

定义:设计历史文档(DHF ) 指的是描述某医疗器械成品设计过程的有关记录。内容:DHF包括设计开发活动的所有记录。从最初的策划、客户需求、设计输入,设计输出、设计验证、设计确认、所有的设计评审,设计转换,以及设计变更相关的所有记录。均属于DHF的一部分。要求:各制造商应为每个类型的器械建立并保持设计历史文件。设计历史文件应包含或引用必要的记录,以证实设计符合经批准的设计计划和法规的要求。

学海无涯的专栏 9109

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 51系列中data,idata,xdata,pdata的区别
下一篇: KeilC 里面慎重对全局变量初始化
whatsyourname
博客等级 码龄23年 13粉丝 326原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值