STM32的SPI架构剖析

前言

本文是学习火哥的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架构剖析

STM32的SPI架构剖析

①通讯引脚

②时钟控制逻辑

③数据控制逻辑

④整体控制逻辑

1.通讯引脚

STM32芯片有多个SPI外设,它们的SPI通讯信号引出到不同的GPIO引脚上,使用时必须配置到这个指定的引脚,以《STM32F10x规格书》为准。
STM32F10x的SPI引脚

其中SPI1是APB2上的设备,最高通信速率达36Mbits/s,SPI2、SPI3是APB1上的设备,最高通信速率为18Mbits/s。除了通讯速率,在其他功能上没有差异。

2.时钟控制逻辑

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

其中的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”中的数据。

### 回答1: STM32F407是意法半导体(STMicroelectronics)推出的一款32位ARM Cortex-M4内核的微控制器。它具有高性能和低功耗的特点,广泛应用于工业自动化、通信、电力电子等领域。AD7606是ADI(Analog Devices)生产的一款高速16通道的24位模拟输入型模数转换器。SPI是一种串行外设接口,用于在微控制器和外部设备之间进行通信。 STM32 407和AD7606可以通过SPI接口进行通信。STM32 407可以充当主设备,与AD7606建立通信链接。通过发送命令和接收数据,STM32 407可以控制AD7606进行转换数据的采集和传输。 对于实现STM32 407和AD7606之间的SPI通信,首先需要配置STM32 407的SPI外设。具体而言,需要设置SPI的时钟分频、数据位数、数据传输模式等参数。然后,需要设置GPIO引脚,将其与SPI的时钟线(SCLK)、数据线(MISO、MOSI)以及片选线(CS)连接起来。 一旦SPI配置完成,STM32 407可以通过发送特定的命令和数据来与AD7606进行通信。例如,可以发送读取数据的命令,并接收AD7606转换的模拟信号。STM32 407可以通过查询状态寄存器来检查数据是否准备好。一旦数据准备好,就可以使用适当的数据结构接收和处理AD7606的转换数据。 总而言之,STM32 407可以通过SPI接口与AD7606进行通信,实现数据的采集和传输。通过合理配置SPI的参数和GPIO引脚,STM32 407可以有效地控制和监控AD7606的转换过程,并获取所需的模拟输入数据。 ### 回答2: STMicroelectronics的STM32F407微控制器与AD7606 ADC器件通过SPI接口进行通信。 STM32F407是一款高性能的32位微控制器,配备ARM Cortex-M4内核。它具有丰富的外设集成,包括多个通用定时器,通用串行接口(USART,SPI,I2C等),通用输入/输出引脚,以及用于存储和调试的Flash和SRAM。 AD7606是一种16通道、16位、250kSPS(采样率)的模拟到数字转换器(ADC)。它具有高精度、低功耗和全差分/单端输入功能,适用于多种工业和医疗应用。 两者之间通过SPI(串行外设接口)进行通信。SPI是一种用于设备间通信的串行协议,它支持全双工通信,并使用主从架构。在此架构中,STM32F407作为主设备发送命令和控制信号,并从AD7606读取数据。 为了实现通信,首先需要配置STM32F407的SPI控制器,以设置时钟频率、数据位宽、模式和架构等参数。然后,可以使用SPI发送数据包含命令和参数到AD7606,同时接收来自AD7606的数据。 具体流程如下: 1. 初始化STM32F407的SPI控制器,设置合适的时钟频率和模式。 2. 配置STM32F407的GPIO引脚,以便将其连接到AD7606的相应引脚(如SCLK,MISO,MOSI等)。 3. 在STM32F407中编写相应的代码,以发送SPI命令和参数给AD7606,并从AD7606接收数据。 4. 解析AD7606返回的数据,以获取采集到的模拟信号信息。 5. 根据应用需求进行进一步的处理和分析,如滤波、数据保存等。 通过使用STM32F407和AD7606,您可以实现高性能、高精度的模拟信号采集和处理系统,适用于各种应用领域,如工业自动化、医疗诊断等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FantasyQin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值