STM32的SPI架构及初始化结构体详解

1.STM32的SPI架构

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

2.通讯过程

• 控制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”中的数据。

3.SPI初始化结构体详解

跟其它外设一样,STM32标准库提供了SPI初始化结构体及初始化函数来配置SPI外设。初始化结构体及函数定义在库文件“stm32f10x_spi.h”及“stm32f10x_spi.c”中,编程时我们可以结合这两个文件内的注释使用

• SPI_Direction

本成员设置SPI的通讯方向,可设置为双线全双工(SPI_Direction_2Lines_FullDuplex),双线只接收(SPI_Direction_2Lines_RxOnly),单线只接收(SPI_Direction_1Line_Rx)、单线 只发送模式(SPI_Direction_1Line_Tx)。

• SPI_Mode

本成员设置SPI工作在主机模式(SPI_Mode_Master)或从机模式(SPI_Mode_Slave ),这两个模式的最大区别为SPI的SCK信号线的时序,SCK的时序是由通讯中的主机产生的。若被配置为从机模式,STM32的SPI外设将接 受外来的SCK信号。

• SPI_DataSize

本成员可以选择SPI通讯的数据帧大小是为8位(SPI_DataSize_8b)还是16位(SPI_DataSize_16b)。

• SPI_CPOL和SPI_CPHA

这两个成员配置SPI的时钟极性CPOL和时钟相位CPHA,这两个配置 影响到SPI的通讯模式, 时钟极性CPOL成员,可设置为高电平(SPI_CPOL_High)或低电平(SPI_CPOL_Low )。 时钟相位CPHA 则可以设置为SPI_CPHA_1Edge(在SCK的奇数边沿采 集数据) 或SPI_CPHA_2Edge (在SCK的偶数边沿采集数据) 。(我的spi简介介绍过)

• SPI_NSS

本成员配置NSS引脚的使用模式,可以选择为硬件模式(SPI_NSS_Hard )与软件模式(SPI_NSS_Soft ),在硬件模式中的SPI片选信号 由SPI硬件自动产生,而软件模式则需要亲自把相应的GPIO端口拉高或置低产 生非片选和片选信号。 实际中软件模式应用比较多。

• SPI_BaudRatePrescaler

本成员设置波特率分频因子,分频后的时钟即为SPI的SCK信号线的时 钟频率。这个成员参数可设置为fpclk的2、4、6、8、16、32、64、128、256分 频。

• SPI_FirstBit

所有串行的通讯协议都会有MSB先行(高位数据在前)还是LSB先行(低位 数据在前)的问题,而STM32的SPI模块可以通过这个结构体成员,对该特性编 程控制。

• SPI_CRCPolynomial

这是SPI的CRC校验中的多项式,若我们使用CRC校验时,就使用这个 成员的参数(多项式),来计算CRC的值。

配置完这些结构体成员后,要调用SPI_Init函数把这些参数写入到 寄存器中,实现SPI的初始化,然后调用SPI_Cmd来使能SPI外设

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@ 影

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

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

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

打赏作者

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

抵扣说明:

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

余额充值