STM32之SPI总结

SPI串行通信协议,是一种高速、全双工、同步的通信总线。

一、物理层

SPI 通讯使用3 条总线及片选线,3 条总线分别为SCKMOSIMISO,片选线为SS/CSSPI可以一 个主机连接单个或多个从机,每个从机都使用一个引脚进行片选。 (支持一主一从通讯、一主多从通讯

SCLK (时钟) —— 时钟信号线
MOSI (主机输出 / 从机输入) —— 主机向从机发送数据的线
MISO (主机输入 / 从机输出) —— 从机向主机发送数据的线
SS/CS (从机选择 / 芯片选择) —— 用于主机选择给哪个从机发送数据的线

二、协议层

SPI协议定义了通讯的开始、停止、数据有效性、时钟同步等。

2.1、SPI基本通讯过程

下图是一个主机通讯时序,主机控制产生:SCK、MOSI、NSS信号,从机控制产生;MISO。

主机通过MISO信号线读取从机数据。

MOSI和MISO的新号只有在NSS为低电平时有效,在SCK的每个时钟周期MOSI和MISO传输一位数据。

 

 2.2、开始和停止信号

NSS 信号线由高变低,是SPI 通讯的起始信号。NSS 是每个从机各自独占的信号线,当从机在自己的NSS 线检测到起始信号后,就知道自己被主机选中了,开始准备与主机通讯。

NSS 信号由低变高,是SPI 通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。

 

 2.3、数据有效性

SPI 使用MOSI 及MISO 信号线来传输数据,使用SCK 信号线进行数据同步。MOSI 及MISO 数据线在SCK 的每个时钟周期传输一位数据,且数据输入输出是同时进行的。。

 如下图所示,MOSI 及MISO 的数据在SCK 的上升沿期间变化(红色框图),在SCK 的下降沿时被采样(绿色框图)。即在SCK 的下降沿时刻,MOSI 及MISO 的数据有效。

高电平时表示数据“1”,低电平表示数据“0”。

在其它时刻,数据无效,MOSI 及MISO 为下一次表示数据做准备。

SPI 每次数据传输可以8 位或16 位为单位,每次传输的单位数不受限制。

 2.4、时钟极性CPOL、时钟相位CPHA

时钟极性CPOL是指SPI通讯设备处于空闲状态时,SCK信号线的电平信号(即SPI通讯开始前,NSS线为高电平时SCK的状态)。

时钟相位CPHA是指数据的采样时刻,CPHA=0,MOSI和MISO数据上的信号将在SCK时钟线的“奇数边沿”采样。CPHA=1,数据在SCK的“偶数边沿”采样。

 CPOL和CPHA,分别可以是0或1,即对应四种通讯模式。(如下图所示)

 举例分析:

CPHA=1时,说明是在SCK偶数边沿采样。

CPOL=1时,SCK在空闲状态为高电平,也就是说开始信号有效后,SCK肯定是高电平到低电平的跳变。

 在实际操作过程中,我们怎么设置SPI的极性和相位呢?

1、由从设备硬件决定

SPI从设备,具体是什么模式,需要查看对应的模块手册。

SPI从设备,在空闲的时候,是高电平还是低电平,即决定了CPOL是0还是1;然后再找到关于设备是在上升沿还是下降沿去采样数据,对应着可以推算出CPHA是0还是1了。

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RA8875是一款高性能的LCD控制器,适用于各种嵌入式系统。而STM32则是一种基于ARM Cortex-M内核的32位系列微控制器。 要在STM32上使用SPI驱动RA8875,首先需要确保STM32具备SPI功能,并已正确配置SPI接口。然后,可以按照以下步骤进行RA8875的SPI驱动: 1. 确定SPI通信的时钟频率和模式。根据RA8875的规格书,选择适当的时钟频率和SPI模式,然后在STM32上配置SPI控制寄存器,使其与RA8875的要求相匹配。 2. 初始化SPI接口。使用STM32的SPI库函数,初始化SPI控制器,并设置相应的配置选项,如数据传输位数、主从模式、数据发送的顺序等。 3. 配置GPIO引脚。确保将SPI的SCLK、MISO和MOSI引脚正确连接到STM32的对应引脚,并配置为SPI功能。 4. 编写SPI传输函数。使用STM32的SPI库函数,编写SPI传输函数,以实现与RA8875之间的数据传输。这可以包括发送和接收数据。 5. 编写RA8875驱动程序。根据RA8875的数据手册,编写相应的驱动程序来初始化RA8875控制器,并执行各种操作,如设置显示模式、绘制图形等。在驱动程序中,使用SPI传输函数来与RA8875进行通信。 6. 调试和测试。进行必要的调试和测试,确保SPI驱动RA8875正常运行并与STM32稳定通信。 总结来说,SPI驱动RA8875需在STM32上配置并初始化SPI接口,编写SPI传输函数,并根据RA8875的规格书编写相应的驱动程序。通过这些步骤,可以实现STM32与RA8875之间的可靠通信和控制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值