预备知识

>>W25Q128是16M spi flash,一共有256个block ,每个Block 64KB。
>>一个Block可以分割为16个扇区(small sector),每个扇区4096字节
步骤 步骤讲解与结果截图
步骤1:创建STM32CUBEIDE工程(根据自己的开发板,配置RCC,选择最低版本固件库)
2:查看FLASH与自己板子的接线图
3:根据FLASH时序特点,这个芯片采用MSB先行,一般采用模式0(初始低电平,采集第一个边沿)与模式3(初始高电平,采集第二个边沿)的时钟,SPI采用的摩托罗拉的设计,所以我们将SPI配置如下
4:调整引脚 由于我们发现系统配置的SPI1的引脚与我们开发板的引脚标号PB3,PB4,PB5不一致,所以我们要对SPI1进行调整引脚
5:配置NSS脚 由于NSS片选引脚需要我们用软件配置,所以我们将原理图上的PG6的NSS脚,配置为GPIO的输出模式,方便控制FLASH芯片的工作接入与否
6:由于FLASH的传输机制与EEPROM不同,读写数据前需要发送对应编码的指令,所以FLASH的指令众多,功能众多,所以要学会移植FLASH的驱动(移植!=抄,要读懂驱动代码,移植才比较快,否则你要移植很久,可能还是会失败),而且今后移植驱动也是家常便饭的事情 1:将厂商给我们的BSP驱动程序复制到我们的项目(需要提前把待移植的代码保存为GB2312编码,再移植到我们项目,并且把我们的项目编码也设置为GB2312,才不会出现移植的文件中文乱码的情况) 2:)为了验证我们是否移植成功,我们还需要将mian函数里面的测试代码给移植过来
7:串口使能 在移植过程中,我们发现需要用到上位机进行显示,所以我们将串口配置好,串口的配置很简单,只需要选择异步模式就ok
8:移植过程介绍 技巧:有时需要批量替换一个单词可以选中单词,右键点击Refactor重建,然后选择Rename 1)移植过程主要是移植注意:建议根据BSP支持包的SPI_INIT函数与SPI_MSP_INIT函数的参数配置我们的SPI//注意:不能在SPI_MSP_INIT里面写_HAL_SPI_ENABLE(),虽然SPI初始化函数里面会调用SPI_MSP_INIT函数,但是并不是SPI_MSP_INIT函数结束,SPI_INIT也结束了,STM32CUBEMX默认会在SPI_MSP_INIT函数后面diable_spi,所以将_HAL_SPI_ENABLE写在SPI_MSP_INIT函数里面没用,需要写在用户main函数里面,这个小细节没注意到,发了1天才发现 在对比我们的STM32CUBE自动生成的SPI的配置与板级支持包和HAL_SPI_MSPINIT的配置都一致时,我们就可以将BSP的SPI_INIT与HAL_SPI_MSPINIT都注释掉 同时我们需要检查我们的引脚配置,如果SPI使用的一样的话,因为F4的SPI引脚标号都差不多,就不用修改BSP的SPI的引脚,只需要将NSS/CS片选脚修改为自己的端口 ,配置完初始化函数与GPIO引脚后,就能使用厂商提供给我们的HAL库了,这也是BSP的初衷,为了屏蔽不同硬件的底层的差别,便于驱动的移植
9:移植验证
10:阅读支持包驱动代码 移植完后,不要就不管了,一定要看FLASH厂商给的驱动流程

进阶内容:串行FLASH文件系统FatFs

步骤 截图/讲解
步骤1:在上个SPI读写FLASH基础上配置FATFS 我的FLASH一个扇区sector为4096字节,所以将扇区大小设置为4096最大;因为需要读取的文件是中文的,所以要配置为中文,然后为以后可能还有别的存储器预留空位,所以配置VOLUMES为其他
步骤2:修改project setting里面的stack大小
生成的项目结构中的fatfs的在中间件里面的第三方支持里面

同时stm32cubemx在源文件里面为我们生成了user_diskio的源文件
注意:修改#define SPI_FLASH 0
步骤3:将stm32cubemx提供给我们的user_diskio文件写入自己的接口 直接将野火的相同函数部分复制到user_diskio文件中就ok
步骤4:测试 在mian.c里面测试文件系统
 /*******************************************************有文件系统测试****************************************************//* 配置串口1为:115200 8-N-1 */printf("\r\n这是一个16M串行flash(W25Q128)实验(QSPI驱动) \r\n");/* 16M串行flash W25Q128初始化 *//* 获取 Flash Device ID */printf("****** 这是一个SPI FLASH 文件系统实验 ******\r\n");//在外部SPI Flash挂载文件系统,文件系统挂载时会对SPI设备初始化retUSER = f_mount(&USERFatFS,"0:",1);/*----------------------- 格式化测试 ---------------------------*//* 如果没有文件系统就格式化创建创建文件系统 */if(retUSER == FR_NO_FILESYSTEM){printf("》FLASH还没有文件系统,即将进行格式化...\r\n");/* 格式化 */retUSER=f_mkfs("0:",FM_ANY, 0, ReadBuffer, sizeof(ReadBuffer));if(retUSER == FR_OK){printf("》FLASH已成功格式化文件系统。\r\n");/* 格式化后,先取消挂载 */retUSER = f_mount(NULL,"0:",1);/* 重新挂载 */retUSER = f_mount(&USERFatFS,"0:",1);}else{printf("《《格式化失败。》》\r\n");while(1);}}else if(retUSER!=FR_OK){printf("!!外部Flash挂载文件系统失败。(%d)\r\n",retUSER);printf("!!可能原因:SPI Flash初始化不成功。\r\n");while(1);}else{printf("》文件系统挂载成功,可以进行读写测试\r\n");}/*----------------------- 文件系统测试:写测试 -----------------------------*//* 打开文件,如果文件不存在则创建它 */printf("\r\n****** 即将进行文件写入测试... ******\r\n");retUSER = f_open(&USERFile, "0:FatUSERFatFS读写测试文件.txt",FA_CREATE_ALWAYS | FA_WRITE );
//  LOG_ERROR(retUSER);if ( retUSER == FR_OK ){printf("》打开/创建FatUSERFatFS读写测试文件.txt文件成功,向文件写入数据。\r\n");/* 将指定存储区内容写入到文件内 */retUSER=f_write(&USERFile,WriteBuffer,sizeof(WriteBuffer),&fnum);if(retUSER==FR_OK){printf("》文件写入成功,写入字节数据:%d\n",fnum);printf("》向文件写入的数据为:\r\n%s\r\n",WriteBuffer);}else{printf("!!文件写入失败:(%d)\n",retUSER);}/* 不再读写,关闭文件 */f_close(&USERFile);}else{printf("!!打开/创建文件失败。\r\n");}/*------------------- 文件系统测试:读测试 ------------------------------------*/printf("****** 即将进行文件读取测试... ******\r\n");retUSER = f_open(&USERFile, "0:FatUSERFatFS读写测试文件.txt", FA_OPEN_EXISTING | FA_READ);if(retUSER == FR_OK){printf("》打开文件成功。\r\n");retUSER = f_read(&USERFile, ReadBuffer, sizeof(ReadBuffer), &fnum);if(retUSER==FR_OK){printf("》文件读取成功,读到字节数据:%d\r\n",fnum);printf("》读取得的文件数据为:\r\n%s \r\n", ReadBuffer);}else{printf("!!文件读取失败:(%d)\n",retUSER);}}else{printf("!!打开文件失败。\r\n");}/* 不再读写,关闭文件 */f_close(&USERFile);/* 不再使用文件系统,取消挂载文件系统 */f_mount(NULL,"0:",1);/* 操作完成,停机 */

下面附上我的微信公众号

STM32CUBEIDE之SPI读写FLASH进阶串行FLASH文件系统FatFs相关推荐

  1. 第24章 SPI—读写串行FLASH—零死角玩转STM32-F429系列

    第24章     SPI-读写串行FLASH 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...

  2. SPI—读写串行FLASH(时序中的无关项)

    SPI-读写串行FLASH 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 本章 ...

  3. 25章 SPI—读写串行FLASH

    SPI 协议简介 3 条总线分别为SCK(时钟).MOSI(主出从入).MISO(主入从出),片选线为SS1.2.3(从设备)(多少设备也就这三条ss) MOSI和MISO能看出是全双工(输入输出两条 ...

  4. SPI—读写串行FLASH

    1 SPI协议简介 SPI协议是由摩托罗拉公司提出的通讯协议(SerialPeripheralInterface),即串行外围设备接口,是一种高速全双工的通信总线.它被广泛地使用在ADC.LCD等设备 ...

  5. SPI应用——W25Q128串行FLASH

    一.FLASH存储器介绍 FLASH存储器又称闪存,它与EEPROM都是掉电后数据不丢失的存储器,但FLASH存储器容量普遍大于EEPROM,现在基本取代了它的地位.在存储控制上,最主要的区别是FLA ...

  6. 3.3 SPI串行Flash配置模式

     SPI串行Flash配置模式 1.SPI串行配置介绍 串行Flash的特点是占用管脚比较少,作为系统的数据存贮非常合适,一般都是采用串行外设接口(SPI 总线接口).Flash 存贮器与EEPROM ...

  7. STM32 串行FLASH文件系统FatFs

    目录 一.Windows系统为例 二.文件系统的结构与特性 为什么要应用文件分配表? 三.FatFs文件系统 1- FatFs 文件系统源码介绍 2- FatFs在程序中的关系网 四.配置FatFs移 ...

  8. JEDEC标准(JESD216)S FDP对串行Flash在系统中的应用

    摘要:JEDEC标准(JESD216)Serial Flash Discoverable Parameter (SFDP)[1]是在串行Flash中建立一个可供查询的描述串行Flash功能的参数表.文 ...

  9. 新手学习FPGA----如何将软硬件程序固化进串行Flash芯片EPCS

    如何将软硬件程序固化进串行Flash芯片EPCS 在FPGA芯片的使用中,软硬件程序可通过JTAG口下载进FPGA芯片中,程序可立即执行,并且在掉电后程序丢失.为了避免这种情况的出现,可使用串行FLa ...

最新文章

  1. 自定义的类型转换器中怎样自定义错误消息?(待解答)
  2. iOS 秒数转换成时间,时,分,秒
  3. 【Android】EditText的一个问题
  4. 8 9区别 endnote7_SAT和ACT的区别,你知道吗?
  5. android显示多个网络图片不显示,Android显示网络图片实例
  6. java中dynamic_java中dynamic web project与web project 的区别 [转]
  7. shell_study
  8. 啊哈C语言——让计算机多彩的开口说话
  9. [每日一氵]协方差矩阵计算
  10. Java之非对称加密
  11. 目标检测yolo, voc, coco的BBox格式转换
  12. 南京工业大学乐学python答案_乐学Python
  13. 【ybt金牌导航8-7-1】数对统计 / 关于莫比乌斯函数的少量内容
  14. 应届生找工作到哪里找
  15. win7计算机无法启动,Win7 64位系统电脑无法开机进不了系统的解决方法【图】
  16. mysql索引的数据结构为什么用B+树,知其所以然
  17. 应付账款账龄分析模板_应付往来账龄分析表模板
  18. 解方程AX=b与矩阵分解:奇异值分解(SVD分解) 特征值分解 QR分解 三角分解 LLT分解
  19. 微信语音技术原理_语音识别的技术原理是什么?
  20. c语言中的字符变量用保留两位小数,字符数字转换保留2位小数

热门文章

  1. Mysql中Cast()函数的用法
  2. 详解python列表中冒号的用法
  3. python网络通信传输的数据类型_Python Socket 编程详细介绍(转)
  4. 如何在苹果官网下载旧版本的Xcode
  5. 从零开始实现TinyWebServer
  6. 教程 | 用安卓手机搭建 web 服务器(一)—— 应用安装配置
  7. 根据现有的API接口将获取JSON数据写入数据库
  8. excel的导出并下载
  9. Ubuntu14.04 tftp服务配置与测试
  10. NI Vision 优点和缺点