STM32G0系列的SPI DMA 如何配置?

配置后无法正常使用

#define SPI_LCD_Tx_DMA_Channel  LL_DMA_CHANNEL_4
#define BufferSize         256
uint8_t  SPI_LCD_Buffer_Tx[BufferSize];
void SPI_Screen_Config(void)
{
    LL_SPI_InitTypeDef SPI_InitStruct = {0};

    LL_GPIO_InitTypeDef GPIO_InitStruct = {0};

    /* Peripheral clock enable */
    LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SPI1);
    LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA1);
    LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);
    LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOD);
    /**SPI1 GPIO Configuration
    PB3   ------> SPI1_SCK
    PB5   ------> SPI1_SDI
    NONE  ------> SPI1_MISO   无
    PB8   ------> LCD_BL  背光
    PD3   ------> LCD_DC  写控制
    */
    


    GPIO_InitStruct.Pin = LL_GPIO_PIN_3;        // SCK
    GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
    GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
    GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
    LL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = LL_GPIO_PIN_5;        // SDI
    GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
    GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
    GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
    LL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = LL_GPIO_PIN_4;        // CS
    GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
    GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
    LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    
    GPIO_InitStruct.Pin = LL_GPIO_PIN_8;        // BL
    GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
    GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
    LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    
    GPIO_InitStruct.Pin = LL_GPIO_PIN_3;        // DC
    GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
    GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
    LL_GPIO_Init(GPIOD, &GPIO_InitStruct);

    #if 1
    /* SPI1 DMA Init */
    
    LL_DMA_DeInit(DMA1,LL_DMA_CHANNEL_4);
    LL_DMA_DeInit(DMA1,LL_DMA_CHANNEL_5);
    /* DMA interrupt init */
    /* DMA1_Channel1_IRQn interrupt configuration */
    LL_DMA_ConfigTransfer(DMA1, SPI_LCD_Tx_DMA_Channel,            
                        LL_DMA_DIRECTION_PERIPH_TO_MEMORY | \
                        LL_DMA_PRIORITY_VERYHIGH          | \
                        LL_DMA_MODE_NORMAL                | \
                        LL_DMA_PERIPH_NOINCREMENT         | \
                        LL_DMA_MEMORY_INCREMENT           | \
                        LL_DMA_PDATAALIGN_BYTE            | \
                        LL_DMA_MDATAALIGN_BYTE);            
    //外设地址
    LL_DMA_SetPeriphAddress(DMA1,SPI_LCD_Tx_DMA_Channel,LL_SPI_DMA_GetRegAddr(SPI1));
    //外设请求DMA 
    LL_DMA_SetPeriphRequest(DMA1, SPI_LCD_Tx_DMA_Channel, LL_DMAMUX_REQ_SPI1_TX);
    
    LL_DMA_SetMemoryAddress(DMA1, SPI_LCD_Tx_DMA_Channel, (u32)SPI_LCD_Buffer_Tx);//配置DMA传输内存区地址(寄存器配置)
    
    LL_DMA_SetDataLength(DMA1,SPI_LCD_Tx_DMA_Channel,256);//配置DMA传输数据长度(寄存器配置)
    
    //NVIC_SetPriority(DMA1_Ch4_5_DMAMUX1_OVR_IRQn, 1);
    //NVIC_EnableIRQ(DMA1_Ch4_5_DMAMUX1_OVR_IRQn);
    //LL_DMA_EnableIT_TC(DMA1, SPI_LCD_Tx_DMA_Channel);//使能DMA通道4完成中断
    #if 0
    /* SPI1_TX Init */
    LL_DMA_SetPeriphRequest(DMA1, SPI_LCD_Tx_DMA_Channel, LL_DMAMUX_REQ_SPI1_TX);
    // DMA传输方向  内存->外设
    LL_DMA_SetDataTransferDirection(DMA1, SPI_LCD_Tx_DMA_Channel, LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
    // 通道优先级 低
    LL_DMA_SetChannelPriorityLevel(DMA1, SPI_LCD_Tx_DMA_Channel, LL_DMA_PRIORITY_VERYHIGH);
    // DMA模式 正常
    LL_DMA_SetMode(DMA1, SPI_LCD_Tx_DMA_Channel, LL_DMA_MODE_NORMAL);
    // 外设地址递增模式  失能
    LL_DMA_SetPeriphIncMode(DMA1, SPI_LCD_Tx_DMA_Channel, LL_DMA_PERIPH_NOINCREMENT);
    // 内存地址递增模式  使能
    LL_DMA_SetMemoryIncMode(DMA1, SPI_LCD_Tx_DMA_Channel, LL_DMA_MEMORY_INCREMENT);
    // 外设传输大小  字节
    LL_DMA_SetPeriphSize(DMA1, SPI_LCD_Tx_DMA_Channel, LL_DMA_PDATAALIGN_BYTE);
    // 内存传输大小  字节
    LL_DMA_SetMemorySize(DMA1, SPI_LCD_Tx_DMA_Channel, LL_DMA_MDATAALIGN_BYTE);
    //外设地址
    LL_DMA_SetPeriphAddress(DMA1,SPI_LCD_Tx_DMA_Channel,LL_SPI_DMA_GetRegAddr(SPI1));
    
    
    
    #endif
    #endif
    // SPI参数配置
    SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;                  // 全双工
    SPI_InitStruct.Mode = LL_SPI_MODE_MASTER;                               // SPI Master
    SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;                       // SPI传送宽度 8bit
    SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_HIGH;                     // 极性 Low
    SPI_InitStruct.ClockPhase = LL_SPI_PHASE_2EDGE;                         // 相位 1EDGE
    SPI_InitStruct.NSS = LL_SPI_NSS_SOFT;                                   // 软件NSS 软件自动控制SPI的片选信号
    SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV2;                // SPI波特率8分频   8Mbits/S
    SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST;                             // 高位前导
    SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;          // 禁用crc
    SPI_InitStruct.CRCPoly = 7;                                             
    LL_SPI_Init(SPI1, &SPI_InitStruct);                                     
    LL_SPI_SetStandard(SPI1, LL_SPI_PROTOCOL_MOTOROLA);                     // SPI帧格式 MOTOROLA(use)  /   TI
    LL_SPI_EnableNSSPulseMgt(SPI1);                                         // NSS pulse management
    LL_SPI_SetRxFIFOThreshold(SPI1, LL_SPI_RX_FIFO_TH_QUARTER);//设置RX非空事件产生的FIFO阈值,根据通信时最小数据的大小设置,我这边最小为8位,所以设置为四分之一
    LL_SPI_Enable(SPI1);
    LL_SPI_EnableDMAReq_TX(SPI1);
    //LL_I2S_EnableDMAReq_TX(SPI1);
    
    
    //使能DMA
    LL_DMA_DisableChannel(DMA1, SPI_LCD_Tx_DMA_Channel);   //使能DMA
    LCD_CS(0);
}
//DMA 发送应用代码
void LCD_DMA_WriteData(u8 *buffer,u32 SizeLen)
{
    LL_SPI_DisableDMAReq_TX (SPI1);
    LL_DMA_DisableChannel(DMA1, SPI_LCD_Tx_DMA_Channel);//关闭DMA发送
       
    LL_DMA_SetMemoryAddress(DMA1, SPI_LCD_Tx_DMA_Channel, (u32)buffer);//配置DMA传输内存区地址(寄存器配置)
    LL_DMA_SetDataLength(DMA1,SPI_LCD_Tx_DMA_Channel,SizeLen);//配置DMA传输数据长度(寄存器配置)
    LL_DMA_ClearFlag_GI4(DMA1);
    LL_SPI_EnableDMAReq_TX(SPI1);
    LCD_CS(0);
    LCD_DC(1);
    LL_DMA_EnableChannel(DMA1, SPI_LCD_Tx_DMA_Channel);//开始DMA发送
    while(!LL_DMA_IsActiveFlag_TC4(DMA1));
    LL_DMA_ClearFlag_GI4(DMA1);
    //while(!LL_SPI_IsEnabledDMAReq_TX(SPI1));
   
}

不懂怎么改