
示波器,厚礼协好贵,但是有时候还是很想看波形怎么办?我们可以使用STM32的ADC配合DMA连续采集波形数据之后利用串口示波器来显示波形。- D6 a( I4 m! F* n+ P' t1 F* J ! a5 [9 j6 Y V: B' a# m2 \ 本期教大伙如何使用STM32 关于ADC配置以及DMA配置。0 k. U- F+ H; R) b) L j' x: }3 d6 Y* H ![]() ! s9 z# x# Q6 P* `* s 1. 什么是DMA?! l- y% K" y1 X- P$ W. n* p7 f. k Direct Memory Access(DMA): 直接内存操作!是一种允许外设之间或外设和内存之间直接进行数据传输的技术,相当于直接把数据搬到存储区,无需CPU的干预。这提高了数据传输的效率,同时释放了CPU用于其他任务。6 \4 ], @8 N: K$ R' s; q 2 F' U. s& ~0 t$ K& a7 j6 ?" P 2. STM32中的DMA特性:, ]7 X7 Q2 ^! p+ T7 a9 K% G 多通道支持: STM32的DMA控制器通常支持多个通道,每个通道可以连接到不同的外设或内存区域。- d3 X& l7 l( j U5 T 内存到内存传输: DMA可以在两个内存区域之间传输数据,而不涉及外设。 内存到外设传输: DMA可以从内存传输数据到外设,例如将数据发送到USART或SPI外设。. Z1 V9 F3 E& s/ X9 Z 外设到内存传输: DMA可以从外设接收数据并将其存储到内存中,例如从ADC获取数据。7 r8 R5 U/ _1 i4 O6 C 循环模式: DMA支持循环模式,即在传输完成后重新开始,无需重新配置。( U F: t1 K7 ^$ h6 N" s) A 传输方向和数据宽度: DMA支持不同的传输方向(内存到外设、外设到内存等)和数据宽度(8位、16位、32位)。- k' Y3 C9 [- d/ E6 m6 ` $ A$ o" B3 a6 q4 Y 3. DMA的工作原理: 配置: 在DMA传输之前,需要配置DMA控制寄存器,包括源地址、目的地址、数据宽度、传输方向等。4 D% w/ O f! L 触发: 一旦配置完成,DMA可以由硬件或软件触发开始传输。(本期我们选择软件触发)% R& i0 Z+ I. Z- b 中断: DMA传输完成时,可以触发中断以通知CPU。 循环传输: DMA可以配置为在传输完成后自动重新开始,形成循环传输。# S# l' A( h* \ 4. 应用场景:& z5 Q# a4 D( q: E. x* [6 W R DMA在需要大量数据传输的应用中特别有用,例如音频处理、图像处理、通信协议等。) `# _. H8 h/ i# _/ U; }8 m % ~. C0 b1 g: h6 o 内容实现 时钟配置 ![]() ![]() * l6 A! Z5 d+ P+ e 首先在CubeMX中选择我们的芯片,配置好时钟树以及时钟。# P- X) C1 X! E 引脚配置以及DMA配置/ U0 K/ S+ `. }% l ![]() 将PA1(或者其他IO)配置为ADC_IN以及模拟模式。 ![]() , y3 z A: N7 z 在ADC配置中,开启DMA传输,模式为循环模式! " l& Z+ F2 l3 O N9 v ![]() 开启ADC连续转换以及DMA请求~0 V) h& N6 c& K- u" ?& e- b6 e% @ 防止ADC只采样一次以及DMA只工作一次。( Q5 V* U6 G) D( o% `# h2 L" N ; B9 m( Q& W6 P* ~5 p' j 工程内容5 r; h. A* u W( l2 ~% \ 接下来就是创建工程了。" U4 T( a8 b/ g1 y9 i f ; R& A- E; n6 Q8 x% k ![]() 定义一个全局变量来存放DMA读取的内容0 w$ @/ Q ~4 \, C9 m ) d4 P% d# B9 K) G8 K' M# c
开启DMA,传入相关参数和存储区。
在While中打印存储区的内容,之后利用我们的串口示波器查看波形。" M2 V. |: t/ b6 G( \6 P( n) I2 L( K ~ / [# z. x" s: _ ![]() 1 N: F# s* n$ J 转载自:电路小白" q4 g. s/ d7 Z' O- z9 U, { ( i; }5 P- _6 _+ F7 d8 g 如有侵权请联系删除 4 \: H* U1 u5 @/ i- A |