woshicky 发表于 2017-10-23 18:25

GD32F130G6U6 USART DMA REMAP

芯片是gd32f130g6u6,DMA CH1, CH2分配给了SPI的DMA使用,串口接的PB6,PB7,为USART0,由于USART0的收发DMA默认也是DMA CH1, CH2,所以希望将DMA重新映射下,按照数据手册上的说法,当我把SYSCFG_R1中的对应重映射位置1,DMA请求就可以被重映射到这个通道,但是当我执行
*((uint32_t *)0x40010000) = 0x0000060;
时,发现寄存器的值无法被修改,用JLink调试,在线修改寄存器位也没有用,而串口的DMA也一直没有被重映射成功...
即使这样做:
do {
/* remap DEBUG_USART TX RX Channel */
*((uint32_t *)0x40010000) = 0x0000060;
__nop(); __nop(); __nop();__nop(); __nop();
} while(*((uint32_t *)0x40010000) != 0x0000060);
求教各位大神!

shenmu2012 发表于 2017-10-23 22:43

看来这个重映射的是个头疼的问题的

zhangbo1985 发表于 2017-10-24 18:57

看来DMA映射的还是很头疼的

Houtz 发表于 2017-10-25 09:40

关于DMA映射,可以使用库函数:
syscfg_dma_remap_enable(SYSCFG_DMA_REMAP_USART0TX); //remap USART0 Tx DMA request to channel2(default channel0).
syscfg_dma_remap_enable(SYSCFG_DMA_REMAP_USART0RX); //remap USART0 Rx DMA request to channel3(default channel1)
如有问题可以找我沟通375880228@qq.com

woshicky 发表于 2017-12-26 11:11

Houtz 发表于 2017-10-25 09:40
关于DMA映射,可以使用库函数:
syscfg_dma_remap_enable(SYSCFG_DMA_REMAP_USART0TX); //remap USART0 Tx...

试过了,使用库函数的结果是一样的

vibra2016 发表于 2017-12-29 22:14

DMA的映射有这么复杂么/

xgfgli 发表于 2018-1-24 14:59

重映射,注意时钟

37772166 发表于 2018-8-3 10:46

请问下,重映射解决了吗?

123i 发表于 2024-11-3 23:05

37772166 发表于 2018-8-3 10:46
请问下,重映射解决了吗?

要先配置SYS_CFG的时钟才能重映射,楼主是没开。我今天试了没问题的

elephant00 发表于 2024-11-6 15:55

寄存器访问权限问题吗

cr315 发表于 2024-11-6 15:58

本帖最后由 cr315 于 2024-11-6 15:59 编辑

芯片可能不支持当前外设的DMA重映射

cr315 发表于 2024-11-6 15:58

{:sad:}{:smile:}

两只袜子 发表于 2024-11-6 18:00

查阅GD32F130的数据手册,找到正确的SYSCFG寄存器地址以及用于DMA重映射的具体位。

cr315 发表于 2024-11-6 21:03

如果您正在使用GD提供的标准外设库(SPL)或硬件抽象层(HAL),那么最好使用库中提供的函数来进行DMA重映射,而不是直接操作寄存器。

jcky001 发表于 2024-11-6 23:00

根据GD32F130的数据手册,DMA请求的重映射可能需要设置特定的SYSCFG寄存器位。但是,仅仅写入一个值可能不足以触发重映射,还可能需要满足其他条件(如先禁用相关外设的DMA请求,然后再进行重映射操作)。
页: [1]
查看完整版本: GD32F130G6U6 USART DMA REMAP