stm32串口dma加空闲中断 实现fifo接收数据 串口高效收发思路

我做这个串口数据接收 dma+空闲中断 加fifo  实现串口的高效收发  ,主要是串口接收的数据长度不定长,时间超时也不好做,还要串口收发的效率要高,采用串口数据的接收 dma+空闲中断+fifo的方式  速度快和效率高,不占用cpu的时间还短

对比了其他几种方式

1:采用串口中断的话,每接收1byte就得中断一次。这样太消耗CPU资源! 频繁进中断,占用中断,特别是对时间和时序要求比较严格的时候 串口频繁进入中断导致其他中断时序有影响

 

2:采用DMA方式接收数据,接收的数据长度必须是固定的  对于接收数据长度不固定就不怎么好弄了,特别像gprs通信,接收长度不固定,这些都是困扰我

 

3:采用dma方式接收数据+定时器超时中断,这样来确定一帧数据完成,需要开关定时器,操作比较复杂,超时时间还不太好设置,stm32f1和f4 没有超时中断还只能采用定时器或者把rxd引脚接到stm32定时器触发引脚上来实现超时, 

4:stm32串口dma方式接收数据+空闲中断或者超时中断+fifo 这种分内事来实现不定长的数据和高效的串口数据接收   效率比其他的方式要快,消耗cpu的时间比较少,这样应用可以做数据超时

所以我采用了stm32串口dma方式接收数据+空闲中断或者超时中断+fifo方式来实现

像stm32f103和stm32f407芯片没有时间超时中断  需要定时器来做超时 比较麻烦,nxp的部分芯片串口有超时中断,atmel的部分芯片串口有超时中断,stm32的h7和f7系列才有超时中断

要实现stm32串口dma方式接收数据+空闲中断或者超时中断+fifo方式来实现

第一步 stm32的串口dma配置 ,串口的初始化,还有串口的空闲中断

1,通过stm32的cubemx软件来生成串口+dma配置的初始化

cubemx生成代码都是HAL库的模式,我就以stm32f4的HAL库的方式实现

UART_HandleTypeDe

猜你喜欢

转载自blog.csdn.net/liwen209/article/details/105025679