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

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

[复制链接]
安少89 发布时间:2015-10-14 10:34
用STM32接收上位机串口的数据并通过另一个串口转发给无线模块。之前是在单片机中接收完数据一帧在转发的,但是这样速度慢,而且上位机发数据时间间隔短的话还容易冲掉之前接收的数据,所以希望用DMA来负责串口数据的接收和转发
+ y' Y# \$ M0 z% V
  H2 ^+ N  V) K0 |* e
赞 收藏 1 评论5 发布时间:2015-10-14 10:34

举报

5个回答
安少89 回答时间:2015-10-14 10:35:39
最近在网上看见有人写的解决办法,贴出来供大家参考
4 g: Z. Z4 o7 e- \今天我在工作中调通了另一种USART+DMA接收未知数据长度的接收,使用的是USRAT空闲总线中断接收,这种方法也在网站上比较多见,以前没试过,今天才知道如此的爽,另外我使用DMA发送USART数据替代了以前的查询法发送,发现更加爽了。其速度快了很多,尤其是在大量数据传输与发送的时候其优势更加明显。
, v+ l& k  h- l9 k- Y, z; L# C2 v我举个例子:1、后台数据->USART1-> USART2->其它设备,其它设备数据->USART2-> USART1->后台,这两个数据过程也可能同时进行。" @5 c# T0 n5 D2 S8 j$ q7 B
2、由于硬件的限制,USART1和USART2的传输波特率不一样,比如USART1使用GPRS通信,USART2使用短距离无线通信;或者USART1使用以太网通信,USART2使用485总线通信。
# B2 S# B% g, q8 S3 L由于在寝室只有笔记本电脑,只有一个串口转USB,没办法实现两个串口之间的数据转发了,只好实现串口各自的数据转发。
. u8 n$ {8 \* m* Q) ~5 z" W5 i( O$ w/ a现在我把我实现的过程简单描述一下:4 {8 n0 D0 @( v6 q7 t
1、        初始化设置:USART1_RX+DMA1_ Channel5,USART2_RX+DMA1_ Channel6,USART1_TX+DMA1_ Channel4,USART2_TX+DMA1_ Channel7(具体设置请看程序包)。/ c) w/ T7 s, f- S0 O
2、        当数据发送给USART1接收完毕时候会引起USART1的串口总线中断,计算DMA1_ Channel5内存数组剩余容量,得到接收的字符长度。将接收的字符复制给DMA1_ Channel4内存数组,启动DMA1_ Channel4通道传输数据,(传输完成需要关闭。)下一次数据接收可以在启动DMA1_ Channel4时候就开始,不需要等待DMA1_ Channel4数据传输完成。但是上一次DMA1_ Channel4完成之前,不可以将数据复制给DMA1_ Channel4内存数组,会冲掉以前数据。
) x% c9 I1 v* \3 t: @1 v. e! V3、        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就是个鸡肋,并不比中断来得效率高。6 u: H0 ?' L' }6 @: p3 H( H
看看我的:STM32基于CubeMX的高速串口收发程序9 b! V9 y. H! Q& K( t
% _- |5 ~# l4 t3 C) d0 z, B
" C2 Z: h; s- J9 p; A. P& _: P

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版