STM的SPI框图以及通讯过程

野火STM32学习笔记(如有侵权立即删除)

1.STM32的SPI外设可用作通讯的主机及从机,支持最高的SCK时钟频率为fpclk/2(STM32F10x型号的芯片默认fpclk1为72MHz,fpclk2为36MHz),完全支持SPI协议的4种模式,数据帧长度可设置为8位或者16位,可设置MSB先行或LSB先行。它还支持双线全双工、双线单向以及单线模式。

2.框图

1.通讯引脚
2.时钟控制逻辑
3.数据控制逻辑
4.整体控制逻辑

    1.通讯引脚。STM32芯片有多个SPI外设,它们的SPI通讯信号引出到不同的GPIO引脚上,使用时必须配置到这些指定的引脚,以《STM32F10x规格书》为准。其中SPI1APB2上的设备,最高通信速率达36Mbtis/sSPI2SPI3APB1上的设备,最高通信速率为18Mbits/s。除了通讯速率,在其它功能上没有差异。

    2.时钟控制逻辑,SCK线的时钟信号,由波特率发生器根据“控制寄存器CR1”中的BR[0:2]位控制,该位是对fpclk时钟的分频因子,对fpclk的分频结果就是SCK引脚的输出时钟频率。其中的fpclk频率是指SPI所在的APB总线频率,APB1fpclk1APB2fpckl2

    3.数据控制逻辑,SPIMOSIMISO都连接到数据移位寄存器上,数据移位寄存器的数据来源来源于接收缓冲区及发送缓冲区。

通过写 SPI 的“数据寄存器 DR ”把数据填充到发送缓冲区中
读“数据寄存器 DR ”,可以获取接收缓冲区中的内容
其中数据帧长度可以通过“控制寄存器 CR1 ”的“ DFF 位”配置成 8 位及 16 位模式;配置“ LSBFIRST 位”可选择 MSB 先行还是 LSB 先行。

    4.整体控制逻辑

        1.整体控制逻辑负责协调整个SPI外设,控制逻辑的工作模式根据“控制寄存器(CR1/CR2)”的参数而改变,基本的控制参数包括前面提到的SPI模式、波特率、LSB先行、主从模式、单双向模式等等。

        2.在外设工作时,控制逻辑会根据外设的工作状态修改“状态寄存器(SR)”,只要读取状态寄存器相关的寄存器位,就可以了解SPI的工作状态了。除此之外,控制逻辑还根据要求,负责控制产生SPI中断信号、DMA请求及控制NSS信号线。

        3.实际应用中,一般不使用STM32 SPI外设的标准NSS信号线,而是更简单地使用普通的GPIO,软件控制它的电平输出,从而产生通讯起始和停止信号。

 

3.通讯时序图

控制 NSS 信号线,产生起始信号 ( 图中没有画出 )
把要发送的数据写入到“数据寄存器 DR ”中,该数据会被存储到发送缓冲区;
通讯开始, SCK 时钟开始运行。 MOSI 把发送缓冲区中的数据一位一位地传输出去; MISO 则把数据一位一位地存储进接收缓冲区中;
当发送完一帧数据的时候,“状态寄存器 SR ”中的“ TXE 标志位”会被置 1 ,表示传输完一帧,发送缓冲区已空;类似地,当接收完一帧数据的时候,“ RXNE 标志位”会被置 1 ,表示传输完一帧,接收缓冲区非空;
等待到“ TXE 标志位”为 1 时,若还要继续发送数据,则再次往“数据寄存器 DR ”写入数据即可;等待到“ RXNE 标志位”为 1 时,通过读取“数据寄存器 DR ”可以获取接收缓冲区中的内容。
假如使能了 TXE RXNE 中断, TXE RXNE 1 时会产生 SPI 中断信号,进入同一个中断服务函数,到 SPI 中断服务程序后,可通过检查寄存器位来了解是哪一个事件,再分别进行处理。也可以使用 DMA 方式来收发“数据寄存器 DR ”中的数据。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值