查询和中断不爽吗?为什么要使用串口DMA?(借串口DMA引入)$ s4 ~; F3 Z0 q0 J
如果真的是刚刚接触单片机或嵌入式,肯定会问,因为按照难易程度:DMA>中断>查询。这里我提几个反问句回答。
- 查询方式是不是要在一个循环里反复执行判断?如果串口传输数据频率快于循环频率,请问能及时收到数据吗?
- 中断过于频繁主程序还要不要运行?如果我只接收数据,但不用接收一个字节数据就处理一次,那么请问,有必要频繁中断吗?
- 数据传输过程需不需要时间?需要的话,那我们是不是还要等待?/ S8 @7 f/ m2 G* e$ Y
其实我们要求的很简单,就是高效,传输数据的时候我们不在等待的时间浪费CPU资源,而且数据是一个字节一个字节传送的,接收的时候只要一个数据包最后一个字节数据接收到再处理即可,发送的时候让串口自己一个字节一个字节把数据发出去即可,不用在等待一个字节发送完再发下一字节数据这样。为了提高CPU使用效率,于是就使用DMA方式。
3 c) N0 \: }1 C' S* b" J* j
想学习DMA的可以转到我CSDN的博文查看,为了保持美观,所以文章写到博客上了,相关内容请查看:
CSDN博客:http://blog.csdn.net/weixin_44524484/article/details/105671273
. P+ H. @8 N8 G1 K7 P; ~4 o/ W
以下为文章目录:
DMA配置和使用如此简单(超详细)
- DMA传输% }" z0 g( { G' Y/ P
- 一、查询和中断不爽吗?为什么要使用串口DMA?(借串口DMA引入)
- 二、DMA介绍& g& C1 W2 \" p/ E; v/ S
- 1、什么是DMA?
- 2、STM32上的DMA资源
- 3、DMA主要特征
- 4、DMA请求映像/ t; v9 N% b3 l- M# V- \# Y" S
- (1)DMA1控制器
- (1)DMA2控制器6 l" L" `7 D N
- 5、DMA寄存器介绍
% c0 h a2 I. Q. w7 O# X- (1)DMA中断状态寄存器(DMA_ISR)
- (2)DMA中断标志清除寄存器(DMA_IFCR)
- (3)DMA通道x配置寄存器(DMA_CCRx)(x = 1…7)
- (4)DMA通道x传输数量寄存器(DMA_CNDTRx)(x = 1…7)
- (5)DMA通道x外设地址寄存器(DMA_CPARx)(x = 1…7)
- (6)DMA通道x存储器地址寄存器(DMA_CMARx)(x = 1…7), s' |% K/ R; z* r9 s% e- e9 U
- 6、DMA库函数介绍
+ `5 X* l O4 [% c! ?: D" n# P' f- (1)函数 DMA_DeInit
- (2)函数DMA_Init
- (3)函数DMA_Cmd
- (4)函数 DMA_ITConfig
, x1 @" G! A- o; p
2 u' R; w2 G7 b) _" ^+ Z5 i0 ~
- 三、DMA配置
* [6 w- O h9 t8 ^; x" h9 d+ l g- 1、寄存器版
- 2、库函数版$ W' i# p2 H3 K4 `; r3 x
- 四、DMA使用- {7 `: E# O7 N! `0 b9 P
- 1、查询方式
- 2、中断方式
- 3、不定长数据传输
- 4、双缓冲方式) c7 W) s7 |' M" S$ k
- 五、总结8 ]% I1 ~2 h2 j4 p0 w5 X
+ R: U' [1 a; c4 x
1111111111111111111111111111111111