blackfire531
3/17/2020 - 6:39 AM

DMA Init

STM32

/* 使能DMA时钟 */
DMAx_CLK_ENABLE();      

/* SPI DMA发送配置 */                
hdma_tx.Instance                 = SPIx_TX_DMA_STREAM;      /* 例化使用的DMA数据流 */
hdma_tx.Init.Channel             = SPIx_TX_DMA_CHANNEL;     /* DMA通道配置 */
hdma_tx.Init.FIFOMode            = DMA_FIFOMODE_DISABLE;    /* 禁止FIFO*/
hdma_tx.Init.FIFOThreshold       = DMA_FIFO_THRESHOLD_FULL; /* 禁止FIFO此位不起作用,用于设置阀值 */
hdma_tx.Init.MemBurst            = DMA_MBURST_SINGLE;            /* 禁止FIFO此位不起作用,用于存储器突发 */
hdma_tx.Init.PeriphBurst         = DMA_PBURST_SINGLE;            /* 禁止FIFO此位不起作用,用于外设突发 */
hdma_tx.Init.Direction           = DMA_MEMORY_TO_PERIPH;    /* 传输方向是从存储器到外设 */  
hdma_tx.Init.PeriphInc           = DMA_PINC_DISABLE;        /* 外设地址自增禁止 */ 
hdma_tx.Init.MemInc              = DMA_MINC_ENABLE;         /* 存储器地址自增使能 */  
hdma_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;     /* 外设数据传输位宽选择字节,即8bit */ 
hdma_tx.Init.MemDataAlignment    = DMA_MDATAALIGN_BYTE;     /* 存储器数据传输位宽选择字节,即8bit */    
hdma_tx.Init.Mode                = DMA_NORMAL;              /* 正常模式 */
hdma_tx.Init.Priority            = DMA_PRIORITY_LOW;        /* 优先级低 */

/* 复位DMA */
if(HAL_DMA_DeInit(&hdma_tx) != HAL_OK)
{
        Error_Handler(__FILE__, __LINE__);     
}

 /* 初始化DMA */
if(HAL_DMA_Init(&hdma_tx) != HAL_OK)
{
        Error_Handler(__FILE__, __LINE__);     
}