OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6025|回复: 5

关于DMA到底能不能外设到外设的测试说明

[复制链接]

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-8-21 12:27:07 | 显示全部楼层 |阅读模式
本帖最后由 nashui_sx 于 2019-10-15 23:56 编辑

测试平台:stm32f103c8t6  stm32f407zgt6

1.dma结构体参数解释与误区
dma一切都是地址到地址的拷贝,实际不分外设与内存地址,只是内存与外设挂在总线矩阵上的速度不同,速度不同DMA要协调内存与外设的通信速度,区分了是从内存读还是外设读
是否开启内存到内存传输只是代表是否有触发源的问题,关闭内存到内存传输,查表获得触发源,触发条件能满足就会传输,开启内存到内存会一直循环传输

stm32f103c8t6
DMA_PeripheralBaseAddr      DMA读地址(不要理解成外设地址)
DMA_MemoryBaseAddr         DMA写地址(不要理解成内存地址)
DMA_DIR                            DMA读地址是内存还是外设,DMA_DIR_PeripheralSRC:从外设读  DMA_DIR_PeripheralDST:从内存读
                                          这个要区分只是地址接入DMA总线矩阵的时钟不同,DMA的速度要相应自动调节,控制桥1桥2(手册121页,图21,DMA框图)
DMA_BufferSize                   DMA传输数量
DMA_PeripheralInc              DMA读地址是否为增量模式
DMA_MemoryInc                 DMA写地址是否为增量模式
DMA_MemoryDataSize         DMA读地址数据宽度位数
DMA_MemoryDataSize         DMA写地址数据宽度位数
DMA_Mode                         循环或单次工作模式
DMA_Priority                       DMA通道优先级
DMA_M2M                          是否开启内存到内存传输(关闭表示只有事件产生才传输一次数据,关着的时候才需要查表找通道源,开启表示一直传输)
                                         DMA_M2M_Disable:非存储器到存储器模式(关闭内存到内存模式,信号源触发DMA传输)  
                                         DMA_M2M_Enable:启动存储器到存储器模式(开启内存到内存模式,自动传输,不需要通道源触发)
...
stm32f407zgt6
DMA_PeripheralBaseAddr     DMA读地址(不要理解成外设地址)
DMA_Memory0BaseAddr      DMA写地址(不要理解成外设地址)
DMA_DIR                           DMA_DIR_PeripheralToMemory:从外设读  DMA_DIR_MemoryToPeripheral:从内存读
                                         (这俩表示只有事件产生才传输一次数据,需要查表找通道源)
                                         DMA_DIR_MemoryToMemory:开启内存到内存传输(等价103的DMA_M2M开启),内存到内存同上DMA会全速传输,不需要通道源触发
DMA_BufferSize                  DMA传输数量
DMA_PeripheralInc              DMA读地址是否为增量模式
DMA_MemoryInc                 DMA写地址是否为增量模式
DMA_MemoryDataSize         DMA读地址数据宽度位数
DMA_MemoryDataSize         DMA写地址数据宽度位数
...


2.DMA总线矩阵
stm32f103c8t6  
1.jpg
103外设、内存、flash都是直接连接到总线矩阵可以相互任意排列组合传输



stm32f407zgt6
2.jpg
3.png
看这个图,DMA1的外设接口没有挂载到DMA总线矩阵,所以不能外设到外设
手册图下说明了DMA1 2的控制器不同仅 DMA2 数据流能够执行存储器FSMC到存储器FSMC的传输,原因也是DMA1的外设端口没有接入总线矩阵
假如补了下面这根红线就可以了
5.jpg

stm32f103c8t6  串口1DMA导通到串口2
(初始化串口--关闭串口中断--初始化两个串口rxdma--接收后触发dma写入对方发送端口--现象是串口1收的直接串口2发出去,串口2收的直接串口1发出去)
(用途嘛,仅做测试,唯一用途就是没有ch340外挂模块又想直接调试开发板的其他串口外设,这么导通,不过给中断内导通一个效果)
dma1外设到外设 USART1--USART2.rar (284.73 KB, 下载次数: 90)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-6-12
在线时间
13 小时
发表于 2019-11-8 11:11:41 | 显示全部楼层
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2019-11-8 12:50:57 | 显示全部楼层

一般了,这种功能一般人也用不到,没人深究罢了
回复 支持 反对

使用道具 举报

28

主题

294

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1790
金钱
1790
注册时间
2018-3-26
在线时间
294 小时
发表于 2019-12-17 09:32:20 | 显示全部楼层
请教一下,之前看的PWM用DMA输出可控数量脉冲的时候,发现TIM上DMA是使用的TIMx_UP ,为啥不是用TIMx_CH1这样子呢?


1.png
茵茵猪头
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2019-12-17 09:36:50 | 显示全部楼层
htao 发表于 2019-12-17 09:32
请教一下,之前看的PWM用DMA输出可控数量脉冲的时候,发现TIM上DMA是使用的TIMx_UP ,为啥不是用TIMx_CH1这 ...

都可以  6用的up   7用的通道
回复 支持 反对

使用道具 举报

90

主题

534

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1059
金钱
1059
注册时间
2017-4-12
在线时间
280 小时
发表于 2021-2-25 17:09:03 | 显示全部楼层
分享资料的必须赞个!
穷不可怕,可怕的是穷的是我~~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 12:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表