STC15W4K58S4单片机SPI通讯

本文详细介绍了STC15W4K58S4单片机的SPI通讯,包括SPI与外围设备的广泛应用,通信线路配置,时钟极性和相位设置,以及硬件接口寄存器的功能和使用。还涵盖了移位寄存器和缓冲寄存器的区别以及SPI接口管脚切换的方法。
摘要由CSDN通过智能技术生成

                                        SPI通讯以STC15W4K58S4为例

串行口主要用于单片机与计算机和其它单片机进行通讯,SPI主要用于单片机与外围芯片之间的通讯。

例如:可以和DS1302芯片进行数据通讯,与SD卡进行通讯,与VS1003音乐播放芯片进行通讯,可以和串行移位芯片74HC595进行通讯,与AD转换芯片MCP3202-B通讯,与DA转换芯片TLC5615进行通讯,与其它单片机通讯,因此SPI接口的应用是非常广泛的。

通信线路:

SPI通讯最多需要4根数据线,片选线SS(低电平有效),SCLK(时钟线,由主机控制),MOSI(主机输出从机输入),MISO(主机输入从机输出)。

其中,如果是单主机单从机的话,片选线可以不要,将SS直接接地,使它始终保持低电平。当SS为高电平时,从器件的各个通讯管脚呈高阻态,相当于从通讯线路上断开。

重要概念:

(1)时钟极性(CPOL):定义了时钟处于空闲状态时的电平。

CPOL=0:时钟空闲状态为低电平

CPOL=1:时钟空闲状态为高电平

(2)时钟相位(CPHA):定义了数据的采样时刻

CPHA=0:前沿采样,后沿输出。单片机在每个时钟周期的第一个跳变沿(上升沿或下降沿)采样外部数据,在第二个跳变沿输出数据。

CPHA=1:前沿输出,后沿采样。单片机在每个时钟周期的第一个跳变沿(上升沿或下降沿)输出数据,在第二个跳变沿对外部数据进行采样。

时钟极性(CPOL)和时钟相位(CPHA)的组合可形成四种不同的数据传输时序:

不使用片选时,两种时钟相位(CPHA)的通讯波形

CPHA=0

CPHA=1

时序图的解读:

以时钟相位CPHA=1时为例子,CPHA=1时,是前沿输出,后沿采样。

可以看到,在红圈标示的地方,表示数据生成(或者说是改变也可以,也就是数据开始建立),当数据稳定后,在后沿,也就是绿线标明的虚线处,数据被采样。主机从机都遵从此时序。

一般,如果采用软件模拟SPI通讯,我们需要尽量设置在数据信号的中心位置进行读取,因为这时数据是最稳定的。如果使用SPI硬件通讯,则不必关心这些细节,硬件会自动控制时序。

硬件SPI接口相关寄存器:

位号

D7

D6

D5

D4

D3

D2

D1

D0

位名称

SSIG

SPEN

DORD

MSTR

CPOL

CPHA

SPR1

SPR0

SSIG:片选引脚是否有效选择位

1:片选引脚无效。

0:片选引脚有效(主机无需片选)。片选线/ss为低时芯片选中,可正常通信,当片选线/ss为高时芯片没有选中,不参与通讯。

SPEN:SPI通讯使能位

1:开启SPI通讯模式,相关引脚为SPI通讯管脚。

0:SPI引脚不工作,与SPI相关的引脚就是普通IO口。也就是默认的弱上拉输出状态。

DORD:字节发送顺序

1:低位在前,高位在后

0:高位在前,低位在后

MSTR:用来设置单片机是主机还是从机

1:主机

0:从机

CPOL:时钟极性

定义了时钟线处于空闲状态时的电平

1:空闲时为高电平

0:空闲时为低电平

CPHA:时钟相位

定义了一个时钟周期中的采样时刻,即前沿采样还是后沿采样,前沿输出还是后沿输出。

1:前沿输出,后沿采样。

0:前沿采样,后沿输出。

SPR1,SPR0:设置SPI通讯速度

SPR1

SPR0

时钟SCLK(STC15F2K60S2系列和以前的STC12系列)

时钟SCLK(STC15W系列)

0

0

SYS_clk/4

SYS_clk/4

0

1

SYS_clk/16

SYS_clk/8

1

0

SYS_clk/64

SYS_clk/16

1

1

SYS_clk/128

SYS_clk/32

例如,如果系统时钟SYS_clk是22.1184MHz,则默认情况下SPR1,SPR0为00,也就是系统时钟的4分频,22.1184MHz/4=5.5MHz左右。

只有主单片机才需要设置时钟,从单片机无法设置时钟,时钟信号是由主单片机控制的。所以,这两位对于从单片机来说无效。

从机能够接受的时钟频率最高不得超过主单片机时钟频率SYS_clk的4分频。

例如,主机和从机都使用内部RC时钟33.1176MHz,主机和从机最高允许的时钟频率为33.1176MHz/4=8.3MHz。

SPI允许的最高通信速度大约在8MHz左右。

SPSTAT:SPI通讯状态寄存器

位号

D7

D6

D5

D4

D3

D2

D1

D0

位名称

SPIF

WOCL

-

-

-

-

-

-

SPIF:SPI传输完成标志。

当一次传输完成时,SPIF被置1,此时,如果SPI中断被打开(ESPI=1,EA=1),则产生中断,SPIF标志通过软件向其写入1而清零,例如:

SPSTAT=0xC0;执行后SPSTAT=0x00。

WOCL:SPI写冲突标志。

当一个数据还在传输,又向数据寄存器SPDAT写入数据时,WOCL被置1,WOCL标志通过软件向其写入1而清零

SPDAT:SPI数据寄存器

位号

D7

D6

D5

D4

D3

D2

D1

D0

位名称

MSB

LSB

位7—0:保存SPI通信数据字节。MSB为最高位,LSB为最低位。

例如,主机发送数据:

SPDAT=XX;   //执行此命令后硬件电路自动输出变量XX数据并接收从机数据。

a=SPDAT;      //执行此命令后,将读出SPI接口收到的数据

这里需要说明一下的是:SPI传输数据时会使用到移位寄存器,与这个移位寄存器地址相同的还有一个缓冲寄存器。它们虽然地址相同,但却是两个不同的存储区域。

当SPI向外围芯片发送数据时,操作的是移位寄存器,例如:                         

SPDAT=XX;

这条语句就是将数据XX写入移位寄存器,之后硬件自动启动发送过程,在时钟信号的控制下,数据将被发送出去。

当SPI接收外围芯片发送的数据时,操作的是缓冲寄存器,例如:

a=SPDAT; 

执行此命令后,将读取SPI端口收到的数据,并把这个数据放到变量a中

SPDAT代表同一物理地址,但是在SPI发送数据和接收数据时,操作的是不同的寄存器。

发送时操作的是移位寄存器,接收时操作的是缓冲寄存器。

移位寄存器缓冲寄存器

SPI接口管脚切换

通过对特殊功能寄存器AUXR1的SPI_S1与SPI_S0的设置可以切换SPI模块引脚位置。AUXR1寄存器不能位寻址,只能按字节操作方式对其进行设置。

AUXR1辅助功能寄存器1:

位号

D7

D6

D5

D4

D3

D2

D1

D0

位名称

S1_S1

S1_S0

CCP_S1

CCP_S0

SPI_S1

SPI_S0

0

DPS

其中SPI_S1和SPI_S0是SPI引脚切换选择位:

SPI_S1

SPI_S0

SPI接口引脚位置

SS/

MOSI

MISO

SCLK

0

0

P1.2

P1.3

P1.4

P1.5

0

1

P2.4

P2.3

P2.2

P2.1

1

0

P5.4

P4.0

P4.1

P4.3

1

1

无效

以上就是基于STC15W4K58S4单片机SPI通讯的基本知识。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值