打印

请教:STM32F103使用USART1的DMA功能接收无固定长度的数据

[复制链接]
4758|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
clz366|  楼主 | 2012-12-6 10:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 clz366 于 2012-12-6 10:27 编辑

我使用的芯片型号是:STM32F103VET6,
使用USART1的DMA功能接收无固定长度的数据时,遇到下面的问题:


1.串口USART1发送数据,我使用的是STM32F10xR.LIB库中的函数:
void USART_SendData(USART_TypeDef* USARTx, u8 Data) ;



2.由于接收的数据是无固定长度的,我使用的是USART1的DMA功能;
在使用DMA功能时,我发现:只要串口有数据,DMA的接收区中就会收到,而且新收到的数据会添加到上一次收到的数据后面,当接收区收满时,剩余的数据就会覆盖掉接收区以前收到的数据,如此循环接收数据,如下图所示.


3.我的问题是:
(1)我现在使用的是查询方式,但是感觉效率有些低,有没有别的方法解决DMA的这个问题;
(2)如果USART1不使用DMA方式,有没有别的方法接收无固定长度的数据;
谢谢。













沙发
song19881218| | 2012-12-7 10:32 | 只看该作者
(1)你可以把输入引脚接到一个定时器的一个输入端,因为两帧之间肯定会有数据间隔,根据判断这个间隔来确定数据有没有接收完。(2)在串口中断中接收数据,并且计数,用一个定时器来判断间隔,判断有没有接收完成

使用特权

评论回复
板凳
lost1421| | 2012-12-7 11:05 | 只看该作者
好像以前在版里看到有人贴过这个例程的,楼主搜搜看。

使用特权

评论回复
地板
小李瓦大喜| | 2012-12-7 11:21 | 只看该作者
利用串口的空闲中断做

使用特权

评论回复
5
ukkara| | 2012-12-7 11:25 | 只看该作者
mark,等看得懂的时候再来

使用特权

评论回复
6
byrin| | 2012-12-12 21:26 | 只看该作者

使用特权

评论回复
7
linliangqiu| | 2013-6-22 14:07 | 只看该作者
用空闲中断就可以了。

使用特权

评论回复
8
zeluo| | 2013-6-22 18:33 | 只看该作者
什么问题   楼主   不是很了解啊  

使用特权

评论回复
9
airwill| | 2013-6-23 10:21 | 只看该作者
6楼的方案我看了一下, 很不错, 可行.

使用特权

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

本版积分规则

3

主题

8

帖子

0

粉丝