liuquan3000 发表于 2021-10-6 09:19:49

浅谈STM32之SPI

1.SPI是串行外设接口的缩写,这句话怎么理解呢?
所谓外设接口 就是同外设(外部设备)通信的端口。通信的方式是采用串行通信。SPI就是这么一个东东。那么问题又来了,他是如何做到这样的呢?
如下图
https://pic3.zhimg.com/80/v2-e06ed9c7e724b17eb5fe39afe68e19ba_720w.jpg在左上部分中,(1)红色部分,从地址和数据总线中获得数据,通过1写入到2(发送缓冲区)中,2(发送缓冲区)中的数据再送到3(移位寄存器)中,3(移位寄存器)通过移位,将数据一位一位移出到4(MOSI接口)。MOSI和外部设备相连。红色部分是数据发送的过程。
(2)蓝色部分,<1>从外部设备获取到数据,送到<2>(移位寄存器)中,移位寄存器再将其送到<3>(接收缓存器)中,接收缓冲器通过地址和数据总线将其存储下来。


2.在上图中有个SCK(串口时钟),为啥又要这么个东东呢?
主设备可以和很多不同种类的外设进行通信,那么问题来了,不同的外设他们有自己的时钟系统,为了方便主设备和任意外设通信,就制定了一个规则,在通信的时候,必须在这个SCK的情况下,通信,理所当然,这个SCK是由主设备提供的(主设备的波特率发生器,见上图)。关于SCK又会牵扯到时钟极性和相位。之所以出现这个问题是在于,不同外设的时钟极性是不同的,主设备提供了统一的SCK,但是无法确定他们的极性,换句话说,有的设备是高电平有效,有的是低电平有效,为了达到和任何外设都可以通信的目标。所以出现了时钟极性和相位的这么一个选择,
https://pic4.zhimg.com/80/v2-fa246cec7711423b49ff6a2839a4a6ef_720w.jpg3.NSS又是个什么东东呢?
SPI是通过MOSI和MISO和外部设备进行通信的,假如此刻正在通信,如果此刻又想和一个外设进行单独通信,为了避免数据线的冲突,就可以使用NSS。主设备的NSS和从设备的NSS相连。
NSS又是如何做到的呢?如下图:
https://pic3.zhimg.com/80/v2-2468c416d2f035e70df7857f94686092_720w.jpg可以通过SSOE(蓝色方框)中的配置,来进入NSS硬件模式。通过硬件来确定NSS输出功能有没有开启。
也可以通过红色方框线的方式(软件NSS模式)进行,首先SSM来确定要不要开启软件NSS,确定开启后,数据通过NSS进入数据选择器,SSI来确定具体的是哪个从设备。从而数据选择器,选择出该从设备发过来的相应的数据。
到此打住,以上的功能满足了SPI的通信功能。接下来只需要好好配置SPI,就可以使用了,在配置SPI方面,芯片手册有明确的规定,只需要按部就班的做即可,如下图
https://pic4.zhimg.com/80/v2-0795846d3650b37786bd120533156437_720w.jpghttps://pic3.zhimg.com/80/v2-3d65d6bdc9ed1d731ced542f7a75c62a_720w.jpg
页: [1]
查看完整版本: 浅谈STM32之SPI