OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3330|回复: 1

SPI几种工作模式简介(AT32)

[复制链接]

34

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
210
金钱
210
注册时间
2019-12-27
在线时间
26 小时
发表于 2022-3-5 14:01:30 | 显示全部楼层 |阅读模式
SPI几种工作模式简介
SPI作为一个通用MCU均支持的基本接口,被广泛应用于各类带通讯的应用场景。其涵盖多种配置方式以满足不同的应用需求。本文以AT32F403A_407_Firmware_Library_V2.x.x版本库为基础,简单介绍各个模式的一个基本特点
依据工作模式特征划分,SPI通常可以工作在双线单向全双工,单线单向只收,单线双向半双工发送和单线双向半双工接收四种模式中的一种。
①双线单向全双工模式
【基础配置】
  SPI_CTRL1寄存器的SLBEN和ORA清零
  对应配置代码为,设定初始结构体的transmission_mode,即spi_init_struct.transmission_mode = SPI_TRANSMIT_FULL_DUPLEX;
【IO使用】
  此模式用到的IO最多,SCK_Pin、MISO_Pin、MOSI_Pin、CS_Pin(当选择使用硬件CS时)
【模式要点】
  此模式下的SPI将同步进行数据的收发,通讯起始是可控的,通过向主机发送数据缓冲器写数据来产生。因此此模式下若想关闭SPI或进入低功耗模式的话,需要等待RDBF置位,TDBE置位,并等待BF变为0

②单线单向只收模式模式
【基础配置】
  SPI_CTRL1寄存器的SLBEN清零并将ORA置位
  对应配置代码为,设定初始结构体的transmission_mode,即spi_init_struct.transmission_mode = SPI_TRANSMIT_SIMPLEX_RX;
【IO使用】
  作为主机时——将使用SCK_Pin、MISO_Pin、CS_Pin(当选择使用硬件CS时),MOSI_Pin脚将被释放为普通IO
  作为从机时——将使用SCK_Pin、MOSI_Pin、CS_Pin(当选择使用硬件CS时),MISO_Pin脚将被释放为普通IO
【模式要点】
  作为主机时,通讯将在SPI使能后立即开始,且直到SPI被关闭且关闭时刻帧数据接收完成时才会停止。因此此模式下若想关闭SPI或进入低功耗模式的话,需要等待倒数第二个RDBF置起,随后等待一个SPI_SCK周期立即关闭SPI,最后再等待RDBF置位并读出最后一笔通讯数据
  作为从机时,通讯是在SPI使能后且SCK线上出现有效边沿时(即CS线为低时的SCK线边沿)开始,且只要SCK线上无时钟边沿,通讯就会暂停。因此此模式下若想关闭SPI或进入低功耗模式的话,仅需等待BF变为0即可

③单线双向半双工发送模式
【基础配置】
  SPI_CTRL1寄存器的SLBEN和SLBTD置位
  对应配置代码为,设定初始结构体的transmission_mode,即spi_init_struct.transmission_mode = SPI_TRANSMIT_HALF_DUPLEX_TX;
【IO使用】
  作为主机时——将使用SCK_Pin、MOSI_Pin、CS_Pin(当选择使用硬件CS时),MISO_Pin脚将被释放为普通IO
  作为从机时——将使用SCK_Pin、MISO_Pin、CS_Pin(当选择使用硬件CS时),MOSI_Pin脚将被释放为普通IO
【模式要点】
  不管是作为主机还是从机,通讯起始均是可控的(作主机时通过向发送数据缓冲器写数据来产生、作从机时SPI使能后且SCK线上出现有效边沿时),因此此模式下若想关闭SPI或进入低功耗模式的话,需要等待TDBE置位,且BF变为0

④单线双向半双工接收模式
【基础配置】
  SPI_CTRL1寄存器的SLBEN置位且SLBTD清零
  对应配置代码为,设定初始结构体的transmission_mode,即spi_init_struct.transmission_mode = SPI_TRANSMIT_HALF_DUPLEX_RX;
【IO使用】
  作为主机时——将使用SCK_Pin、MOSI_Pin、CS_Pin(当选择使用硬件CS时),MISO_Pin脚将被释放为普通IO
  作为从机时——将使用SCK_Pin、MISO_Pin、CS_Pin(当选择使用硬件CS时),MOSI_Pin脚将被释放为普通IO
【模式要点】
  作为主机时,通讯将在SPI使能后立即开始,且直到SPI被关闭且关闭时刻帧数据接收完成时才会停止。因此此模式下若想关闭SPI或进入低功耗模式的话,需要等待倒数第二个RDBF置起,随后等待一个SPI_SCK周期立即关闭SPI,并再等待最后一个RDBF置位读出最后一笔通讯数据
  作为从机时,通讯是在SPI使能后且SCK线上出现有效边沿时(即CS线为低时的SCK线边沿)开始,且只要SCK线上无时钟边沿,通讯就会暂停。因此此模式下若想关闭SPI或进入低功耗模式的话,仅需等待BF变为0即可

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

821

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2070
金钱
2070
注册时间
2021-7-17
在线时间
647 小时
发表于 2022-3-5 15:11:13 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 02:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表