匿名
未登录
登录
丢石头百科
搜索
查看“STM32CubeMX系列教程10:串行外设接口SPI(一)”的源代码
来自丢石头百科
名字空间
页面
讨论
更多
更多
页面选项
查看
查看源代码
历史
←
STM32CubeMX系列教程10:串行外设接口SPI(一)
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
摘要:本章介绍SPI总线。以及介绍W25Qxx芯片。 <b style="background-color: inherit;">1.SPI简介</b> <b style="background-color: inherit;"> </b> SPI(Serial Peripheral Interface),串行外围设备接口,一种高速的,全双工,同步的通信总线。芯片的管脚上只占用四根线。 MISO: 主器件数据输出,从器件数据输入。 MOSI:主器件数据输入,从器件数据输出。 SCK: 时钟信号,由主设备控制发出。 NSS(CS): 从设备选择信号,由主设备控制。当NSS为低电平则选中从器件。 [[File:152644y06f3vbnp06vzl4k.png]] 如下为主器件与多个从器件通信,其中SCK,MOSI,MISO是接在一起的,NSS分别接到不同的IO管脚控制。主器件要和从器件通信就先拉低对应从器件的NSS管脚使能。默认状态IO1,IO2,IO3全为高电平,当主器件和从器件1通信时,拉低IO1管脚使能从器件1。而从器件2,3不使能,不作响应。 [[File:152644cay3r52ppz3vyyy1.png]] <b style="background-color: inherit;">2.SPI时序图</b> 每次开始传输时,主器件先拉低从器件的片选信号线NSS,选中要传输的从器件。SCK时钟线发送一个时钟周期就传输一位数据。MOSI为主出从入,数据由主器件控制发送,从器件接收。MISO的数据由从器件控制发送,主器件接收。所以SPI传输一个字节就相当于主器件和从器件交换一个字节。 SPI只有主模式和从模式之分,没有读和写的说法,因为实质上每次SPI是主从设备在交换数据。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。 [[File:152645b1qu1qtwuufxu1u3.png]] 根据时钟极性(CPOL)及相位(CPHA)不同,SPI有四种工作模式。 时钟极性(CPOL)定义了时钟空闲状态电平: CPOL=0为时钟空闲时为低电平 CPOL=1为时钟空闲时为高电平 时钟相位(CPHA)定义数据的采集时间。 CPHA=0:在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样。 CPHA=1:在时钟的第二个跳变沿(上升沿或下降沿)进行数据采样。 [[File:152646p7f7z6bu7qmvcb74.png]] <b style="background-color: inherit;">3、W25Q128FV</b> W25Q128V芯片是串行闪存,可以通过标准/两线/四线SPI控制,这里只介绍通过标准SPI控制。 [[File:152646apanoe7ltn9umjp2.png]] [[File:152646p77tzhvtf0zhj10f.png]] W25Q128fv管脚如上,作为标准SPI控制时,DO管脚为MISO,D1管脚为MOSI,/CS为片选NSS,CLK为时钟信号线。/WP为写保护管脚,/HOLD or /RESET为保持或复位引脚(通过寄存器配置)。 [[File:152647hejxzi2j52lbxz55.png]] W25Q128FV为串行Nor FLASH,,掉电后数据不丢失。大小为128M-bit,分为256个块(Block),而每个块位64K,每个块的又分为16个扇区(Sector),每个扇区的大小为4K。FLASH写数据前必须擦除存储器,而擦除是以扇区或块作为操作单位的。 W25Q128FV通过命令操作,这里简单介绍几条用到的命令,详情可以参考数据手册 1.读制造商/设备ID(90) 该指令通常在调试程序的时候用到,判断SPI通信是否正常。该指令通过主器件拉低/CS片选使能器件开始传输,首先通过DI线传输“90H”指令,接着传输000000H的24位地址(A23-A0),之后从器件会通过DO线返回制造商ID(EFH)和设备ID(17H)。 (注:SPI为数据交换通信,主器件在发送“90H”指令时也会接收到一个字节FFH,但此数据为无效数据) [[File:152647f4nvycynu4t9tvg8.png]] 2.读数据(03H) 读数据指令可从存储器依次一个或多个数据字节,该指令通过主器件拉低/CS电平使能设备开始传输,然后传输“03H”指令,接着通过DI管脚传输24位地址,从器件接到地址后,寻址存储器中的数据通过DO引脚输出。每传输一个字节地址自动递增,所以只要时钟继续传输,可以不断读取存储器中的数据。 [[File:152648tjxgx6juzomqoa4u.png]] 3.页编程(02H) 页编程指令可以在已擦除的存储单元中写入256个字节。该指令先拉低/CS引脚电平,接着传输“02H”指令和24位地址。后面接着传输至少一个数据字节,最多256字节。 [[File:152649hht5h1thnzmhz1u5.png]] 4.扇区擦除(20H) 扇区擦除指令,数据写入前必须擦除对应的存储单元,该指令先拉低/CS引脚电平,接着传输“20H”指令和要擦除扇区的地址。 [[File:152649h62qn9n94zkhnqm7.png]] 另外还有其他一下操作命令 5.使能重启(66H),使能重启设备(99H)。 [[File:152650ezo1atm84fam8p88.png]] 6.写使能命令(06H) [[File:152650wgom29hr9z2gp2x3.png]] 7.读状态寄存器1(05H),状态寄存器2(35H),状态寄存器3(15H) [[File:152650lzl7k0dudw0ykt03.png]]
返回至
STM32CubeMX系列教程10:串行外设接口SPI(一)
。
导航
导航
首页
最近更改
随机页面
MediaWiki帮助
首页
首页
树莓派
主机
配件包
外壳
键鼠
电源
扩展板
显示屏
墨水屏
摄像模块
通信模块
继电器
电机驱动板
游戏机
产品分类
树莓派
Arduino
micro:bit
STM32
Espressif
WiFi模块
蓝牙模块
无线模块
LoRa模块
4G模块
GSM
GPRS
以太网
导航模块
北斗卫星
GPS
LCD
墨水屏
OLED
摄像头
USB模块
串口模块
RS232
RS485
CAN
传感器
温度模块
湿度模块
气压模块
继电器
电机模块
指纹模块
电平转换
音频模块
编程器
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志