历史上的今天
今天是:2024年10月25日(星期五)
2021年10月25日 | stm32专题十八:SPI框图及通讯过程
2021-10-25 来源:eefocus
stm32的SPI外设:

1 通讯引脚和结构框图
不同的SPI设备(由于挂载在不同的总线上),通讯速率不同

结构框图:

2 通讯速度
由控制寄存器CR1的BR[2:0]位来控制,主要就是对Fpclk(APB1时钟为72M,APB2时钟为36M)进行分频。

3 数据控制逻辑
SPI的MOSI及MISO都连接到数据移位寄存器上,数据移位寄存器的数据来源来源于接收缓冲区及发送缓冲区。
通过写SPI的“数据寄存器DR”把数据填充到发送缓冲区中。
通过读“数据寄存器DR”,可以获取接收缓冲区中的内容。
其中数据帧长度可以通过“控制寄存器CR1”的“DFF位”配置成8位及16位

模式;配置“LSBFIRST位”可选择MSB先行还是LSB先行。

stm32的SPI实际上有两个移位寄存器,一个发送一个接收。我们在发送数据时,实际上是把数据填入到发送缓冲区,再逐个发送。而接收过程,实际上就是把接收移位寄存器中的数据不断的读到缓冲区。

4 整体控制逻辑 CR1 / CR2
状态寄存器SR

5 通讯过程:
通讯过程:
控制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”中的数据。
史海拾趣
|
我手里的CY1C12开发板上的芯片是FPGA的EP1C12Q240C8,今天我用一个小程序,试图点亮那四个七段数码管。用的动态显示。然而,当我配置管脚,下载到板上后,数码管能够顺序点亮,但是不是之前程序里面设计的数字,有些乱码的感觉。 我怀疑是管脚配置 ...… 查看全部问答> |
|
XILINX FPGA 设计的点滴 1、为时钟信号选用全局时钟缓冲器BUFG 2、尽量只用一个时钟沿来寄存数据 3、除了用CLKDLL或DCM产生的时钟外不要在内部产生时钟 4、注意状态机编码的可靠性:状态机转移状态改变的位数越少,则功能越可靠。 5、逻辑 ...… 查看全部问答> |
|
evc中怎样编辑多国语言 比如说我要SetWindowText(_T(\"? ?? ??\")); 但在Evc中成了SetWindowText(_T(\"? ?? ??\")); … 查看全部问答> |
|
我在初始化ARM9260EJ-S CPU(AT91SAM9260EJ-S)时遇到了一个问题,SDRAM 8M,按Section初始化,影射成8个块,每块1M,SDRAM的物理地址为0x20000000,未启动MMU时,SDRAM上的所有读写都正常,启动MMU之后,0x20500000开始的1M SDRAM读写就发现异常,MMU初 ...… 查看全部问答> |
|
EE_FPGA V1.0 调试进展(2010.10.17更新) 正面: 反面: 目前进展: 1. 最小系统工作 2. LED工作 3. key工作 4. usb转串口驱动正常,串口工作正常 稍后上图,敬请关注 10.17更新 [ 本帖最后由 chenzhufly 于 2010-10-17 14:20 编辑 ]… 查看全部问答> |
|
这是为LED灯T8管供电的隔离驱动电源,那个最长的驱动电源,装在灯管后,售价是在200元以上的,只是这些驱动电源在装进灯管时,都是用热缩套管套着得,这在欧美是不允许的,但是国内可以! [ 本帖最后由 dongguanze 于 2011-7-31 09:23 编辑 ]… 查看全部问答> |








