打印

使用DMA+USART接收无固定长度的串行数据

[复制链接]
15669|52
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ST_ARM|  楼主 | 2009-8-3 17:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ST_ARM 于 2009-8-3 17:36 编辑

在一些应用中MCU接收串行数据时,会出现接收到多个不同长度的数据流,由于STM32没有串行接收超时功能,这使得STM32的用户觉得不是很方便。为此我使用STM32的定时器实现接收无固定长度的串行数据,希望对STM32的用户有所帮助。

一、方案说明:
1、在使用DMA+USART接收数据时,将接收引脚(RX)的外部中断打开,当接收第一个数据的起始位时产生外部中断,在外部中断处理程序中,关闭外部中断功能,同时使能定时器(本例程中使用SysTick),开始接收数据的计时;
2、在DMA接收到最长的数据流时,在DMA中断处理程序中,清除中断标志,设置接收结束标志和长度。
3、在定时器中断中,计数器加一,当计数器达到延时计数值时,表明DMA接收到的数据没有到达最大值。此时停止定时器,计算已经接收数据的长度,设置接收结束标志。
4、在主程序中,对接收的数据进行处理后,重新初始化DMA,并打开接收引脚(RX)的外部中断功能。
二、代码使用说明:
1、用户需根据自己的应用,设置DMA接收的最长数据长度,根据数据长度和串口传输的波特率计算出需定时的时间长度,设置延时计数值用以定时比较。
#define  Rx_Buffer_Size 64
#define  DELAY_TIME 7
unsigned char RX_Buffer[Rx_Buffer_Size];
STM32.zip (230.25 KB)

STM32.zip

230.25 KB

评分
参与人数 1威望 +1 收起 理由
啦啦啦007 + 1 还有什么好说的,必须顶
沙发
john_light| | 2009-8-3 17:40 | 只看该作者
很明显,这个要顶。

使用特权

评论回复
板凳
zhuhai2004| | 2009-8-3 21:00 | 只看该作者
不错啊,DMA是提高效率的利剑。

使用特权

评论回复
地板
leebai_001| | 2009-8-4 08:39 | 只看该作者
非常明显,这个必须得定。

使用特权

评论回复
5
cambrain| | 2009-12-15 17:38 | 只看该作者
刚好要用到。呵呵。不错。

使用特权

评论回复
6
lovestm32| | 2010-3-25 10:04 | 只看该作者
呵呵~~及时雨啊

使用特权

评论回复
7
fengyan81| | 2010-3-25 16:32 | 只看该作者
顶一下

使用特权

评论回复
8
sunxflower| | 2010-3-26 22:32 | 只看该作者
我用第一个数据当作长度,开启DMA。然后给一个信号到任务,该任务就等待DMA接收完毕的信号,若超时未等到,那就当错误处理。

使用特权

评论回复
9
wangjckj| | 2010-3-27 13:34 | 只看该作者
非常好

使用特权

评论回复
10
Swd21ic| | 2010-3-27 19:24 | 只看该作者
楼主英明

使用特权

评论回复
11
essencezj| | 2010-3-28 11:58 | 只看该作者
非常好

使用特权

评论回复
12
pkat| | 2010-3-28 20:51 | 只看该作者
这个方案比较好

使用特权

评论回复
13
cwei85| | 2010-3-29 12:41 | 只看该作者
本帖最后由 cwei85 于 2010-3-29 12:55 编辑

不错的想法,正愁接收数据不能够用DMA呢。
不过用这种方式接收数据比用中断接收数据要延时 (最大接收个数—接收个数)* 每个字节发送时间+设置超时时间。
响应速度变慢了点。

使用特权

评论回复
14
kgsz| | 2011-6-13 15:38 | 只看该作者
:) 学习下

使用特权

评论回复
15
无冕之王| | 2011-6-13 16:36 | 只看该作者
楼主的这个想法不错,值得学习

使用特权

评论回复
16
hsbjb| | 2011-6-13 19:38 | 只看该作者
值得借鉴的代码

使用特权

评论回复
17
kavieen| | 2011-7-2 10:10 | 只看该作者
mark

使用特权

评论回复
18
gaobq| | 2011-7-2 10:36 | 只看该作者
好,谢谢!

使用特权

评论回复
19
teet| | 2011-7-3 11:21 | 只看该作者
很酷的资料

使用特权

评论回复
20
teet| | 2011-7-3 11:21 | 只看该作者
谢谢楼主分享

使用特权

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

本版积分规则

14

主题

844

帖子

1

粉丝