STM32---SPI(DMA)通信的总结(库函数操作) 本文主要由7 项内容介绍SPI 并会在最后附上测试源码供参考: 1. SPI 的通信协议 2. SPI 通信初始化(以STM32 为从机,LPC1114 为主机介绍) 3. SPI 的读写函数 4. SPI 的中断配置 5. SPI 的SMA 操作 6. 测试源码 7. 易出现的问题及原因和解决方法 一、 SPI 的通信协议 SPI(Serial Peripheral Interface)是一种串行同步通讯协议,由一个主设备和一个或多个从设备组成,主设备启动一个与从设备的同步通讯,从而完成数据的交换。SPI 接口一般由4 根线组成,CS 片选信号(有的单片机上也称为NSS),SCLK 时钟信号线,MISO 数据线(主机输入从机输出),MOSI 数据线(主机输出从机输入),CS 决定了唯一的与主设备通信的从设备,如没有 CS 信号,则只能存在一个从设备,主设备通过产生移位时钟信号来发起通讯。通讯时主机的数据由MISO 输入,由MOSI 输出,输入的数据在时钟的上升或下降沿被采样,输出数据在紧接着的下降或上升沿被发出(具体由SPI 的时钟相位和极性的设置而决定)。 二、 以 STM32 为例介绍 SPI 通信 1. STM32f103 带有 3 个 SPI 模块其特性如下: 2 SPI 初始化 初始化 SPI 主要是对 SPI 要使用到的引脚以及 SPI 通信协议中时钟相位和极性进行设置,其实 STM32 的工程师已经帮我们做好了这些工作,调用库函数,根据自己的需要来修改其中的参量来完成自己的配置即可,主要的配置是如下几项: 引脚的配置 SPI1 的 SCLK, MISO ,MOSI 分别是 PA5,PA6,PA7 引脚,这几个引脚的模式都配置成 GPIO_Mo de_AF_PP 复用推挽输出(关于 GPIO 的 8种工作模式如不清楚请自己百度,在此不解释),如果是单主单从,CS 引脚可以不配置,都设置成软件模式即可。 通信参数的设置 1. SPI_Direction_2Lines_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_High(=1)和SPI_CPOL_Low ( =0). CPHA 有两个值 SPI_CPHA_1Edge (=0) 和SPI_CPHA_2Edge(=1) CPOL 表示时钟在空闲状态...