需求:STM32F103作为从设备,通过SPI接收大量数据;
方案:1.STM32的SPI通过中断接收(占用CPU资源,且长数据易丢失)
2.STM32通过SPI+DMA实现大数据接收(占用资源少)
本次采用第二种方案实现
时序图(见STM32F10XXX参考手册第471页):
主要思路:
1. 配置SPI外设
SPI2配置:双线、只收、禁止CRC、16位数据、仅接收禁止发送、NSS由硬件控制、高位开始传输、配置为从设备、时钟悬空低电平、第1个时钟采集数据、关闭I2S
2. 配置DMA外设;
DMA配置:外设到内存、非循环模式、允许传输完成中断
3. 配置SPI与DMA的连接;
使能SPI2->CR2第0位
需要编写的文件:SPI.C SPI.H DMA.C DMA.H文件
1. SPI.H
#ifndef __SPI_H
#define __SPI_H
#include "sys.h" //没有这个文件就屏蔽掉,定义时就不能写u16,按规范定义;
void SPI2_Config(void); //SPI2初始化函数
#endif
2. SPI.C文件