问答

汇集网友智慧,解决技术难题

21ic问答首页 - GD32F503RCT6 无法启动DMA发送

DMA GD32 rc ar 发送

GD32F503RCT6 无法启动DMA发送

168tfl2026-07-04
如下程序,使用DMA发送数据到USART2,单发USART正常发送,但用DMA批量发送不能启动:
                                       
                                         dmamux_event_generation_disable(DMAMUX_MUXCH2);    //DMAMUX_MUXCH1
                                          dma_interrupt_disable(DMA0,DMA_CH3,DMA_INT_FTF);
                                          usart_transmit_config(USART2, USART_TRANSMIT_ENABLE);
                                         usart_flag_clear(USART2,USART_FLAG_TC);      
                                         usart_dma_transmit_config(USART2,USART_DENT_ENABLE);
                                          //usart_dma_transmit_config(USART2,USART_DENT_DISABLE);
                                          dma_channel_disable(DMA0,DMA_CH3);                               //DMA_CH1 -> DMA_CH3
                                          //usart_data_transmit(USART2,0x55);
                                          dma_memory_address_config(DMA0,DMA_CH3,(uint32_t)lcdptr->lcdtx);
                                          dma_transfer_number_config(DMA0,DMA_CH3,lcdptr->lcdtxleng);
                                          dma_interrupt_flag_clear(DMA0,DMA_CH3,DMA_INT_FLAG_FTF);
                                          dma_interrupt_enable(DMA0,DMA_CH3,DMA_INT_FTF);

                                          dmamux_request_id_config(DMAMUX_MUXCH2,DMA_REQUEST_USART2_TX);
                                          dmamux_synchronization_disable(DMAMUX_MUXCH2);
                                          
                                          dma_channel_enable(DMA0,DMA_CH3);
                                          //dmamux_event_generation_enable(DMAMUX_MUXCH1);
                                          lcdptr->lcdst = TRANS_IN;



                    有劳高手指点!!!!
回答 +关注 0
71人浏览 4人回答问题 分享 举报
4 个回答
  • dma_channel_enable(DMA0,DMA_CH3);
    dmamux_request_id_config(DMAMUX_MUXCH2,DMA_REQUEST_USART2_TX);
    dmamux_synchronization_disable(DMAMUX_MUXCH2);
                                              
               对调设置顺序,先DMA0_CH3 ,后 DMAMUX_MUXCH2           
  • 没看到对  DMA0,DMA_CH3 的完整配置。是不是漏了?
  • DMAMUX和DMA配置要仔细,检查DMAMUX的优先级配置和DMA的启动标志,还有时钟是否开启。我的项目里遇到过这个问题,调试时记得检查波形看DMA是否真的启动了。
  • 如有GD技术支持,有劳支持一把!GD关于DMAMUX技术文件太少了,手册由于本人能力有限,无法理解个中DMA-DMAMUX中间秘密!

您需要登录后才可以回复 登录 | 注册