STM32串口中断+DMA接收不定长字符串
硬件平台:stm32f103rct6(大容量产品)
软件环境:KEIL MDK+stm32f1固件库
串口:USART1
-----------------------------------------------------------------------------
看了网上很多讲串口中断+DMA接收不定长字符串的例子,要么大家抄来抄去不加验证,要么没有源代码,要么对空闲中断解释不清楚。 今天有空来整理一下,下面的代码经过本人验证。
接收定长字符串简单,直接在中断里将字符放到数组里即可。
但是接收不定长字符串就比较麻烦,因为你不知道什么时候一帧数据接收完了。通常有两种方法来接收不定长字符串:超时判断,串口空闲中断。今天我们先介绍第二种方法。
首先明确一个概念,什么是STM32的空闲中断,下面是stm32数据手册1对空闲中断的定义:
空闲符号被视为完全由’1’组成的一个完整的数据帧,后面跟着包含了数据的下一帧的开始位(‘1’的位数也包括了停止位的位数)。
也就是全部由1组成的一帧数据是空闲帧,包括起始位停止位都是1。当我们用串口助手发送完一串数据后,TXD引脚默认为高电平,此时我们可以认为发送完这一串的数据的最后一个字节后,紧跟着一个空闲中断。图1是手册里面的解释。