
示波器,厚礼协好贵,但是有时候还是很想看波形怎么办?我们可以使用STM32的ADC配合DMA连续采集波形数据之后利用串口示波器来显示波形。 本期教大伙如何使用STM32 关于ADC配置以及DMA配置。5 C% y4 e- O! c% N( w 3 k7 u0 N) }! c; ~9 h ![]() * b" e- U7 W! X7 w( n- \ 1. 什么是DMA?* l8 W. ?; E; I( u2 c Direct Memory Access(DMA): 直接内存操作!是一种允许外设之间或外设和内存之间直接进行数据传输的技术,相当于直接把数据搬到存储区,无需CPU的干预。这提高了数据传输的效率,同时释放了CPU用于其他任务。 ' h/ d7 R$ V& {4 ? ~+ k 2. STM32中的DMA特性:" \1 @3 d$ D/ I u; H5 p 多通道支持: STM32的DMA控制器通常支持多个通道,每个通道可以连接到不同的外设或内存区域。+ I& y, `* U+ P 内存到内存传输: DMA可以在两个内存区域之间传输数据,而不涉及外设。 内存到外设传输: DMA可以从内存传输数据到外设,例如将数据发送到USART或SPI外设。 外设到内存传输: DMA可以从外设接收数据并将其存储到内存中,例如从ADC获取数据。/ ^! g1 [: j6 h" h 循环模式: DMA支持循环模式,即在传输完成后重新开始,无需重新配置。. I3 O$ J8 [0 T% G 传输方向和数据宽度: DMA支持不同的传输方向(内存到外设、外设到内存等)和数据宽度(8位、16位、32位)。 " k( r! y- K# h9 [ G" |. c 3. DMA的工作原理:# o7 R# I( }9 [: h( ]7 t 配置: 在DMA传输之前,需要配置DMA控制寄存器,包括源地址、目的地址、数据宽度、传输方向等。0 p, z, D J0 _8 j: T3 z% S1 v 触发: 一旦配置完成,DMA可以由硬件或软件触发开始传输。(本期我们选择软件触发) 中断: DMA传输完成时,可以触发中断以通知CPU。 循环传输: DMA可以配置为在传输完成后自动重新开始,形成循环传输。 4. 应用场景: DMA在需要大量数据传输的应用中特别有用,例如音频处理、图像处理、通信协议等。2 h7 O% I( U% c4 J % H6 F7 _; }* g ) J5 s1 \, ?5 @3 A# m9 U) I 内容实现 时钟配置; Y) r9 l( m2 S2 @ 3 e; c2 ~# y6 w$ @) F3 L ![]() ![]() ! W1 {7 E; [. u4 K 首先在CubeMX中选择我们的芯片,配置好时钟树以及时钟。 8 v, S" O9 Z/ j. {" B9 ] 引脚配置以及DMA配置 ![]() 将PA1(或者其他IO)配置为ADC_IN以及模拟模式。 , V2 Y7 W _* w6 P" T" J ![]() 在ADC配置中,开启DMA传输,模式为循环模式! ![]() 开启ADC连续转换以及DMA请求~ 防止ADC只采样一次以及DMA只工作一次。$ f8 M4 V/ r$ Q- U n4 N 5 h6 v+ b: x; b 工程内容6 C; u2 \5 A# E; o, S4 J5 O 接下来就是创建工程了。 ![]() & {( c/ d# }1 t4 F' A; |0 v# V 定义一个全局变量来存放DMA读取的内容
开启DMA,传入相关参数和存储区。" n, d- x; f) X
在While中打印存储区的内容,之后利用我们的串口示波器查看波形。 ![]() 转载自:电路小白6 F: l2 {6 D; f0 k4 J) Q" ~ 如有侵权请联系删除$ G) X- M* H! |) l# ~" @ ; V+ R) J. i4 j# w+ s% {7 O5 [ 3 D# k9 \1 [3 n; R& W! c ! Z" S3 u, @ J; G: C |