专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
stm32 串口使用 DMA 速度并不快
2019-08-21 10:41
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
3024
26
1656
stm32 串口使用 DMA 和不使用 DMA 速度基本没有差别,难道 DMA 不能显著提升速度吗,还是另有隐情
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
26条回答
noname
1楼-- · 2019-08-22 23:58
for(i=0; i<1500; i++)
{
USART_SendData(USART1, data
);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}
其实我就是想知道,100ms发送一次数据,用DMA取代上面的方法是否会高效一些
加载中...
qiuzhi339
2楼-- · 2019-08-23 01:25
回复【14楼】qiuzhi339:
---------------------------------
打个简单的比分给你.
你本来每天要洗衣服,扫地,做饭,这些杂事你都得自己做.但是你只想看电视.不过没有其他人帮你做家务,你就只能硬着头皮,先做完家务再看电视.
但是,如果有个帮手,假设使你的佣人,你可以吩咐他去扫地,洗衣做饭,自己就专心看电视好了.
你 = CPU
DMA =佣人
加载中...
正点原子
3楼-- · 2019-08-23 04:37
回复【15楼】正点原子:
---------------------------------
原子哥,这些我都懂,我也是科班出身,
其实我是想说,for 循环发送数据每次都要进行 i++ 操作、判断是否达到循环终止条件、等待发送完成,
这些操作是否会拖累串口发送数据、降低串口发送数据的效率,所以我想到用DMA,是否会省掉这些操作,提升一下发送效率。
其实我的程序中,虽然用了 DMA,但仍不能把 CPU 空闲出来做其它事情,因为下面的语句影响串口正在发送的数据,
所以必须等到 DMA 发送完成以后,再执行下面的语句。这样做其实没有发挥出 DMA 最大的优势(把 CPU 空闲出来做其他事情),
所以,我一直在强调使用 DMA 是否会在发送数据的效率方面有所提高,如果不能提高的话,那我就完全没有必要用 DMA 了,
因为在串口发送数据的时候,我不需要做其他事情。
加载中...
qiuzhi339
4楼-- · 2019-08-23 05:20
回复【13楼】noname:
---------------------------------
传输过程中是完全不依赖CPU的,所要做的就是检查是否传输完成。
加载中...
ricefat
5楼-- · 2019-08-23 09:09
精彩回答 2 元偷偷看……
加载中...
ricefat
6楼-- · 2019-08-23 11:39
非常感谢大家的解答。也许 DMA 的核心就不包括提高传输效率,而我恰好想提高效率。总结一下大家的讨论,我就不用 DMA 了。
加载中...
上一页
1
2
3
4
5
下一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
{
USART_SendData(USART1, data);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}
其实我就是想知道,100ms发送一次数据,用DMA取代上面的方法是否会高效一些
---------------------------------
打个简单的比分给你.
你本来每天要洗衣服,扫地,做饭,这些杂事你都得自己做.但是你只想看电视.不过没有其他人帮你做家务,你就只能硬着头皮,先做完家务再看电视.
但是,如果有个帮手,假设使你的佣人,你可以吩咐他去扫地,洗衣做饭,自己就专心看电视好了.
你 = CPU
DMA =佣人
---------------------------------
原子哥,这些我都懂,我也是科班出身,
其实我是想说,for 循环发送数据每次都要进行 i++ 操作、判断是否达到循环终止条件、等待发送完成,
这些操作是否会拖累串口发送数据、降低串口发送数据的效率,所以我想到用DMA,是否会省掉这些操作,提升一下发送效率。
其实我的程序中,虽然用了 DMA,但仍不能把 CPU 空闲出来做其它事情,因为下面的语句影响串口正在发送的数据,
所以必须等到 DMA 发送完成以后,再执行下面的语句。这样做其实没有发挥出 DMA 最大的优势(把 CPU 空闲出来做其他事情),
所以,我一直在强调使用 DMA 是否会在发送数据的效率方面有所提高,如果不能提高的话,那我就完全没有必要用 DMA 了,
因为在串口发送数据的时候,我不需要做其他事情。
---------------------------------
传输过程中是完全不依赖CPU的,所要做的就是检查是否传输完成。
一周热门 更多>