打印
[活动专区]

【AT-START-WB415测评】UART+DMA实现双缓冲高效收发

[复制链接]
1434|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
       数据手册上写AT32WB415有3个USART和14个通道的2个DMA
但由于WB415采用MCU和蓝牙SOC合封方式,受封装限制导致管脚引出做了牺牲,且有些管脚作为了MCU和蓝牙SOC的内部连接使用,所以,实际可用的串口只有2.5个。

DMA支持固定请求映射和弹性请求映射,可以灵活的接到各种外设上
对MCU熟悉的人都应该清楚,串口常见的应用方式有查询 中断和DMA这几种,从对CPU占用角度看,DMA方式 < 中断方式 <查询方式。
我将介绍一种利用DMA实现双缓冲的高效串口收发方式,这种方式是建立在DMA基础上的,如果没有DMA就没法应用我这种方式了。为了实现双缓冲,我们需要利用DMA的如下特性
我要利用DMA的半传输和传输完成中断实现一次传输的2次相应过程,从而实现双缓冲,但由于DMA传输的次数是要预先设定的,对串口发送来说,还是没问题的,因为要发送的数据长度,你是知道的。但如果要接收不固定长度的数据,想要利用DMA来处理就比较麻烦了。如果遇到这种情况,就要用到串口本身的一种特性了
这里我要利用串口空闲中断弥补DMA不能接收不定长度数据的问题,当接收的数据没有达到触发DMA半传输和传输完成中断时,使用串口空闲中断来结束这帧数据的传输。整个收发方式的思路就是这样了,我们看看代码如何实现吧
由于整个方式都是在中断中实现的,main函数中主要是对DMA和串口的初始化。
以串口2为例,DMA配置如图所示。
将串口2的TX绑定到DMA1的CH1上,由于DMA支持弹性映射,也可以根据需求绑定到其他通道上,DMA发送完成中断这里没有开启,发送完成的处理我放到的串口发送完成中断中处理了,这里可以根据自己的需求修改。
将串口2的RX帮定到了DMA的CH2上,由于DMA支持弹性映射,也可以根据需求绑定到其他通道上。通道4的中断我开启了 半传输中断 和 传输完成中断,这样在大数据传输时就可以实现双缓冲的目的了。
dma_init_struct.memory_base_addr =(uint32_t)uart2_dma_buff.RX_BUFF.rx_buff;//内存地址
在CH2的内存地址设置这,我利用结构体将缓存区分为2个部分,正好与 半传输中断 和 传输完成中断 的数据缓存相对应。 其他具体细节见源码文件。
在配置串口时,先使能相关管脚的时钟和复用功能时钟,并配置相关NVIC中断使能。
       串口2 tx配置到PA2上,rx配置到PA3上。
在串口初始化中,要开启 空闲中断 和 发送完中断 空闲中断是用来处理DMA接收无法处理的不定长度数据。发送完中断用于关闭发送。
DMA中断函数用到绑定串口接收的中断,中断内分为 半传输处理 和传输完处理,将DMA接收到内存的数据进行处理
串口中断内分为发送完中断和空闲中断,发送完中断很好理解,就是关闭发送的DMA通道即可。空闲中断是用来处理不满足DMA接收通道的数据,弥补DMA存在的不足。
       WB415的USART1 USART2 USART3,都支持DMA, 将USART3使用DMA可以高效的实现与蓝牙SOC的通信。
@21ic大掌柜   @21ic小管家

使用特权

评论回复
沙发
tabmone| | 2022-8-20 14:08 | 只看该作者
可以使用fifo吗   

使用特权

评论回复
板凳
6552918|  楼主 | 2022-8-20 14:13 | 只看该作者

可以用,但个人觉得没必要了

使用特权

评论回复
地板
pentruman| | 2022-8-20 16:46 | 只看该作者
串口还是中断好用一些。   

使用特权

评论回复
5
deliahouse887| | 2022-8-20 19:35 | 只看该作者
DMA的速度可以吗  

使用特权

评论回复
6
6552918|  楼主 | 2022-8-20 20:23 | 只看该作者
pentruman 发表于 2022-8-20 16:46
串口还是中断好用一些。

等你真正用起来就知道DMA有多好用。

使用特权

评论回复
7
6552918|  楼主 | 2022-8-20 20:24 | 只看该作者

效率非常高,CPU占用小

使用特权

评论回复
8
tifmill| | 2022-8-20 20:48 | 只看该作者
双缓冲效果怎么样  

使用特权

评论回复
9
6552918|  楼主 | 2022-8-20 20:52 | 只看该作者
tifmill 发表于 2022-8-20 20:48
双缓冲效果怎么样

大数据量时,非常高效

使用特权

评论回复
10
tpgf| | 2022-9-7 16:36 | 只看该作者
手册上的数目并不是我们真正能够使用上的数目

使用特权

评论回复
11
6552918|  楼主 | 2022-9-7 16:37 | 只看该作者
tpgf 发表于 2022-9-7 16:36
手册上的数目并不是我们真正能够使用上的数目

什么意思?

使用特权

评论回复
12
磨砂| | 2022-9-7 16:48 | 只看该作者
tifmill 发表于 2022-8-20 20:48
双缓冲效果怎么样

只能说可能有一定的缓解效果

使用特权

评论回复
13
chenjun89| | 2022-9-7 18:32 | 只看该作者
雅特力要出M7了吗?

使用特权

评论回复
14
晓伍| | 2022-9-7 20:16 | 只看该作者
能提高百分之多少的速度啊

使用特权

评论回复
15
八层楼| | 2022-9-7 20:26 | 只看该作者
根据数据量的多少来选择发送方式吧

使用特权

评论回复
16
观海| | 2022-9-7 20:33 | 只看该作者
DMA有多好用?可是我用不明白DMA啊

使用特权

评论回复
17
guanjiaer| | 2022-9-7 20:40 | 只看该作者
感觉DMA调试过程比较曲折

使用特权

评论回复
18
6552918|  楼主 | 2022-9-7 20:52 | 只看该作者
晓伍 发表于 2022-9-7 20:16
能提高百分之多少的速度啊

是降低CPU的占用,降低中断次数

使用特权

评论回复
19
6552918|  楼主 | 2022-9-7 20:52 | 只看该作者
观海 发表于 2022-9-7 20:33
DMA有多好用?可是我用不明白DMA啊

需要理解DMA工作过程

使用特权

评论回复
20
6552918|  楼主 | 2022-9-7 20:53 | 只看该作者
guanjiaer 发表于 2022-9-7 20:40
感觉DMA调试过程比较曲折

需要理解中断工作过程

使用特权

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

本版积分规则

认证:北京汇冠触摸技术有限公司/电子工程师
简介:电子工程师,嵌入式应用爱好者。

102

主题

1235

帖子

6

粉丝