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

[复制链接]
5534|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方式,有没有别的方法接收无固定长度的数据;
谢谢。



01.JPG 02.JPG









song19881218 发表于 2012-12-7 10:32 | 显示全部楼层
(1)你可以把输入引脚接到一个定时器的一个输入端,因为两帧之间肯定会有数据间隔,根据判断这个间隔来确定数据有没有接收完。(2)在串口中断中接收数据,并且计数,用一个定时器来判断间隔,判断有没有接收完成
lost1421 发表于 2012-12-7 11:05 | 显示全部楼层
好像以前在版里看到有人贴过这个例程的,楼主搜搜看。
小李瓦大喜 发表于 2012-12-7 11:21 | 显示全部楼层
利用串口的空闲中断做
ukkara 发表于 2012-12-7 11:25 | 显示全部楼层
mark,等看得懂的时候再来
byrin 发表于 2012-12-12 21:26 | 显示全部楼层
linliangqiu 发表于 2013-6-22 14:07 | 显示全部楼层
用空闲中断就可以了。
zeluo 发表于 2013-6-22 18:33 | 显示全部楼层
什么问题   楼主   不是很了解啊  
airwill 发表于 2013-6-23 10:21 | 显示全部楼层
6楼的方案我看了一下, 很不错, 可行.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

8

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部