IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32——SPI接口原理与配置 -> 正文阅读

[嵌入式]STM32——SPI接口原理与配置

一、SPI接口简介

SPI是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口,是Motoroal首先在其MC68HCXX系列处理器上定义的。

SPI是一种高速的、全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省了空间,提供方便,主要应用在EEPROM、FLASH、实时时钟、AD转换器还有数字信号处理器和数字信号解码器之间

SPI接口框图

SPI内部结构简明图

SPI接口一般使用4条线通信:

MISO主设备数据输入,从设备数据输出;MOSI主设备数据输出,从设备数据输入;

SCLK时钟信号,由主设备产生。CS从设备片选信号,由主设备控制。

SPI工作原理总结:

1、硬件上为4根线。

2、主机和从机都有一个串移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。

3、串行移位寄存器通过MOSI信号线将字节传送给从机,从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容就被交换。

4、外设的写操作和读操作是同步完成的。如果只进行写操作,主机只忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。

二、SPI特征

1、3线全双工同步传输。

2、8位或16位传输帧格式选择。

3、主或从操作。

4、支持多主模式。

5、8个主模式波特率预分频系数(最大为Fpclk/2)

6、从模式频率(最大为Fpclk/2)

7、主模式和从模式的快速通信。

8、主模式和从模式下均可由软件或硬件进行NSS管理:主/从操作模式的动态改变。

9、可编程的时钟极性和相位。

10、可编程的数据顺序,MSB在前或LSB在前。

11、可触发中断的专用发送和接收标志。

12、SPI总线忙状态标志。

13、支持可通信的硬件CRC:——在发送模式下,CRC值可以被作为最后一个字节发送。

——在全双工模式中对接收到的最后一个字节自动进行CRC校验。

14、可触发中断的主模式故障、过载以及CRC错误标志。

15、支持DMA功能的1字节发送和接收缓冲器:产生发送和接收请求。

(STM32 SPI接口可配置为支持SPI协议或者支持I2C音频协议,默认是SPI模式。可以通过软件切换到I2C方式)

从器件选择(NSS)引脚管理

时钟信号的相位和极性

CPHA=1(采集数据的时间)

CPHA=0(采集数据的时间)

数据帧格式

根据SPI_CR1寄存器中的LSBFISRST位,输出数据位时可以MSB在先也可以LSB在先。

根据SPI_CR1寄存器的DFF位,每个数据帧可以是8位或是16位,所选择的数据帧格式对发送和/或接收都有效

?状态标志:应用程序通过3个状态标志位可以完全监控SPI总线的状态。

发送缓冲器空闲标志(TXE):此标志为‘1’表明发送缓冲器为空,可以写下一个待发送的数据进入缓冲器中。当写入SPI_DR时,TXE标志被清除。

接收缓冲器非空(RXNE):此标志为‘1’时表明在接收缓冲器中包含有效的接收数据。读SPI数据寄存器可以清除该标志位。

忙(Busy)标志:BSY标志由硬件设置与清除(写入此位无效果),此标志表明SPI通信层的状态。

SPI中断:

SPI引脚配置(3个SPI)?

三、SPI常用寄存器和相关库函数

SPI常用寄存器

SPI控制寄存器1(SPI_CR1)

SPI控制寄存器2(SPI_CR2)

SPI状态寄存器(SPI_SR)

SPI数据寄存器(SPI_DR)

SPI_I2S配置寄存器(SPI_I2C_CFGR)

SPI_I2S预分频寄存器(SPI_I2CSPR)

SPI相关库函数?

void SPI_I2C_DeInit(SPI_TypeDef* SPIx);
void SPI_Init(SPI_TypeDef* SPIx,SPI_InitTypeDef* SPI_InitStruct);//SPI初始化函数
void SPI_Cmd(SPI_TypeDef* SPIx,FunctionalState NewState);//SPI使能函数
void SPI_I2S_ITConfig(SPI_TypeDef* SPIx,uint8_t SPI_I2S_IT,FunctionalState NewState);//中断配置函数
void SPI_I2S_DMACmd(SPI_TypeDef* SPIx,uint16_t SPI_I2S_DMAReq,FunctionalState NewState);//DMA函数
void SPI_I2S_SendData(SPI_TypeDef* SPIx,uint16_t Data);//SPI发送数据函数
uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx);//SPI接收数据函数
void SPI_DataSizeConfig(SPI_TypeDef* SPIx,uint16_t SPI_DataSize);//确定数据是8位还是16位

FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx,uint16_t SPI_I2S_FLAG);
void SPI_I2S_ClearFlag(SPI_TypeDef* SPIx,uint16_t SPI_I2S_FLAG);
ITStatus SPI_I2S_GetITStatus(SPI_TypeDef* SPIx,uint8_t SPI_I2S_IT);
void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx,uint8_t SPI_I2S_IT);

SPI初始化函数

SPI_Init()

typedef struct

{

uint16_t SPI_Direction;方向:支持两线双通或者一线之类的

uint16_t SPI_Mode;模式

uint16_t SPI_DataSize;确定位数:8位或16位

uint16_t SPI_CPOL;

uint16_t SPI_CPHA;

uint16_t SPI_NSS;确定是硬件还是软件

uint16_t SPI_BaudRatePrescaler;波特率预分频系数

uint16_t SPI_FirstBit;第一位:LSB在前还是MSB在前

uint16_t SPI_CrCPolynomial;CRC的校验

}SPI_InitTypeDef;

程序配置过程:

1、使能SPIx和IO口时钟

RCC_AHBxPeriphClockCmd()/RCC_APBxPeriphClockCmd();

2、初始化IO口为复用功能

void GPIO_Init(GPIO_TypeDef* GPIOx,GPIO_InitTypeDef* GPIO_InitStruct);

3、?设置引脚复用映射

GPIO_PinAFConifg();

4、初始化SPIx,设置SPIx工作模式

void SPI_Init(SPI_TypeDef* SPIx,SPI_InitTypeDef* SPI_InitStruct);

5、使能SPIx

void SPI_Cmd(SPI_TypeDef* SPIx,FunctionalState NewState);

6、SPI传输数据

void SPI_I2S_SendData(SPI_TypeDef* SPIx,uint16_t Data);

uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx);

7、查看SPI传输状态

SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE);

四、SPI FLASH的相关硬件

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:27:45  更:2022-09-04 01:30:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 16:59:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计