打印
[STM32F1]

UART DMA有这样的想法,对吗?

[复制链接]
1617|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ihafd|  楼主 | 2017-10-6 10:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我最近在用STM32F103系列的MCU
我想用UART 通过DMA的方式收发数据,查看了几天资料发现如下问题:
1.  UART  DMA收发数据位问题。在网上可以找到许多通过UART接收空闲中断的方式达到接收任意长度的目的,但是DMA  UART,发送任意长度的例程找不到。F1系列的MCU怎样可以做到DMA UART发送任意长度的目的?
(找到一个F4系列的例程可以做到发送任意长度的目的。F1的就不行吗?)
2.  UART DMA效率问题。如果传送的数据量不是很大,用DMA 的方式有优势吗?
比如50mS 收发一次,一次收发大约10多个字节。

沙发
xinpian101| | 2017-10-6 11:50 | 只看该作者
听说是有长度限制。

使用特权

评论回复
板凳
zhuotuzi| | 2017-10-6 13:26 | 只看该作者
论坛有人问过这个,你搜一下看看。

使用特权

评论回复
地板
feelhyq| | 2017-10-6 18:29 | 只看该作者
DMA跟CPU一样本质上属于host,只不过一个在软件行为上执行动作,另一个在硬件行为上执行动作。DMA的本质优势不在于快,本质优势是解放CPU,这样CPU有更多是时间去做别的。

使用特权

评论回复
5
dalarang| | 2017-10-6 22:21 | 只看该作者
1、DMA发送并不是任意长度,记不太清上限是1K还是多少K来着,看下翻翻数据手册就行了,寄存器操作也很简单的。如果用STM32 Cube就更简单了。
2、uart的速度对于单片机来说是比较低的,如果不用DMA发送,发送一个数据帧时需要阻塞查询字节是否发送完成,在波特率较低时会浪费很多时间。

使用特权

评论回复
6
mohanwei| | 2017-10-7 20:27 | 只看该作者
不是非常特殊的应用,还是中断里从队列取一个字节放到发送寄存器这种方式最好

使用特权

评论回复
7
FAQ| | 2017-10-8 09:35 | 只看该作者
收发都可以用DMA,并且用起来很爽。

使用特权

评论回复
8
ihafd|  楼主 | 2017-10-8 10:02 | 只看该作者
这样看来 UART DMA 对于提高CPU效率来说是很有用的.

使用特权

评论回复
9
ihafd|  楼主 | 2017-10-9 10:47 | 只看该作者
谢谢大家,已经做到了。
可以用UART DMA 接收和发送任意长度的数据了。

结帖。

使用特权

评论回复
10
kingkits| | 2017-10-9 13:54 | 只看该作者
DMA在高速数据通讯和变换中是非常必要的,但对于UART这种低速且小数据,DMA没有任何优势,很是**肋

使用特权

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

本版积分规则

290

主题

844

帖子

3

粉丝