您的位置:首页 > 其它

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

2012-06-18 23:20 323 查看
在一些应用中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];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐