搭建机器人电控系统——通信协议——SPI通信及其实例

通信协议

串口通信详解
IIC通信详解
SPI通信详解
CAN通信详解


计算机与外界的信息交互称为通信

基本的通信方式分为两种:
串行通信:所传送的数据各位按顺序一位一位地发送或接受,占用资源少,速度相对较慢。
并行通信:所传送的数据的各个位是同时发送或接受。速度快,占用引脚资源多。

通信的速率
比特率(bit rate):每秒能传输的二进制位数。
波特率(Baud rate):每秒能传输的码元数(不一定是二进制)。
对于数字信号而言,波特率=比特率。

串行通信的种类
同步通信:带时钟同步信号传输,通讯双方是受同一个时钟源控制,如I2C、SPI、USART。
异步通信:不带时钟信号同步,不是同一个时钟源,按照一定规则传输,如USART、UART、单总线、CAN。

串行通信的方式
单工:只允许单方向传输,只需一条信号线
半双工:允许非同时进行的双方向传输,只需一条信号线。
全双工:允许同时进行双方向传输,需要两条信号线。

通信协议是主控MCU与各类驱动器、传感器之间实现信息交互的基本逻辑,搞懂通信协议在机器人的电控系统中占有很重要的地位。在接下来的内容中,我将分别讲解串口IICSPICAN通信协议的区别原理以及结合实际一些模块的代码部分。


SPI通信

由于I2C只能半双工传输,效率太低,只能适用于短距离通信。SPI传输由此弥补了这个缺点。SPI是一种高速的,全双工,同步的通信总线,适用于远距离通信

SPI的结构

在这里插入图片描述

SPI使用4条线完成通信功能:(若是3线SPI,则输入输出共用一根线)

  • MISO:主设备数据输入,从设备数据输出。
  • MOSI:主设备数据输出,从设备数据输入。
  • SCLK:时钟信号,由主设备产生。
  • CS:从设备片选信号,由主设备控制。当有多个从设备的时候,因为每个从设备上都有 一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需要将从设备对应的片选引脚电平拉低或者是拉高
    在这里插入图片描述

SPI的寻址方式

由于SPI有专门的地址片选线CSSPI不需要进行寻址操作,在多个从设备中,每个从设备需要独立的使能信号CS,硬件上要比I2C更加复杂。

SPI的工作模式

同步通信的含义:因为有时钟线SCLK的存在,如果一方在上升沿输出数据,那么另一方就必须在下降沿接收数据

CPOL时钟极性,决定上升沿还是下降沿。在空闲状态下,若SCLK为高电平,CPOL=1,若SCLK为低电平,CPOL=0。在通信状态下,CPOL=1为下降沿,CPOL=0为上升沿。
CPHA时钟相位,决定发送接收时间点。CPHA=1,表示发送时间点在SCLK一个时钟周期的第一个沿上;CPHA=0,表示接收时间点在SCLK一个时钟周期的第一个沿上。

四种传输模式:

--------------------------------------------------------------------------------------------------------------------
CPOL=0,CPHA=0空闲状态下,SCLK为低电平。通信状态下,接收时间点在SCLK第一个上升沿上,对应发送时间点在上一个数据SCLK的下降沿上或在CS使能的边沿上。
在这里插入图片描述

CPOL=0,CPHA=1空闲状态下,SCLK为低电平。通信状态下,发送时间点在SCLK第一个上升沿上,对应接收时间点在接下来SCLK的下降沿上。
在这里插入图片描述

CPOL=1,CPHA=0空闲状态下,SCLK为高电平。通信状态下,接收时间点在SCLK第一个下降沿上,对应发送时间点在这个SCLK的上升沿上。
在这里插入图片描述

CPOL=1,CPHA=1空闲状态下,SCLK为高电平。通信状态下,发送时间点在SCLK第一个下降沿上,对应接收时间点在下一个SCLK的上升沿上。
在这里插入图片描述

--------------------------------------------------------------------------------------------------------------------

SPI的传输协议

传输方式:四种传输模式(上升沿、下降沿、前沿、后沿),具体工作方式由串行同步时钟极性(CPOL)和时钟相位(CPHA)来共同决定。

传输过程:SPI是一个环形总线结构,由CS、SCLK、MISO、MOSI构成,由于硬件上相对复杂,所以在软件通信上就会相对简单。其传输过程其实很简单,主要是在时钟线SCLK的控制下,两个双向移位寄存器进行数据交换。

SPI的缺点:没有指定的流控制,没有应答机制确定是否接受到数据。

SPI正常通信过程

①主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。

②串行移位寄存器通过MOSI线将字节传送给从机,从机也将自己的串行移位寄存器中的内容通过MISO线返回给主机。这样,两个移位寄存器的内容就被交换。

③由于全双工,读和写操作是可以同步完成的;如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。


STM32中的SPI通信(库函数)

①初始化函数

在这里插入图片描述

设置SPI_InitStructure:

  • SPI_Direction:SPI方向设置,可以设置为单向收/发或者双向传输;
  • SPI_Mode:SPI模式设置,可以设置该设备为主/从;
  • SPI_DataSize:SPI的数据长度,可以设置为8位/16位;
  • SPI_CPOL:SPI时钟极性设置;
  • SPI_CPHA:SPI时钟相位设置;
  • SPI_NSS注意这里配置的是你所编程的硬件对象,即你的单片机,如果NSS为高电平,那么这个对象就是主机,如果NSS为低电平,那么这个对象为从机。STM32设置SPI_NSS 有两种模式:SPI_NSS_Soft(软件设置,当你在SPI_Mode中定义对象为主机后,就会 将NSS变为高电平)和SPI_NSS_Hard(硬件设置,你必须把MCU硬件对应SPI的NSS 引脚拉高,比如和VCC接在一起才能让你的对象变为主机);
  • SPI_BaudRatePrescaler:定义波特率分频值,可以设置为2到256;
  • SPI_FirstBit:数据传输方向:指定数据传输是从高位开始还是低位开始;
  • SPI_CRCPolynomial:CRC计算的多项式;

②SPI的通信速率设置

SPI波特率=PCLKx/SPI_BaudRatePrescaler;

如SPI1挂载在APB2线上,APB2时钟PCLK1=84MHZ,则SPI波特率=328.125KHZ。

③SPI的收发通信

在这里插入图片描述

由SPI_I2S_SendData发送一个字节引起SPI通信传输,从而可以用SPI_I2S_ReceiveData接收移位寄存器回来的一个字节。


SPI通信实例——2.4G通信模块(库函数)

以NRF24L01模块为例,我们的目的是通过SPI与2.4G模块建立通信,然后对2.4G模块进行配置,使其具有收发信息的功能。

整体思路:2.4G模块与2.4G模块之间无线通信。若进行数据接收,2.4G模块在接收完数据之后,IRQ引脚会被拉低,此时可以利用我们的MCU在外部中断中对2.4G模块的接收邮箱通过SPI通信接收数据;若进行数据发送,MCU通过SPI通信将要发送的数据塞入2.4G模块的发送寄存器,发完之后收到ACK应答信号,将IRQ引脚拉低,此时可以利用我们的MCU在外部中断中选择再次发送数据。

NRF24L01模块共有六个引脚,除了4个引脚用于SPI通信外,另外两个分别是CE(设置模块的无线收发等工作模式)和IRQ(2.4G模块在无线收发完成之后产生低电平信号

库函数编程:

①六个引脚的连接:将4个用于SPI通信的引脚与MCU对应SPI的引脚相连,CE拉高,IRQ接任意一个IO口,保证能够使用外部中断EXTI。
在这里插入图片描述
在这里插入图片描述

②MCU作为SPI通信主机的初始化
在这里插入图片描述

已有的发送函数:
SPI_I2S_SendData(SPI1, TxData);
发送区空标志:SPI_I2S_FLAG_TXE

已有的接收函数:
SPI_I2S_ReceiveData(SPI1);
接收一个字节标志:SPI_I2S_FLAG_RXNE

外部中断IRQ对应IO口的初始化:
在这里插入图片描述
PS:还有EXTI的NVIC配置。

③如何对2.4G模块进行配置?——对2.4G模块寄存器进行操作
在这里插入图片描述
如何写寄存器?

  • 识别寄存器:0x20+寄存器地址
  • 写寄存器:data

如何读寄存器?

  • 识别寄存器:0x00+寄存器地址
  • 读寄存器:写入0,将数据交换过来

如何设置2.4G模块收/发模式?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值