打印

GD32F130G6U6 USART DMA REMAP

[复制链接]
3172|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
woshicky|  楼主 | 2017-10-23 18:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
芯片是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

使用特权

评论回复
5
woshicky|  楼主 | 2017-12-26 11:11 | 只看该作者
Houtz 发表于 2017-10-25 09:40
关于DMA映射,可以使用库函数:
syscfg_dma_remap_enable(SYSCFG_DMA_REMAP_USART0TX); //remap USART0 Tx  ...

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

使用特权

评论回复
6
vibra2016| | 2017-12-29 22:14 | 只看该作者
DMA的映射有这么复杂么/

使用特权

评论回复
7
xgfgli| | 2018-1-24 14:59 | 只看该作者
重映射,注意时钟

使用特权

评论回复
8
37772166| | 2018-8-3 10:46 | 只看该作者
请问下,重映射解决了吗?

使用特权

评论回复
9
123i| | 2024-11-3 23:05 | 只看该作者
37772166 发表于 2018-8-3 10:46
请问下,重映射解决了吗?

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

使用特权

评论回复
10
elephant00| | 2024-11-6 15:55 | 只看该作者
寄存器访问权限问题吗

使用特权

评论回复
11
cr315| | 2024-11-6 15:58 | 只看该作者
本帖最后由 cr315 于 2024-11-6 15:59 编辑

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

使用特权

评论回复
12
cr315| | 2024-11-6 15:58 | 只看该作者

使用特权

评论回复
13
两只袜子| | 2024-11-6 18:00 | 只看该作者
查阅GD32F130的数据手册,找到正确的SYSCFG寄存器地址以及用于DMA重映射的具体位。

使用特权

评论回复
14
cr315| | 2024-11-6 21:03 | 只看该作者
如果您正在使用GD提供的标准外设库(SPL)或硬件抽象层(HAL),那么最好使用库中提供的函数来进行DMA重映射,而不是直接操作寄存器。

使用特权

评论回复
15
jcky001| | 2024-11-6 23:00 | 只看该作者
根据GD32F130的数据手册,DMA请求的重映射可能需要设置特定的SYSCFG寄存器位。但是,仅仅写入一个值可能不足以触发重映射,还可能需要满足其他条件(如先禁用相关外设的DMA请求,然后再进行重映射操作)。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝