西故山 > 随笔 > 人生感悟 > 人生得意须尽欢

人生得意须尽欢

来源:网络转载 2017-05-21 11:32 编辑: www.xigushan.com 查看:

博主的更多文章>>

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

2012-06-18 23:20:42

标签:

 在一些应用中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];

0人

了这篇文章

类别:嵌入式┆阅读(0)┆评论(0) ┆ 返回博主首页┆返回博客首页

上一篇 静坐修道与长生不老---南怀瑾 下一篇 stm32F407之USART6的DMA工作方式