平台:STM32F103
功能:SPI工作在主模式时用DMA方式接收数据,在需要从SPI FLASH中读出大量数据时,可以在读数据的同时释放CPU的占用,提高系统利用效率
DMA不可以自动帮忙发送时钟信号,但是如果让spi发送数据并且使用DMA方式,spi可以帮忙自动发送时钟信号。基于这样的理论, 直接上代码(参考:http://blog.sina.com.cn/s/blog_9d8d362b0101cukb.html)
#if (ON == SPI_DMA_ON)
//DMA1的各通道配置
//这里的传输形式是固定的,这点要根据不同的情况来修改
//从存储器->外设模式/8位数据宽度/存储器增量模式
//DMA_CHx:DMA通道CHx
//cpar:外设地址
//cmar:存储器地址
void SPI_DMA_Config(u32 MBAr)
{
DMA_InitTypeDef DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //使能DMA传输
//接收DMA配置
DMA_Cmd(SPI_RX_DMA_CH, DISABLE); //DMA关闭后才能配置
DMA_DeInit(SPI_RX_DMA_CH); //将DMA的通道1寄存器重设为缺省值
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&SPI_FLASH_NUM->DR);//DMA外设