梳理STM32F429之通信传输部分---NO.8 硬件SPI

目录

 

一、STM32 的 SPI 特性及架构:

二、SPI 初始化结构体详解:

三、硬件SPI—读写串行 FLASH 实验


一、STM32 的 SPI 特性及架构:

1、引脚简介:

(1)   (Slave Select):从设备选择信号线,常称为片选信号线,也称为 NSS、 CS,以下用 NSS 表示。

(2) SCK (Serial Clock): 时钟信号线,用于通讯数据同步。两个设备之间通讯时,通讯速率受限于低速设备。

(3) MOSI (Master Output, Slave Input): 主设备输出/从设备输入引脚。

(4) MISO(Master Input,, Slave Output): 主设备输入/从设备输出引脚。

2、STM32 的 SPI 通讯引脚:

       其中 SPI1SPI4SPI5SPI6 APB2 上的设备,最高通信速率达 45Mbtis/s, SPI2SPI3 APB1 上的设备,最高通信速率为 22.5Mbits/s。

3、通讯过程:

4、SPI 的四种模式:

       由 CPOL 及 CPHA 的不同状态, SPI 分成了四种模式,主机与从机需要工作在相同的模式下才可以正常通讯,实际中采用较多的是“模式 0”与“模式 3”。

  • CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时
  • CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时
  • CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿
  • CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿

5、 W25Q256内存划分情况:

W25Q256芯片:

每个芯片 0-511个块   --- 每个块64KB

每个块有 0-15个扇区 --- 每个扇区4KB

512块 X 64KB = 32768‬KB = 32M ( 32768‬KB / 1024 )

二、SPI 初始化结构体详解:

       STM32标准库提供了SPI初始化结构体初始化函数来配置SPI外设。初始化结构体及函数定义在库文件“stm32f4xx_spi.h”及“stm32f4xx_spi.c”中。

typedef struct 
{ 

uint16_t SPI_Direction;       /*设置 SPI 的单双向模式 */ 
uint16_t SPI_Mode;               /*设置 SPI 的主/从机端模式 */ 
uint16_t SPI_DataSize;           /*设置 SPI 的数据帧长度,可选 8/16 位 */ 
uint16_t SPI_CPOL;                /*设置时钟极性 CPOL,可选高/低电平*/ 
uint16_t SPI_CPHA;                /*设置时钟相位,可选奇/偶数边沿采样 */ 
uint16_t SPI_NSS;         /*设置 NSS 引脚由 SPI 硬件控制还是软件控制*/ 
uint16_t SPI_BaudRatePrescaler; /*设置时钟分频因子,fpclk/分频数=fSCK */ 
uint16_t SPI_FirstBit;           /*设置 MSB/LSB 先行 */ 
uint16_t SPI_CRCPolynomial;      /*设置 CRC 校验的表达式 */ 
} SPI_InitTypeDef;

(1) SPI_Direction
       本成员设置 SPI 的通讯方向,可设置为双线全双工(SPI_Direction_2Lines_FullDuplex),双线只接收(SPI_Direction_2Lines_RxOnly),单线只接收(SPI_Direction_1Line_Rx)、单线只发送模式(SPI_Direction_1Line_Tx)。

(2) SPI_Mode
       本成员设置 SPI 工作在主机模式(SPI_Mode_Master)或从机模式(SPI_Mode_Slave ),这两个模式的最大区别为 SPI 的 SCK 信号线的时序, SCK 的时序是由通讯中的主机产生的。若被配置为从机模式, STM32 的 SPI 外设将接受外来的 SCK 信号。

(3) SPI_DataSize
       本成员可以选择 SPI 通讯的数据帧大小是为 8 位(SPI_DataSize_8b)或16 位(SPI_DataSize_16b)。

(4) SPI_CPOLSPI_CPHA


       时钟极性 CPOL 成员,可设置为高电平(SPI_CPOL_High)或低电平(SPI_CPOL_Low )。
       时钟相位 CPHA 则可以设置为 SPI_CPHA_1Edge(在 SCK 的奇数边沿采集数据) 或SPI_CPHA_2Edge (在 SCK 的偶数边沿采集数据) 。

(5) SPI_NSS
       本成员配置 NSS 引脚的使用模式,可以选择为硬件模式(SPI_NSS_Hard )与软件模式(SPI_NSS_Soft ),在硬件模式中的 SPI 片选信号由 SPI 硬件自动产生,而软件模式则需要我们亲自把相应的 GPIO 端口拉高或置低产生非片选和片选信号。实际中软件模式应用比较多。

(6) SPI_BaudRatePrescaler

       本成员设置波特率分频因子,分频后的时钟即为 SPI 的 SCK 信号线的时钟频率。这个成员参数可设置为 fpclk 的 2、 4、 6、 8、 16、 32、 64、 128、 256 分频。

(7) SPI_FirstBit

       所有串行的通讯协议都会有 MSB 先行(高位数据在前)还是 LSB 先行(低位数据在前)的问题,而 STM32 的 SPI 模块可以通过这个结构体成员,对这个特性编程控制。

(8) SPI_CRCPolynomial
       这是 SPI 的 CRC 校验中的多项式,若我们使用 CRC 校验时,就使用这个成员的参数(多项式),来计算 CRC 的值。

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值