中级会员
 
- 积分
- 219
- 金钱
- 219
- 注册时间
- 2016-2-19
- 在线时间
- 46 小时
|
5金钱
STM32用串口中断接收一帧数据,还是用DMA接收一帧数据,哪个效率高?
串口接收的波特率为38400bps,9600bps;
实际操作中,我采用了两种方法比对:
第一种:利用UART接收中断,当接收到一个字节时,进入中断,将接收到的数据存入缓存中,当接收到结束符时,则认定一帧数据的接收完毕!
第二种:利用UART的DMA功能接收串口数据,开一个定时器中断1.5ms,查询当DMA接收到数据时,接收数据个数是否有变化,若没有变化则认定一帧接收完毕!
上诉的两种方法测试下来,感觉DMA的效率要一点,当接收数据帧512个字节时,是不是串口在很短的时间内中断512次,而DMA 1.5ms的查询中断似乎更利于减轻CPU的负担,STM32时钟72M,大家觉得那种方法效率较高???
PS:
DMA定时1.5ms的查询的依据是,当9600bps时,(1+8+1+1)/9600=1.145ms;所以我选择1.5ms,不知是否正确???我个人认为一帧数据里,一个字节和一个字节的间隔应该在0.5个字节时间内,所以我选择1.5ms;不知这个逻辑是否存在问题?
后来我思考后,觉得DMA中可以采用结束符判断,结束一帧数据的接收,还未做,不知可行否?
|
最佳答案
查看完整内容[请看2#楼]
如果一帧数据量大或波特率很高,就用DMA。38400的话,就是一个字节要280微秒,已经很慢了,可以用中断接收,对效率影响不大。另外两个字节的间隔应该跟发送方协商好,这个间隔跟波特率没任何关系。
|