I2C中曾经说过其实目前基本用Flash而不用E2PROM,E2PROM最大的特点是按字节操作,Flash则是按扇区操作。目前STM32单片机教程里基本上都是用W25Q128这款SPI Flash芯片来教学SPI通信,我手头上开发板也是使用了这个芯片,一起来看下SPI通信的实现方法。

W25Q128是一款NOR Flash(关于NOR和NAND,在这里不是重点,这里重点在应用),128Mb(16MB)大小,有256个块(Block),每个块包含16个扇区(Sector),可以计算出每个扇区的大小为128*1024/256/16/8 = 4KB 。
Flash在写数据时必须擦除,以扇区或块为单位来操作。

STM32内部是有Flash存储器的,以STM32F103ZET为例,512K的Flash,特点是掉电不丢失,我们平常烧写程序都是在其内部的Flash操作。烧写程序时使用的FlyMCU等软件,就是针对特定扇区进行操作。

STM32F103ZET有3个SPI模块,开发板上使用了SPI2和Flash芯片连接。SPI有4根线和芯片连接,开发板已完成好这部分工作,所以我只需要配置STM32Cube的SPI2模块,基本都是默认配置,不使用中断和DMA模式,生成Keil工程文件代码。
W25Q128这个外设的驱动文件(百度可得之)也要加入到工程文件里,也需要在include path里加入驱动的头文件目录
当然还需要根据实际使用的SPI模块(1,2还是3)来更改相应的GPIO口号,否则程序编译会出错。
特别要注意,在CubeMX上配置SPI时,软件只会配置MOSI、MISO和SCK,需要自己配置NSS端口为GPIO输出模式,否则无法使能Flash芯片

最常用的HAL_SPI函数是HAL_SPI_Transmit()HAL_SPI_Receive(),即单片机向外设发送或接收数据。

HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)
// 第一个参数为选择SPI的通道,&hspi1or2or3
//第二个参数为要发送的数据
//第三个参数为发送数据的大小,以字节为单位
//第四个参数为发送时间限制
HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)

参数和Transmit的一模一样
对于W25Qxx的操作,即根据datasheet上的介绍,通过SPI发送特定的数据来读写存储空间,下节详细介绍

STM32自学笔记-4-SPI和Flash芯片相关推荐

  1. 低功耗SD\SPI NAND Flash芯片

    目前市面上很多SD/ SPI 的NAND FLASH芯片普遍面临功耗过高的情况,尤其是应用在穿戴类产品,包括手环,手表,耳机,心电贴等产品的时候,由于用户对于穿戴产品的待机时长要求很高,从而导致所有穿 ...

  2. TI DSP TMS320C66x学习笔记之SPI Nor Flash多核程序烧写

    烧写工具链接: https://pan.baidu.com/s/1em4jWjbskpMmNd1uzscjjA 提取码: 82qg 经过一段时间的研究终于把TMS320C6657单核和双核的SPI N ...

  3. STM32学习笔记:读写内部Flash。

    首先我们需要了解一个内存映射:    stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同. RAM起始地 ...

  4. STM32学习笔记:读写内部Flash(介绍+附代码)

    一.介绍 首先我们需要了解一个内存映射: stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同. RAM起 ...

  5. STM32自学笔记15-步进电机驱动项目-磁编码器MT6816驱动

    这个闭环驱动系统中,充当闭环反馈的是磁编码器MT6816,它的作用是告诉主控现在电机的转动位置. 一般来说磁编码器和光编码器相比,精度.分辨率和响应时间都要差一些,但优势是对环境要求较低,粉尘.油污. ...

  6. 小辣记【野火stm32自学笔记】点灯仪式

    前记 置位:|= 清零:&=~ 使用寄存器点亮LED灯 让绿灯亮PB0 PB0连接3.3V 低电平亮 端口输出寄存器ODR APB2中的GPIO端口B的基地址为0x40010C00 地址偏移为 ...

  7. STM32自学笔记-6-RS485串口通信

    RS232的通信逻辑"1"的电平为-5V~-15 V,逻辑"0"的电平为+5 V-+15 V.这样高的电平和TTL不兼容,而且容易烧坏接口电路芯片,共地的方式也 ...

  8. STM32自学笔记-7-CAN总线通信

    STM32F103有1个CAN控制器,可以配合逻辑分析仪来测试CAN和PC的通信.在此之前先学习一下CAN的基础知识. CAN 控制器根据两根线上的电位差来判断总线电平.总线电平分为显性电平(0),C ...

  9. STM32自学笔记ADC多通道扫描

    STM cubemx STM32F1 ADC多通道采集(非DMA) ADC模式介绍: 扫描模式: 多通道采集必须开启,这一项CUBE已经默认设置好了.这个模式就是自动扫描你开启的所有通道进行转换,直至 ...

最新文章

  1. 把mysql 中的字符gb2312 改为gbk的方法
  2. Python 爬虫进阶篇-4行代码实现爬取指定网站中的全部图片实例演示及原理剖析
  3. Java学习笔记2.2.1 常量与变量 - 变量
  4. 环形博弈 HDU - 3951
  5. 学习C++编程的优势有哪些?
  6. 2018-08-06-Python全栈开发day35-day36-select
  7. 韦东山《嵌入式Linux应用开发完全手册》配套视频教程
  8. Java适配器模式(转接口)
  9. Windows10如何在文件夹打开DOS命令窗口
  10. Adobe携手微软、世纪互联在中国推多种云服务
  11. Excel单元格保护
  12. Excel中排序和筛选
  13. django.db.utils.DataError: (1366, “Incorrect string value: ‘\\xE5\\x85\\xAD\\xE5\\x8D\\x83‘ for colu
  14. 第二章(1):时钟与同步接口
  15. IT狂人第一至四季/全集The IT Crowd迅雷下载
  16. Elastic Weight Consolidation(EWC) for Life long Learning
  17. 轻易解决VMware 虚拟机中被提示“请不要在虚拟机中运行此程序“
  18. 如何创建一个带诊断工具的.NET镜像
  19. PotPlayer视频播放器使用技巧
  20. 信号与系统 - 卷积运算

热门文章

  1. IntelliJ IDEA官网打不开/Pycharm 官网打不开的问题
  2. 下雨物体打湿积水效果制作
  3. 计算机是如何读懂图片的
  4. 多迪资深HR揭秘:Web前端面试技巧有哪些?
  5. SVN操作 -- TortoiseSVN中的Excel文件比较
  6. android 代码打开usb调试,Android手机USB调试在哪?安卓手机如何打开USB调试模式?...
  7. 化生政组合能选计算机专业吗,选化生政的女生适合什么专业?女生选化生政好吗?...
  8. 用Ubuntu和RStudio Server搭建一个R语言的云平台
  9. QCFS-related work
  10. WIN7固态硬盘(系统盘)无损4K对齐教程