STM32通过DMA向SD卡写数据

STM32F407,通过AD9226以250kHz的频率对信号进行采集,想通过DMA将采集的数据存入SD卡中,但对DMA不是很了解,向请教一下各位。

DMA可以看成一个黑盒,你设置好配置信息,DMA可以自动去数据接口把数据读取到内存或者将内存里的数据写入到数据接口;
根据你的描述,将DMA进行配置,还需要配置SDIO接口。具体可以参考正点原子的STM32教程里DMA章节和SDIO章节内容,最后两者联系起来就可以了。

  • 这篇博客: 基于STM32F407的DMA解析-ADC单通道DMA读取数据中的 3.2DMA代码段: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •        首先要关注传输方向,这里我们需要将ADC转换完成的数据传递到cpu内部寄存器,所以为外设到寄存器。

    /*数据传输方向为外设到存储器*/	
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;	

           其次要关注寄存器地址与外设地址,寄存器地址在这里为变量,所以取地址。

    /*存储器地址,实际上就是一个内部SRAM的变量	*/
    DMA_InitStructure.DMA_Memory0BaseAddr = (u32)&ADC_ConvertedValue;  

           外设在这里有对应的寄存器,地址为基地址+偏移地址,如果要更改ADC通道,要修改相应的寄存器地址,可以在中文参考手册里查找。

    /*外设基址为:ADC 数据寄存器地址*/
    DMA_InitStructure.DMA_PeripheralBaseAddr = ((u32)ADC1+0x4c);	

           寄存器地址与外设地址,在这里我们只传递了ADC1的数据,单对单,所以两个地址都不需要递增

    /*外设寄存器只有一个,地址不用递增*/
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    /*存储器地址固定*/
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;