STM32之SPI_FLASH
来源:互联网 发布:怎么在淘宝上找同款 编辑:程序博客网 时间:2024/05/16 10:38
SPI的简介:
SPI协议(Serial Peripheral Interface),即是串行外围设备接口,是一种高速全双工的通信总线,它是由摩托罗拉公司提出的,他被广泛的使用在ADC,LEC等设备与MCU间通讯的场合.
SPI信号线:
SPI总线包含4条总线,分别是为SS(PS:这里用SS代替,起始还有一个非号—在顶上),SCK,MOSI,MISO。
SS(Slave select):片选信号线,当有多个SPI设备与MCU相连时,每个设备的这个片选信号线是与MCU单独的引脚相连的,而其他的SCK,MOSI,MISO线则为多个设备并联到相同的SPI总线上
当SS信号线为低电平时,片选有效,开始SPI通讯.
SCK(Serial Clock):时钟信号线,由主通讯设备产生,不同的设备支持的时钟不一样(这个要根据外设数据手册了解,如STM32的SPI时钟频率最大为Fpclk/2)
MOSI(Master Output,Slave Input):主设备输出/从设备输入引脚.主机的数据从这条信号线输出,从机由这条信号线读入数据(即这条线上的数据方向为主机到从机)
MISO(Master Input,Slave Output):主设备输入/从设备输出引脚,主机从这条信号线读入数据,从机的数据从这条信号线输出(即这条信号线上的数据方向为从机到主机)
SPI模式:
根据SPI时钟极性(CPOL)和时钟相位(CPHA)配置的不同,可以分为四种SPI模式.
时钟极性:是SPI通讯设备处于空闲状态时(也可以认为这是SPI通讯开始时,即SS为低电平),SCK信号线的电平信号.CPOL = 0时,SCK在空闲状态时为低电平,CPOL = 1时,SCK在空闲状态时为高电平.
时钟相位:是指数据的采样时刻,当CPHA = 0时,MOSI或MISO数据线上的信号将会在SCK时钟线的奇数边沿被采样.当CPHA = 1时,数据线在SCK的偶数边沿采样.
这是一个CPHA = 0的时序图.
片选信号:由主机把片选信号线SS拉低(就是图中的SS(0)时序),意为主机输出,SS(I)时序也是SS线信号,SS(I)时序表示从机接收到SS片选被拉低的信号.
SCK信号(CPHA=0):在SS被拉低的时刻,SCK分成两种情况,如果设置CPOL = 0,则SCK时序在这个时刻为低电平,如果设置CPOL = 1,则SCK时序在这个时刻为高电平.
采样时刻:因为设置为CPHA=0,所以采样时刻都是在SCK的奇数边沿(注意奇数边沿有时为下降沿,有时为上升沿).
因此,MOSI和MISO数据线的有效信号在SCK的奇数边沿保持不变,这个信号将在SCK奇数边沿时刻被采样,在非采样时刻,MOSI和MISO的有效信号才会发生切换.
这是一个CPHA = 1的时序图(情况是类似的,就是数据信号的采样时刻为偶数边沿)
PS:
使用SPI通讯时,主机和从机的时序要保持一致,就是两者都选择相同的SPI模式.
STM32的SPI特性:
STM32的小容量产品有1个SPI接口,中容量有2个,大容量的则有3个,特性如下:
1,单词传输可选择为8位或16位.
2,波特率于分频系数(最大为 Fpclk/2).
3,时钟极性(CPOL)和相位(CPHA)可编程设置.
4,数据顺序的传输顺序可进行编程选择,MSB在前或LSB在前.
5,可触发终端的专用发送和接收标志.
6,可以使用DMA进行数据传输操作.
STM32的SPI架构:
**接收:**MISO数据线接收到的信号经以为寄存器处理后,把数据转移到接收缓冲区,然后这个数据就可以由软件从接受缓冲区读出.
发送:要发送数据时,把数据写入到发送缓冲区,硬件会把它用以为寄存器处理后输出到MOSI数据线.
**SCK:**SCK的时钟信号则是由波特率发生器产生,我们可以通过波特率控制位(BR)来控制他输出的波特率.
CR1和CR2:控制寄存器CR1掌管着主控制电路,STM32的SPI模块的协议设置(时钟极性,相位等)就是由他来制定的,控制寄存器CR2则是用于设置各种中断使能.
NSS引脚:这个引脚是SPI协议中SS片选信号线,如果把NSS引脚配置为硬件自动控制,SPI模块能够自动判别它能否成为SPI的主机,或自动进入SPI从机模式.但实际用的更多的是由软件控制某些GPIO引脚单独作为SS信号,这个GPIO引脚可以随便选择.
PS:后续放上FLASH实例
- STM32之SPI_FLASH
- STM32之SPI_FLASH(实例)
- SPI_FLASH 操作
- 【STM32】STM32之串口
- 【STM32】STM32之NVIC
- 【STM32】STM32之SWD
- 【STM32】STM32之LED
- 【STM32】STM32之flash
- SPI_FLASH高速读写
- 【STM32】STM32之限位开关
- 【STM32】STM32之电量采集
- 【STM32】STM32之红外接收
- STM32之GPIO笔记
- STM32之RCC
- STM32之GPIO
- STM32之NVIC
- STM32之SysTick
- STM32之EXTI
- 手机归属地
- Tomcate环境变量配置
- grep简单使用
- Android Studio app变红叉
- GDB动态库搜索路径
- STM32之SPI_FLASH
- RFC3630 - TE Extensions to OSPF Version 2中文
- IIS GZIP 实战
- codeforces546D
- mipmap vs drawable
- 最大连续子数组
- RMI、Hessian、Burlap、Httpinvoker、WebService
- vim的配置文件初级配置(未完待续)
- Hdu 5782 Cycle(改变一个人的能力值(变为100000),使得整个公司的能力值的和最大)