版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ARM微控制器与嵌入式系统
STM32-SPI主讲人:景妮琴北京电子科技职业学院内容STM32的SPISPI框图SPI通讯SPI初始化结构体SPI库函数STM32的SPISPI接口提供两个主要功能,支持SPI协议或I2S音频协议。串行外设接口(SPI)可与外部器件进行半双工/全双工的同步串行通信。主模式或从模式操作,8个主模式波特率预分频器(最大值为fPCLK/2),从模式频率(最大值为fPCLK/2),可为外部从器件提供通信时钟
(SCK)该接口还能够在多主模式配置下工作8位或16位传输帧格式选择可编程的时钟极性和相位可编程的数据顺序,最先移位MSB或LSB可触发中断的专用发送和接收标志通讯引脚时钟控制逻辑数据控制逻辑整体控制逻辑STM32的SPI框图STM32芯片有多个SPI外设,它们的SPI通讯信号引出到不同的GPIO引脚上,使用时必须配置到这些指定的引脚,以《STM32F4xx规格书》为准。引脚SPI编号SPI1SPI2SPI3SPI4SPI5SPI6MOSIPA7/PB5PB15/PC3/PI3PB5/PC12/PD6PE6/PE14PF9/PF11PG14MISOPA6/PB4PB14/PC2/PI2PB4/PC11PE5/PE13PF8/PH7PG12SCKPA5/PB3PB10/PB13/PD3PB3/PC10PE2/PE12PF7/PH6PG13NSSPA4/PA15PB9/PB12/PI0PA4/PA15PE4/PE11PF6/PH5PG8
其中SPI1、SPI4、SPI5、SPI6是APB2上的设备,最高通信速率达42Mbtis/s,SPI2、SPI3是APB1上的设备,最高通信速率为21Mbits/s。其它功能上没有差异。SPI的SPI通讯引脚SCK线的时钟信号,由波特率发生器根据“控制寄存器CR1”中的BR[0:2]位控制,该位是对fpclk时钟的分频因子,对fpclk的分频结果就是SCK引脚的输出时钟频率BR[0:2]分频结果(SCK频率)BR[0:2]分频结果(SCK频率)000fpclk/2100fpclk/32001fpclk/4101fpclk/64010fpclk/8110fpclk/128011fpclk/16111fpclk/256其中的fpclk频率是指SPI所在的APB总线频率,APB1为fpclk1,APB2为fpckl2。SPI的时钟控制逻辑SPI的MOSI及MISO都连接到数据移位寄存器上,数据移位寄存器的数据来源来源于接收缓冲区及发送缓冲区。通过写SPI的“数据寄存器DR”把数据填充到发送缓冲区中。通过读“数据寄存器DR”,可以获取接收缓冲区中的内容。其中数据帧长度可以通过“控制寄存器CR1”的“DFF位”配置成8位及16位模式;配置“LSBFIRST位”可选择MSB先行还是LSB先行。SPI的数据控制逻辑整体控制逻辑负责协调整个SPI外设,控制逻辑的工作模式根据“控制寄存器(CR1/CR2)”的参数而改变,基本的控制参数包括前面提到的SPI模式、波特率、LSB先行、主从模式、单双向模式等等。在外设工作时,控制逻辑会根据外设的工作状态修改“状态寄存器(SR)”,只要读取状态寄存器相关的寄存器位,就可以了解SPI的工作状态了。除此之外,控制逻辑还根据要求,负责控制产生SPI中断信号、DMA请求及控制NSS信号线。实际应用中,一般不使用STM32SPI外设的标准NSS信号线,而是更简单地使用普通的GPIO,软件控制它的电平输出,从而产生通讯起始和停止信号。SPI的整体控制逻辑通讯过程跟其它外设一样,STM32标准库提供了SPI初始化结构体及初始化函数来配置SPI外设。初始化结构体及函数定义在库文件“stm32f4xx_spi.h”及“stm32f4xx_spi.c”中,编程时我们可以结合这两个文件内的注释使用或参考库帮助文档。SPI初始化结构体SPI_Direction:设置SPI为单向或双向的数据模式可设置为:双线全双工(SPI_Direction_2Lines_FullDuplex),双线只接收(SPI_Direction_2Lines_RxOnly),单线只接收(SPI_Direction_1Line_Rx)、单线只发送模式(SPI_Direction_1Line_Tx)。SPI初始化结构体SPI_Mode:设置SPI工作模式主机模式(SPI_Mode_Master)从机模式(SPI_Mode_Slave)这两个模式的最大区别为SPI的SCK信号线的时序,SCK的时序是由通讯中的主机产生的。若被配置为从机模式,STM32的SPI外设将接受外来的SCK信号。SPI初始化结构体SPI_DataSize:选择SPI通讯的数据帧大小4位(SPI_DataSize_4b)8位(SPI_DataSize_8b)16位(SPI_DataSize_16b)SPI初始化结构体SPI_CPOL:配置SPI的时钟极性CPOL高电平(SPI_CPOL_High)低电平(SPI_CPOL_Low)SPI_CPHA:配置时钟相位CPHASPI_CPHA_1Edge(在SCK的奇数边沿采集数据)
SPI_CPHA_2Edge
(在SCK的偶数边沿采集数据)
SPI初始化结构体SPI_NSS:配置NSS引脚的使用模式硬件模式(SPI_NSS_Hard
),这时SPI片选信号由SPI硬件自动产生软件模式(SPI_NSS_Soft
),外部引脚控制。实际中软件模式应用比较多。SPI初始化结构体SPI_BaudRatePrescaler:设置波特率分频因子,分频后的时钟即为SPI的SCK信号线的时钟频率。可设置为fpclk的2、4、6、8、16、32、64、128、256分频。SPI_InitStruct.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_32;SPI初始化结构体SPI_FirstBit:设置数据传输从MSB开始还是LSB开始MSB先行:SPI_FirstBit_MSBLSB先行:SPI_FirstBit_LSBSPI_InitStruct.SPI_FirstBit=SPI_FirstBit_MSB;SPI初始化结构体SPI_CRCPolynomial:这是SPI的CRC校验中的多项式,若我们使用CRC校验时,就使用这个成员的参数(多项式),来计算CRC的值。配置完这些结构体成员后,要调用SPI_Init函数把这些参数写入到寄存器中,实现SPI的初始化,然后调用SPI_Cmd来使能SPI外设SPI初始化结构体SPI的库函数SPI_InitVoidSPI_Init(SPI_TypeDef*SPIx,SPI_InitTypeDef*SPI_InitStruct)功能:根据SPI_InitStruct中的参数初始化外设SPIx的寄存器。SPI_Init(SPI1,&SPI_InitStruct);SPI的库函数SPI_CmdvoidSPI_Cmd(SPI_TypeDef*SPIx,FunctionalStateNewState);功能:使能或失能指定的SPI外设SPI_Cmd(SPI1,ENABLE);SPI的库函数SPI_I2S_ITConfigvoidSPI_I2S_ITConfig(SPI_TypeDef*SPIx,uint8_tSPI_I2S_IT,FunctionalStateNewState);功能:使能或失能指定的SPI/I2S中断SPI_I2S_IT可取的值:SPI_I2S_IT_TXE(发送缓存空中断屏蔽),SPI_I2S_IT_RXNE(接收缓存非空中断屏蔽),SPI_I2S_IT_ERR(错误中断屏蔽)SPI的库函数SPI_I2S_SendDatavoidSPI_I2S_SendData(SPI_TypeDef*SPIx,uint16_tData);功能:通过外设SPIx发送数据SPI_I2S_SendData(SPI1,0x55);SPI的库函数SPI_I2S_ReceiveDatauint16_tSPI_I2S_ReceiveData(SPI_TypeDef*SPIx);功能:返回通过外设SPIx最新接收的数据temp=SPI_I2S_ReceiveData(SPI1);SPI的库函数SPI_I2S_GetFlagStatusFlagStatusSPI_I2S_GetFlagStatus(SPI_TypeDef*SPIx,uint16_tSPI_I2S_FLAG);功能:检查指定的SPI/I2S标志位设置与否SPI_I2S_FLAG可取的值:
SPI_I2S_FLAG_TXE:发送缓存空标志位SPI_I2S_FLAG_RXNE:接收缓存非空标志位while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);SPI的库函数SPI_I2S_ClearFlagvoidSPI_I2S_ClearFlag(SPI_TypeDef*SPIx,uint16_tSPI_I2S_FLAG);功能:清除指定的SPI/I2S标志位SPI_I2S_FLAG可取的值:
SPI_I2S_FLAG_TXE:发送缓存空标志位SPI_I2S_FLAG_RXNE:接收缓存非空标志位SPI的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年甲乙双方关于量子通讯网络建设的施工合同
- 2024年版红木家具交易协议细则版
- 会计2023个人工作计划
- 高密度连接线路板项目商业计划书
- 2018-2024年中国广告行业市场发展现状调研及投资趋势前景分析报告
- 2022-2027年中国内窥镜行业市场运行态势及投资战略研究报告
- 车间主管个人工作计划5篇
- 买卖合同模板集合5篇
- 网络安全教育观后感
- 工作计划-文档
- 2025年心内科工作计划
- 质量是生产出来课件
- 2024-2025学年人教版七年级数学上册期末模拟测试卷(含简单答案)
- 2024-2030年中国家用小家电项目可行性研究报告
- 监理对进度控制的目标及方法措施
- 压缩空气(教学设计)-2024-2025学年三年级上册科学教科版
- 猩红热ppt幻灯片课件
- 输配电线路基础知识
- 2015年日历表(超清晰A4打印版)
- 剪式汽车举升机设计
- 健康证体检表
评论
0/150
提交评论