STM32——SPI

STM32——SPI

SPI简介

SPI 是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口。是 Motorola首先在其 MC68HCXX 系列处理器上定义的。 SPI 接口主要应用在 EEPROM, FLASH,实时时钟, AD 转换器,还有数字信号处理器和数字信号解码器之间。 SPI 是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为 PCB 的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,STM32F1 也有 SPI 接口。
SPI 接口一般使用 4 条线通信:
(1)MISO 主设备数据输入,从设备数据输出。
(2)MOSI 主设备数据输出,从设备数据输入。
(3)SCLK 时钟信号,由主设备产生。
(4)CS 从设备片选信号,由主设备控制。
SPI 主要特点有: 可以同时发出和接收串行数据; 可以当作主机或从机工作; 提供频率可编程时钟; 发送结束中断标志; 写冲突保护; 总线竞争保护等。
SPI 总线四种工作方式 SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果 CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果 CPHA=1,在串行同步时钟
的第二个跳变沿(上升或下降)数据被采样。 SPI 主模块和与之通信的外设备时钟相位和极性应该一致。
不同时钟相位下的总线数据传输时序如图 28.1.1 所示:
在这里插入图片描述
STM32F1 的 SPI 功能很强大, SPI 时钟最高可以到 18Mhz,支持 DMA,可以配置为 SPI协议或者 I2S 协议。
我们将使用 STM32 的 SPI 来读取外部 SPI FLASH 芯片(W25Q128),实现类似上节的功能。这里对 SPI 我们只简单介绍一下 SPI 的使用, STM32 的 SPI 详细介绍请参考《STM32中文参考手册》, 23 节。然后我们再简单介绍下 SPI FLASH 芯片。 我们使用 STM32 的 SPI2 的主模式,下面就来看看 SPI2 部分的设置步骤吧, STM32的主模式配置步骤如下:
1)配置相关引脚的复用功能,使能 SPI2 时钟。
我们要用 SPI2,第一步就要使能 SPI2 的时钟, SPI2 的时钟通过 APB1ENR 的第 14 位来设置。其次要设置 SPI2 的相关引脚为复用输出,这样才会连接到SPI2 上否则这些 IO 口还是默认的状态,也就是标准输入输出口。这里我们使用的是 PB13、 14、 15 这 3 个(SCK.、 MISO、MOSI, CS 使用软件管理式),所以设置这三个为复用功能 IO。
2)设置 SPI2 工作模式。
这一步全部是通过 SPI2_CR1 来设置,我们设置 SPI2 为主机模式,设置数据格式为 8 位,然后通过 CPOL 和 CPHA 位来设置 SCK 时钟极性及采样方式。并设置 SPI2 的时钟频率(最大18Mhz),以及数据的格式(MSB 在前还是 LSB 在前)。
3)使能 SPI2。
这一步通过 SPI2_CR1 的 bit6 来设置,以启动 SPI2,在启动之后,我们就可以开始 SPI 通讯了。
SPI2 的使用就介绍到这里,接下来介绍一下 W25Q128。 W25Q128 是华邦公司推出的大容量 SPI FLASH 产品, W25Q128 的容量为 128Mb, 该系列还有 W25Q80/16/32/64 等。 ALIENTEK所选择的 W25Q128 容量为 128Mb,也就是 16M 字节。
W25Q128 将 16M 的容量分为 256 个块(Block),每个块大小为 64K 字节,每个块又分为16 个扇区(Sector),每个扇区 4K 个字节。 W25Q128 的最小擦除单位为一个扇区,也就是每次必须擦除 4K 个字节。这样我们需要给 W25Q128 开辟一个至少 4K 的缓存区,这样对 SRAM 要求比较高,要求芯片必须有 4K 以上 SRAM 才能很好的操作。
W25Q128 的擦写周期多达 10W 次,具有 20 年的数据保存期限,支持电压为 2.7~3.6V,W25Q128 支持标准的 SPI,还支持双输出/四输出的 SPI,最大 SPI 时钟可以到 80Mhz(双输出时相当于 160Mhz,四输出时相当于 320M),更多的 W25Q128 的介绍,请参考 W25Q128 的DATASHEET。

二:硬件连接

本章实验功能简介:开机的时候先检测 W25Q128 是否存在,然后在主循环里面检测两个按键,其中 1 个按键(KEY1) 用来执行写入 W25Q128 的操作,另外一个按键(KEY0) 用来执行读出操作,在 TFTLCD 模块上显示相关信息。同时用 DS0 提示程序正在运行。
所要用到的硬件资源如下:
1) 指示灯 DS0
2) KEY0 和 KEY1 按键
3) TFTLCD 模块
4) SPI
5) W25Q128
板上的 W25Q128 是直接连在 STM32F1 的 SPI2上的,连接关系如图 28.2.1 所示:
在这里插入图片描述
这里,我们的 F_CS 是连接在 PB12 上面的,另外要特别注意: W25Q128 和 NRF24L01 共用 SPI2,所以这两个器件在使用的时候,必须分时复用(通过片选控制)才行。

发布了37 篇原创文章 · 获赞 92 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44895651/article/details/101027217