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

STM32F103串口DMA接收并转发问题。

[复制链接]
安少89 发布时间:2015-10-14 10:34
用STM32接收上位机串口的数据并通过另一个串口转发给无线模块。之前是在单片机中接收完数据一帧在转发的,但是这样速度慢,而且上位机发数据时间间隔短的话还容易冲掉之前接收的数据,所以希望用DMA来负责串口数据的接收和转发/ N# l3 y$ a: u- B# p' A

' M; p9 h* N2 F0 N$ P) g7 ~7 b' C
收藏 1 评论5 发布时间:2015-10-14 10:34

举报

5个回答
安少89 回答时间:2015-10-14 10:35:39
最近在网上看见有人写的解决办法,贴出来供大家参考
" h$ R' @% C* S( |3 B3 T今天我在工作中调通了另一种USART+DMA接收未知数据长度的接收,使用的是USRAT空闲总线中断接收,这种方法也在网站上比较多见,以前没试过,今天才知道如此的爽,另外我使用DMA发送USART数据替代了以前的查询法发送,发现更加爽了。其速度快了很多,尤其是在大量数据传输与发送的时候其优势更加明显。$ S6 X! c0 R  L
我举个例子:1、后台数据->USART1-> USART2->其它设备,其它设备数据->USART2-> USART1->后台,这两个数据过程也可能同时进行。
+ m+ r* Q3 r9 d- m3 D2、由于硬件的限制,USART1和USART2的传输波特率不一样,比如USART1使用GPRS通信,USART2使用短距离无线通信;或者USART1使用以太网通信,USART2使用485总线通信。
+ P- c! S/ U5 d# E' t由于在寝室只有笔记本电脑,只有一个串口转USB,没办法实现两个串口之间的数据转发了,只好实现串口各自的数据转发。; F/ _% a0 J, `: W0 \% |
现在我把我实现的过程简单描述一下:! F; ~* x) x$ d, _' v. v- o* M
1、        初始化设置:USART1_RX+DMA1_ Channel5,USART2_RX+DMA1_ Channel6,USART1_TX+DMA1_ Channel4,USART2_TX+DMA1_ Channel7(具体设置请看程序包)。4 N: l) K. j0 i8 j0 Y5 O1 M
2、        当数据发送给USART1接收完毕时候会引起USART1的串口总线中断,计算DMA1_ Channel5内存数组剩余容量,得到接收的字符长度。将接收的字符复制给DMA1_ Channel4内存数组,启动DMA1_ Channel4通道传输数据,(传输完成需要关闭。)下一次数据接收可以在启动DMA1_ Channel4时候就开始,不需要等待DMA1_ Channel4数据传输完成。但是上一次DMA1_ Channel4完成之前,不可以将数据复制给DMA1_ Channel4内存数组,会冲掉以前数据。
0 F' l  S  c4 H! V) \2 q( f3、        USART2类同USART1
ssssss 回答时间:2018-8-13 08:17:33
这个帖子沉了?
rudiger 回答时间:2018-8-13 08:32:15
学习受教了,慢慢体会和消化中
ssssss 回答时间:2018-8-13 14:03:58
关键是他这个方案还是不太好,能不能dma实时转发?
radio2radio 回答时间:2018-8-13 14:33:26
STM32的DMA就是个鸡肋,并不比中断来得效率高。; D- W6 ]+ T' Y! e
看看我的:STM32基于CubeMX的高速串口收发程序
0 j4 N( q7 K1 s1 X! l. x, `& A! T6 V5 ?

, u; B5 U3 u* I3 l

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版