示波器,厚礼协好贵,但是有时候还是很想看波形怎么办?我们可以使用STM32的ADC配合DMA连续采集波形数据之后利用串口示波器来显示波形。 6 p# P4 @+ m, z- N0 Y7 N 本期教大伙如何使用STM32 关于ADC配置以及DMA配置。 7 l. C7 v: Z4 G0 x; {4 b" c 1. 什么是DMA?4 X2 C7 `; \6 M9 h! \ Direct Memory Access(DMA): 直接内存操作!是一种允许外设之间或外设和内存之间直接进行数据传输的技术,相当于直接把数据搬到存储区,无需CPU的干预。这提高了数据传输的效率,同时释放了CPU用于其他任务。: ?; N& }( \4 v, a 0 ]- j3 Y& }% @ c 2. STM32中的DMA特性:$ F8 _, a, v7 A1 y& K- o 多通道支持: STM32的DMA控制器通常支持多个通道,每个通道可以连接到不同的外设或内存区域。 内存到内存传输: DMA可以在两个内存区域之间传输数据,而不涉及外设。" H; s" ~2 \# [0 A 内存到外设传输: DMA可以从内存传输数据到外设,例如将数据发送到USART或SPI外设。 外设到内存传输: DMA可以从外设接收数据并将其存储到内存中,例如从ADC获取数据。4 y5 c* j3 R1 V8 J0 T; [- [ 循环模式: DMA支持循环模式,即在传输完成后重新开始,无需重新配置。' [! g- ?+ Z$ H: j$ c9 f 传输方向和数据宽度: DMA支持不同的传输方向(内存到外设、外设到内存等)和数据宽度(8位、16位、32位)。 3. DMA的工作原理:9 C! G; z$ A. _$ T9 k4 r- Y 配置: 在DMA传输之前,需要配置DMA控制寄存器,包括源地址、目的地址、数据宽度、传输方向等。" W5 a2 i+ J# G# V 触发: 一旦配置完成,DMA可以由硬件或软件触发开始传输。(本期我们选择软件触发) 中断: DMA传输完成时,可以触发中断以通知CPU。 循环传输: DMA可以配置为在传输完成后自动重新开始,形成循环传输。9 M# |" q; k/ T/ [/ Z1 ^( i $ z7 b v2 g$ G q8 }5 c& |& W! i 4. 应用场景: DMA在需要大量数据传输的应用中特别有用,例如音频处理、图像处理、通信协议等。 内容实现 时钟配置6 v8 r; N, K% {7 f& h2 ^ 首先在CubeMX中选择我们的芯片,配置好时钟树以及时钟。% n4 G! |3 ~) A0 s+ ^3 C9 T / ^; R: A: M8 b) m+ f. ~: e 引脚配置以及DMA配置+ {8 ?- C, v' C c1 y 将PA1(或者其他IO)配置为ADC_IN以及模拟模式。 6 e5 X. E( d5 T& d4 p* u 在ADC配置中,开启DMA传输,模式为循环模式!7 s% `: ]# Z, S! V5 z " m8 @- y3 F# V 4 m/ G( b; }2 b: v0 n, t; H) A( n 开启ADC连续转换以及DMA请求~/ v6 A/ `. y3 l# K 防止ADC只采样一次以及DMA只工作一次。: p" T8 C5 j9 A% ^% A* Q ) e r& r7 v ? 工程内容 H" B) P/ f8 s6 A1 b1 M 接下来就是创建工程了。$ J" |0 x8 h" x# L 定义一个全局变量来存放DMA读取的内容 . X9 V" h) e9 D- g
开启DMA,传入相关参数和存储区。) B! Y6 P" Z9 U; y6 H: p6 s+ n
在While中打印存储区的内容,之后利用我们的串口示波器查看波形。* T* g" c: w1 I. N ; v7 T4 D/ r( i u3 r 转载自:电路小白 ( [8 }: D8 \" V6 ? 如有侵权请联系删除 7 x! z2 R5 ~- P( x* N2 j9 [ ( S [( \4 l6 D% v |
基于STM32的DMA经验分享
基于STM32的ADC+DMA采样与板载运放跟随经验分享
基于STM32CubeMX实现ADC的经验分享
STM32固件库分享,超全系列整理
基于STM32F407的DMA采样+FFT时域经验分享
基于STM32利用ADC+DMA采样显示经验分享
基于STM32使用ADC的多通道采样经验分享
基于STM32F407中的RNG获取随机数经验分享
基于STM32的ADC+DMA采样与板载运放跟随经验分享
【中文文档】AN3965_STM32F40x和STM32F41x基于串口的IAP