| 本帖最后由 ddb_21ic 于 2025-8-21 16:31 编辑 
 完整的DMA初始化代码
 
 void spi_dma_data_buff_config(void)
 {
 dma_single_data_parameter_struct dma_init_struct;
 dmamux_gen_parameter_struct dmamux_gen_init_struct;
 dmamux_sync_parameter_struct dmamux_sync_init_struct;
 
 /* deinitialize DMA registers of a channel */
 dma_deinit(DMA0, DMA_CH1);
 
 /* SPI3 DMA0_CH1 SPI发送,PE3 DRDY 触发SPI发送,开始数据传输 */
 dma_single_data_para_struct_init(&dma_init_struct);
 
 dma_init_struct.request = DMA_REQUEST_SPI3_TX;                        //SPI_TX触发DMA传输
 dma_init_struct.direction = DMA_MEMORY_TO_PERIPH;
 dma_init_struct.memory0_addr = (uint32_t)(&spi_dma_tx_buff[0]);
 dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_DISABLE;
 dma_init_struct.periph_memory_width = DMA_PERIPH_WIDTH_8BIT;
 dma_init_struct.number = spi_dma_frame_size;                  //发送一个ADC读取命令帧
 dma_init_struct.periph_addr = (uint32_t)&SPI_TDATA(SPI3);
 dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
 dma_init_struct.priority = DMA_PRIORITY_LOW;
 dma_init_struct.circular_mode = DMA_CIRCULAR_MODE_ENABLE;
 
 dma_single_data_mode_init(DMA0, DMA_CH1, &dma_init_struct);
 
 //---------------------------------------------------------------------
 /* connect key EXTI line to key GPIO pin */
 syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN3);
 
 /* configure key EXTI line */
 exti_interrupt_flag_clear(EXTI_3);
 exti_init(EXTI_3, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
 //exti_init(EXTI_3, EXTI_EVENT, EXTI_TRIG_FALLING);
 exti_interrupt_flag_clear(EXTI_3);
 
 // exti_event_enable(EXTI_3); //Event模式不能作为dma同步信号
 
 /* enable and set key EXTI interrupt to the lowest priority */
 nvic_irq_enable(EXTI3_IRQn, 2U, 0U);
 
 //---------------------------------------------------------------------
 /* DMAMUX channel configuration */
 /* initialize DMA request multiplexer channel 0 with synchronization mode */
 dmamux_sync_struct_para_init(&dmamux_sync_init_struct);
 dmamux_sync_init_struct.sync_id        = DMAMUX_SYNC_EXTI3;                   //EXTI_3作为DMA同步信号
 dmamux_sync_init_struct.sync_polarity  = DMAMUX_SYNC_FALLING;
 dmamux_sync_init_struct.request_number = spi_dma_frame_size;
 dmamux_synchronization_init(DMAMUX_MUXCH1, &dmamux_sync_init_struct);
 dmamux_synchronization_enable(DMAMUX_MUXCH1);
 
 dma_channel_enable(DMA0, DMA_CH1);                           //等待DRDY,在EXTI_3中断时打开DMA通道
 }
 |