前言
STM32的SPI特性及架构
STM32的SPI外设简介
STM32的SPI架构剖析
1.通讯引脚
2.时钟控制逻辑
3.数据控制逻辑
4.整体控制逻辑
通讯过程
前言
本文是学习火哥的STM32教程所做的学习笔记。学习STM32的SPI特性及架构前应学习的内容:SPI协议。
STM32的SPI特性及架构
STM32的SPI外设简介
STM32的SPI外设可用作通讯的主机及从机,支持最高的SCK时钟频率为fpclk/2(STM32F10x型号的芯片默认fpclk1为72MHZ,fpclk2为36MHZ),完全支持SPI协议的4种模式,数据帧长度可设置为8位或16位,可设置数据MSB先行或LSB先行。它还支持双线全双工(前面说明的都是这种模式)、双线单向以及单线模式。
STM32的SPI架构剖析
①通讯引脚
②时钟控制逻辑
③数据控制逻辑
④整体控制逻辑
1.通讯引脚
STM32芯片有多个SPI外设,它们的SPI通讯信号引出到不同的GPIO引脚上,使用时必须配置到这个指定的引脚,以《STM32F10x规格书》为准。
其中SPI1是APB2上的设备,最高通信速率达36Mbits/s,SPI2、SPI3是APB1上的设备,最高通信速率为18Mbits/s。除了通讯速率,在其他功能上没有差异。
2.时钟控制逻辑
SCK线的时钟信号,由波特率发生器根据“控制寄存器CR1”中的BR[0:2]位控制,该位是对fpclk时钟的分频因子,对fpclk的分频结果就是SCK引脚的输出时钟频率。
其中的fpclk频率是指SPI所在的APB总线频率,APB1为fpclk1,APB2为fpclk2。
3.数据控制逻辑
SPI的MOSI及MISO都连接到数据移位寄存器上,数据移位寄存器的数据来源于接受缓冲区及发送缓冲区。
通过写SPI的“数据寄存器DR”把数据填充到发送缓存区中
通过读“数据寄存器DR”,可以获取接收缓冲区中的内容。
其中数据长度可以通过“控制寄存器CR1”的“DFF位”配置成8位及16位模式;配置“LSBFIRST位”可选择MSB先行还是LSB先行。
4.整体控制逻辑
整体控制逻辑负责协调整个SPI外设,控制逻辑的工作模式根据“控制寄存器(CR1/CR2)”的参数而改变,基本的控制参数包括前面提到的SPI模式,波特率、LSB先行、主从模式、单双向模式等等。
在外设工作时,控制逻辑会根据外设的工作状态修改“状态寄存器(SR)”,只要读取状态寄存器相关的寄存器位,就可以了解SPI的工作状态了。除此之外,控制逻辑还根据要求,负责控制产生SPI中断信号、DMA请求及控制NSS信号线。
实际应用中,一般不使用STM32 SPI外设的标准NSS信号线,而是更简单地使用普通的GPIO,软件控制它的电平输出,从而产生通讯起始和停止信号。
通讯过程
控制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”中的数据。
————————————————
版权声明:本文为CSDN博主「FantasyQin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_52167539/article/details/118884132