你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 4086|回复: 2

【连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第二十八章 SPI实验

[复制链接]

50

主题

7

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2013-3-16 21:42:35 | 显示全部楼层 |阅读模式
 

本章我们将向大家介绍STM32的SPI功能。在本章中,我们将使用STM32自带的SPI来实现对外部FLASH(W25Q64)的读写,并将结果显示在TFTLCD模块上。本章分为如下几个部分:
28.1 SPI 简介
28.2 硬件设计
28.3 软件设计
28.4 下载验证 

<div style="layout-grid:  15.6pt none">28.1 SPI简介
SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,STM32也有SPI接口。
SPI接口一般使用4条线通信:
MISO 主设备数据输入,从设备数据输出。
MOSI 主设备数据输出,从设备数据输入。
SCLK时钟信号,由主设备产生。
CS从设备片选信号,由主设备控制。
SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。
SPI总线四种工作方式 SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果 CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设备时钟相位和极性应该一致。
不同时钟相位下的总线数据传输时序如图28.1.1所示:


图28.1.1 不同时钟相位下的总线传输时序(CPHA=0/1)

STM32的SPI功能很强大,SPI时钟最多可以到18Mhz,支持DMA,可以配置为SPI协议或者I2S协议(仅大容量型号支持,战舰STM32开发板是支持的)。
本章,我们将使用STM32的SPI来读取外部SPI FLASH芯片(W25Q64),实现类似上节的功能。这里对SPI我们只简单介绍一下SPI的使用,STM32的SPI详细介绍请参考《STM32参考手册》第457页,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的使用就介绍到这里,接下来介绍一下W25Q64。W25Q64是华邦公司推出的大容量SPI FLASH产品,W25Q64的容量为64Mb,该系列还有W25Q80/16/32等。ALIENTEK所选择的W25Q64容量为64Mb,也就是8M字节。
W25Q64将8M的容量分为128个块(Block),每个块大小为64K字节,每个块又分为16个扇区(Sector),每个扇区4K个字节。W25Q64的最少擦除单位为一个扇区,也就是每次必须擦除4K个字节。这样我们需要给W25Q64开辟一个至少4K的缓存区,这样对SRAM要求比较高,要求芯片必须有4K以上SRAM才能很好的操作。
W25Q64的擦写周期多达10W次,具有20年的数据保存期限,支持电压为2.7~3.6V,W25Q64支持标准的SPI,还支持双输出/四输出的SPI,最大SPI时钟可以到80Mhz(双输出时相当于160Mhz,四输出时相当于320M),更多的W25Q64的介绍,请参考W25Q64的DATASHEET。
28.2硬件设计
本章实验功能简介:开机的时候先检测W25Q64是否存在,然后在主循环里面检测两个按键,其中1个按键(WK_UP)用来执行写入W25Q64的操作,另外一个按键(KEY1)用来执行读出操作,在TFTLCD模块上显示相关信息。同时用DS0提示程序正在运行。
所要用到的硬件资源如下:
1) 指示灯DS0
2) WK_UP和KEY1按键
3)TFTLCD模块
4)SPI
5)W25Q64
这里只介绍W25Q64与STM32的连接,板上的W25Q64是直接连在STM32的SPI2上的,连接关系如图28.2.1所示:


图28.2.1 STM32与W25Q64连接电路图

28.3软件设计
打开上一章的工程,首先在HARDWARE文件夹下新建一个FLASH的文件夹和SPI的文件夹。然后新建一个flash.c和flash.h的文件保存在FLASH文件夹下,新建spi.c和spi.h的文件,保存在SPI文件夹下,并将这两个文件夹加入头文件包含路径。
打开spi.c文件,输入如下代码:
#include "spi.h"
//SPI口初始化
//这里针是对SPI2的初始化
void SPI2_Init(void)
{    
       RCC->APB2ENR|=1ODR|=0X7

《STM32开发指南》第二十八章 SPI实验.rar

下载

601.08 KB, 下载次数: 51, 下载积分: ST金币 -1

实验23 SPI实验.rar

下载

124.62 KB, 下载次数: 50, 下载积分: ST金币 -1

回复

使用道具 举报

0

主题

57

回帖

0

蝴蝶豆

高级会员

最后登录
2020-12-6
发表于 2013-6-27 21:28:37 | 显示全部楼层

回复:【连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第二十八章 SPI实验

very good, good
回复 支持 反对

使用道具 举报

0

主题

2

回帖

0

蝴蝶豆

新手上路

最后登录
2018-3-8
发表于 2018-2-5 23:11:35 | 显示全部楼层
非常好
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版