你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于HAL库中用DMA方式使用串口的问题,串口中断用开吗?

[复制链接]
zhang_mike2000 提问时间:2016-11-9 13:33 /
关于HAL库中用DMA方式使用串口的问题,串口中断用开吗?

使用DMA模式收发串口的核心语句为如下2句
HAL_UART_Transmit_DMA
HAL_UART_Receive_DMA

我的问题:
1,使用DMA模式在cube中的NVIC中断选项中
dma的 interrupt是要enable的 也是默认的
但是usart 的global interrupt 的中断是否也要enable???

之所以问这个问题是因为,DMA模式的核心就是CPU尽量少的参与,由硬件来部分完成CPU的工作。
就那串口为例,
普通的串口收到一个byte就中断一次,CPU就要处理一次
而DMA模式串口收到了一组数据(比如100bytes)再产生中断,然后CPU再一次性处理。
CPU的工作从原来的100次减少到了1次。
但是如果enable的 usart 的global interrupt,那么是不是又变成了,收到一个byte就中断一次了?那DMA的意义就不大了。

2,DMA的callback回调函数是什么?
dma把收据收满了应该产生一个中断,我猜是DMA中断,而HAL库的中断一般是用回调函数处理的。
所以我的问题就出现了,串口DMA的中断回调函数是什么呢?
QQ图片20161108162813.png
收藏 2 评论8 发布时间:2016-11-9 13:33

举报

8个回答
kylongmu 回答时间:2016-11-9 14:05:00
目前的st32系列只有2个DMA,一般是舍不得拿来用在串口上的。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

回答时间:2016-11-9 14:41:44
不用开串口中断。通过DMA发送的。
高二毛 回答时间:2016-11-9 15:10:05
不用开的。。
xmshao 回答时间:2016-11-9 15:20:53
那回调函数就是让你根据你的需要写你自己的用户代码。
比方DMA接收完成了,可能还要做点什么,比如输出个什么,产生个什么标志等。

这些用户代码内容会因实际应用的不同而不同,不可能以库函数的形式固定下来。
库函数就给你留个接口在那儿,有需要时用户自己去填写就好。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

anobodykey 回答时间:2016-11-9 16:08:46
大家都说不用,那就是不用了,实在不行你可以看下例程就晓得了
weigr 回答时间:2016-11-10 22:27:59
膜拜大神
xhzheng 回答时间:2016-11-11 10:37:27
不需要的了;
hpf9017 回答时间:2017-5-10 18:47:15
需要打开。

打开之后,调用HAL_UART_Transmit_DMA, 实现的就是楼主希望的功能。
发送完设定长度的数据,才进一次UART中断。
发送完一半设定长度的数据,会进一次DMA接受中断,发送完所有再进一次DMA中断。

如果调用HAL_UART_Transmit_IT,是每次发完一个数据就进一次UART。

接收没测过。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版