SPI总线原理与电磁小车编程应用.pdfVIP

  • 0
  • 0
  • 约2.13千字
  • 约 2页
  • 2026-02-17 发布于北京
  • 举报

相关知识讲解:

SPI总线包含四根信号线,SCK时钟线,MOSI主机输出从机输入,MISO主机输入从

机输出,CS片选。SCK为数据传输控制时钟,MOSI主机将数据发送给从机,MISO

主机从从机接收数据,CS片选可以由单片机的普通IO管脚实现,用来选择主机和哪个从机

通信,由图可以看出一个SPI主机可以和多个从机通信,只要有足够多的片选就可以了。

SPI的寄存器不是很多,我们来一个一个看(443页开始l)。

SPI控制寄存器1(SPICR1):

SPIE=1:使能SPI中断;SPIE0:关闭SPI中断;

SPE=1:SPI模块使能;SPE=0:停止SPI模块,SPI端口为普通IO口

MSTR=1:SPI工作在主机模式;MSTR=0:SPI工作在从机模式

CPOL=1:时钟在空闲时候为CPOL=0:时钟在空闲时候为低电平。

CPHA=1:在偶数个时钟边沿开始采样数据;CPHA=0:在奇数个时钟边沿开始采样数据

LSBFE=1:发送数据时低位;LSBFE=10:发送数据时

SPI波特率寄存器SPIBR:

根据SPIBR的值设定SPI通信的波特率:具体的波特率,由下面的决定。

假如总线时钟为40M,我们想设置SPI传输速度为1M,怎么给寄存器赋值呢?

1M=40M/BaudRateDivsior,得出BaudRateDivsior=40,

40=5*8(SPPR+1)*2^(SPR+1)=5*2^3,得出SPPR=4,SPR=2

寄存器SPIBR=0x42.

SPI状态寄存器SPISR:

SPIF=1,:恭喜你,接收到新数据啦!

SPITEF=1:告诉你,可以发送新数据啦!

实际应用:

1.SPI初始化

SPI0BR=0x42;/*设置SPI波特率:fBUS=40M,1MSPI*/

SPI0CR1=0x50;/*0x50=01010000,启动SPI模块;设置为主模式,发送时*/

2.SPI发送接收函数

unsignedcharSpi0Send(unsignedchardata)

{

while(!(SPI0SR0x20));/*等待SPTEF=1,等待可以发送数据*/

SPI0DR=data;/*开始发送数据*/

while(!(SPI0SR0x80));/*等待接收成功*/

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档