SPI通信总结库函数操作总结 .docx

上传人:Che****ry 文档编号:13054673 上传时间:2022-04-27 格式:DOCX 页数:14 大小:698.95KB
返回 下载 相关 举报
SPI通信总结库函数操作总结 .docx_第1页
第1页 / 共14页
SPI通信总结库函数操作总结 .docx_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《SPI通信总结库函数操作总结 .docx》由会员分享,可在线阅读,更多相关《SPI通信总结库函数操作总结 .docx(14页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精品名师归纳总结STM32-SPI通信的总结 库函数操作 本文主要由 7 项内容介绍 SPI并会在最终附上测试源码供参考:1. SPI的通信协议2. SPI通信初始化 以 STM32为从机, LPC1114为主机介绍 3. SPI的读写函数4. SPI的中断配置5. SPI的 SMA 操作6. 测试源码7. 易显现的问题及缘由和解决方法一、 SPI的通信协议SP(ISerial Peripheral Interface)是一种串行同步通讯协议,由一个主设备和一个或多个从设备组成,主设备启动一个与从设备的同步通讯,从而完成数据的交换。 SPI 接口一般由 4 根线组成, CS 片选信号(有的单片

2、机上也称为 NSS), SCLK时钟信号线, MISO 数据线(主机输入从机输出), MOSI数据线(主机输出从机输入), CS 打算了唯独的与主设备通信的从设备,如没有CS 信号,就只能存在一个从设备, 主设备通过产生移位时钟信号来发起通讯。通讯时主机的数据由MISO 输入,由 MOSI 输出,输入的数据在时钟的上升或下降沿被采样,输出数据在紧接着的下降或上升沿被发出(详细由SPI的时钟相位和极性的设置而打算)。可编辑资料 - - - 欢迎下载精品名师归纳总结二、 以 STM32为例介绍 SPI通信1. STM32f103带有 3 个 SPI模块其特性如下:2SPI初始化初始化 SPI 主要

3、是对 SPI要使用到的引脚以及SPI 通信协议中时钟相位和极性进行设置,其实STM32 的工程师已经帮我们做好了这写工作, 调用库函数,依据自己的需要来修改其中的参量来完成自己的配置即可,主要的配置是如下几项: 引脚的配置SPI1的 SCLK,MISO ,MOSI分别是 PA5, PA6, PA7引脚,这几个引脚的模式都配置成 GPIO_Mode_AF_PP复用推挽输出(关于 GPIO 的 8种工作模式如不清晰请自己百度,在此不说明),假如是单主单从, CS引脚可以不配置,都设置成软件模式即可。可编辑资料 - - - 欢迎下载精品名师归纳总结通信参数的设置1. SPI_Direction_2L

4、ines_FullDuplex把 SPI设置成全双工通信。2. 在 SPI_Mode里设置你的模式(主机或者从机),3. SPI_DataSize是来设置数据传输的帧格式的SPI_DataSize_8b是指8 位数据帧格式,也可以设置为 SPI_DataSize_16b即, 16 位帧格式4. SPI_CPOL和 SPI_CPHA是两个很重要的参数,是设置 SPI通信时钟的极性和相位的,一共有四种模式在库函数中 CPOL有两个值 SPI_CPOL_Hig(h =1)和 SPI_CPOL_Low=0.CPHA有两个值 SPI_CPHA_1Edge =和0 SPI_CPHA_2Edg(e =1)C

5、POL表示时钟在闲暇状态的极性是高电平仍是低电平,而CPHA就表示数可编辑资料 - - - 欢迎下载精品名师归纳总结据是在什么时刻被采样的,手册中如下:我的程序中主、从机的这两位设置的相同都是设置成1,即闲暇时时钟是高电平,数据再其次个时钟沿被采样,试验显示数据收发都正常。( 要特殊留意极性和相位的设置否就,数据传输会显现错位的现象)一般主从机的这两个位要设置的一样,但是网上也有人说不能设置成一样 的,在后文中我对主从机极性和相位的配置的16 种情形都做了测试,结果见下文。下图很好的描述了 4 种模式下的时序状况可编辑资料 - - - 欢迎下载精品名师归纳总结引用网友的一句话: :“SPI 主

6、模块和与之通信的外设备时钟相位和极性应当一样。个人懂得这句话有2 层意思:其一, 主设备 SPI 时钟和极性的配置应当由外设的从设备来打算。其二,二者的配置应当保持一样,即主设备的 SDO 同从设备的SDO配置一样,主设备的SDI 同从设备的SDI 配置一样。 由于主从设备是在 SCLK的掌握下,同时发送和接收数据,并通过2 个双向移位寄存器来交换数据。”5. SPI_BaudRatePrescale波r 特率的设置这在主机模式中,这一位的设置直接打算了通信的传输速率,而从机的设置不会影响数据传输的速率,手册中有这样一句话:6. SPI_FirstBit这一位是设置第一传输的高字节仍是低字节S

7、PI_FirstBit_MSB是先传输高字节, SPI_FirstBit_LSB是先传输低字节留意在初始化函数里仍有两项重要的内容就是在初始化之前先使能SPI 的时钟和在初始化配置完成后使能SP。I( .初始化配置 )三、 SPI的读写函数SPI有一个 16 位的数据寄存器 SPI_DR,它对应两个缓冲区, 1 个发送缓冲区, 1 个接收缓冲区,当在掌握寄存器里SPI_CR1里对 DFF 位设置数据帧格式为 8 位时,发送和接收只用到 SPI_DR7:0这8 位, 15-8 位被强制为 0,帧格式设置成 16 位时全用。可编辑资料 - - - 欢迎下载精品名师归纳总结简而言之,发送时,可以通过

8、检测 SPI_SR中的 TXE 位,当数据寄存器里有数据时,TXE 位是 0,当数据全部从数据寄存器的发送缓冲区传输到移位寄存器时TXE位被置 1,这时候可以再往数据寄存器里写入数据。可以通过while SPI_I2S_GetFlagStatusSPI1, SPI_I2S_FLAG_TXE = R来E检SE测T。 SPI_I2S_GetFlagStatusSPI1, SPI_I2S_FLAG_是TX库E函数可以检测 SPI的一些状态位。接收时可以通过检测 SPI_SR中的 RXNE位,当数据寄存器里有数据时,RXNE位是 0,当数据全部从数据寄存器的接收缓冲区传输到移位寄存器时RXNE可编辑资

9、料 - - - 欢迎下载精品名师归纳总结读写过程在手册中是这样描述的:位被置 1,这时候可以从数据寄存器里读出数据。可以通过while SPI_I2S_GetFlagStatusSPI1, SPI_I2S_FLAG_RXNE = R来ES检E测T。; SPI读写一个字节,读写一体源程序如下,可编辑资料 - - - 欢迎下载精品名师归纳总结当能胜利发送和接收一个字节时,发送数组数据就变的简洁了,只需要一个for循环,和指针变量的递增即可。以下仅为参考:( 有一点特殊留意,从机数据传输时要依靠主机的时钟,所以主机在接收从机发送的数据时要往从机发送哑巴字节,这个字节可以自己定义0xff,0xfe 等

10、什么字节都可以 )读写分开的函数 :/*Description:spi1 通信发送数据*/void SPI_Ecah_Buffer_Sendu8* pBuffer, u16 NumByteToReadforint i = 0; i NumByteToRead; i+SPI_Conmunication_SendByte*pBuffer; pBuffer+;/*Description:spi1 通信接收收据*/void SPI_Buffer_Receiveu8* pBuffer, u16 NumByteToReadwhile NumByteToRead- /* while there is dat

11、a to be read */* Read a byte from the FLASH */*pBuffer = SPI_Conmunication_SendByte Dummy_Byte;/* Point to the next location where the byte read will be saved */ pBuffer+;读写一体的函数/*Description:spi1 通信发送接收读写数据*/void SPI_Ecah_Buffer_Sendu8* str, u8* pBuffer, u16 NumByteToRead可编辑资料 - - - 欢迎下载精品名师归纳总结可编辑

12、资料 - - - 欢迎下载精品名师归纳总结str+;forint i = 0; i TXE为 1 时,会向对应的 DMA 通道发出恳求, DMA 通道会发出应答信号, SPI 收到应答信号后撤销恳求信号, DMA 撤销应答信号,并把内存值装入SPI_DR的发送缓区, SPI的传送开头。DMA 的初始化可编辑资料 - - - 欢迎下载精品名师归纳总结DMA_PeripheralBaseAddr是值外设数据的的址,用 SPI1 故 DMA 外设的址对应的是 SPI1_DR_Addr,DMA_MemoryBaseAddr 是内存的址,它的值可以使,你要发送的数据所存放的数组的名,由于数组名代表的是数

13、组数据存放的首的址,在SPI-DMA 的发送中可以懂得为把DMATX数组里的数据传送到SPI1_DR_AddrDMA_DIR是 指 数 据 传 输 的 方 向 , 其 值 发 送 时 其 值 为DMA_DIR_PeripheralDST即外设是目的的,方向是 DMATX SPI1_DR_Addr,在接受收时其值为DMA_DIR_PeripheralSR,C 即外设是数据的来源,传输方向是 SPI1_DR_Addr 用户指定的数据储备数组。DMA_BufferSize用来设置传输数据的个数,在STM32 的 DMA 中其值的范畴是 0 65536.DMA_Mode 指 DMA 的传输模式 DMA

14、_Mode_Normal 为正常工作模式DMA_Mode_Circular 是循环工作模式,这里对循环模式的说明我认为有位网友说明的很不错如下:“循环的意思是指 DMA 的传输数量计数器会重置初值,由于DMA 每传一个数据,传输数量计数器减一,只有在传输数量计数器的值不为零时,才 会响应恳求。在循环模式下,当传输计数器的值减为0 后,会重新装载。 而内存(缓存)的址就不管循环非循环模式,都会在每次传输完成后重置 为基的址。 所以,假如我们把DMA 设置会正常模式,那么在下次传输前,只需对 DMA 的传输数量计数重视新写入就行。循环模式一般用于数据更新,比如 ADC采纳需要不停更新数据。”可编辑

15、资料 - - - 欢迎下载精品名师归纳总结在初始化完成之后要开启 DMA 的中断,在我的程序中开启的是 DMA 传输完成中断。DMA 传输有 3 个中断标志位,常用的是传输完成的中断。如下:这样在传输完设定的数据个数之后就会触发传输完成的中断,用户可以再 中断服务函数中,进行相应的操作,有一点特殊留意,就是要准时清除中断标志位,为下次能够正常触发中断做预备。在我的中断服务函数中有一个标志位SpiCommon被,置 1 后再中断之外进行其他的处理,同时调用DMA_ClearITPendingBitDMA1_IT_TC2来 准时清除中断标志。在进行 DMA 的数据传输时要先禁能DMA 的通道,重置

16、传输数据个数的值,数据的储备位置等,再使能DMA 的通道,等待 DMA 的传输完成。我的操作时这样的,先往 DMATX里写入相应的数据,然后如下可编辑资料 - - - 欢迎下载精品名师归纳总结这样可能有一点不好的的方,由于只转变了SpiTXSize的值,却又重新执行了 DMATXInit函数,可能此处能够再改善一下。六测试中显现的问题及缘由和解决方法示波器观看主机能够产生正确的时钟,主机输出引脚也能产生正确的数据,但是从机不能接受数据。可能缘由:1. 从机的接收中断配置不正确,或者没有打开相应的中断。2. 在从机中 TXEIE的中断和 TXDMAEN的中断都被使能,手册中说,这两个中断只能使能

17、 1 个.从机能接收数据,但是接收的数据乱码可能缘由:1. 主从机的时钟相位和极性的配置导致的,关于这一点想做一下说明, 网上有人说,主从机时钟的相位和极性要配置的一样,也有人说不能配置的一样,而我对于主从机的相位和极性的16 种组合情形全做了试验,结果如下: 主机 LPC1114的 SPI1从机 STM32的 SPI1(表示能正常通信)主从通信CPOLCPHACPOLCPHA00000001乱码可编辑资料 - - - 欢迎下载精品名师归纳总结00100011010001010110011110001001101010111100110111101111(左移 1 位)乱码乱码乱码乱码乱码乱码

18、乱码乱码乱码( 当然可能上述的结果也跟测试环境有关,当对其有所怀疑时,读者不妨自己试验看一下。 )2. 乱码的其次个缘由可能是两个设备没有共的而造成的,在显现问题时肯定要先检查一下硬件的连接是否正确,是否有虚焊接触不好的的方而导致通讯不正常。从机能接收数据,但接收的数据不全,又丢字节的现象发生。可能缘由:1. 假如是通过串口打印来观看接收数据,那要看一下数据中是否有 0,结合自己的串口函数分析一下,由于打印数组或者字符串时遇 0 会截止。可编辑资料 - - - 欢迎下载精品名师归纳总结2. 看一下接收的数组中,其指针是否是递增的。3. 假如使用了 CS 片选信号,看一下主机发出的数据是否都在CS 拉低的范畴内。可编辑资料 - - - 欢迎下载

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com