示波器,厚礼协好贵,但是有时候还是很想看波形怎么办?我们可以使用STM32的ADC配合DMA连续采集波形数据之后利用串口示波器来显示波形。 本期教大伙如何使用STM32 关于ADC配置以及DMA配置。 3 A7 W# N- c/ E 6 `5 F$ b0 s6 j 1. 什么是DMA?6 K* O# _( @0 e# H Direct Memory Access(DMA): 直接内存操作!是一种允许外设之间或外设和内存之间直接进行数据传输的技术,相当于直接把数据搬到存储区,无需CPU的干预。这提高了数据传输的效率,同时释放了CPU用于其他任务。- k6 |8 U7 V) V2 p 2. STM32中的DMA特性:) H0 P% c) |1 \ 多通道支持: STM32的DMA控制器通常支持多个通道,每个通道可以连接到不同的外设或内存区域。. @2 \6 f" }6 x. h; t6 e 内存到内存传输: DMA可以在两个内存区域之间传输数据,而不涉及外设。 内存到外设传输: DMA可以从内存传输数据到外设,例如将数据发送到USART或SPI外设。" I2 G5 c. i* h. e: B D 外设到内存传输: DMA可以从外设接收数据并将其存储到内存中,例如从ADC获取数据。+ i9 {+ r0 G( S& W! T 循环模式: DMA支持循环模式,即在传输完成后重新开始,无需重新配置。 传输方向和数据宽度: DMA支持不同的传输方向(内存到外设、外设到内存等)和数据宽度(8位、16位、32位)。 3. DMA的工作原理:$ Q; z2 }. G* u) _# \5 Z) @) B 配置: 在DMA传输之前,需要配置DMA控制寄存器,包括源地址、目的地址、数据宽度、传输方向等。 触发: 一旦配置完成,DMA可以由硬件或软件触发开始传输。(本期我们选择软件触发): j9 W3 d* Y- y2 ]- r 中断: DMA传输完成时,可以触发中断以通知CPU。3 J/ p8 k2 F- w/ t/ X6 t 循环传输: DMA可以配置为在传输完成后自动重新开始,形成循环传输。 4. 应用场景: DMA在需要大量数据传输的应用中特别有用,例如音频处理、图像处理、通信协议等。1 z# i$ o. V: O1 t 5 y3 z6 n: o% M5 v+ E 内容实现* ~- s2 h! }! |* U0 o 时钟配置; P' h2 J0 c* | y5 Q" y" S " q- d# Y. \) h - x8 H. m( j9 g+ K% u0 g$ } $ M3 J+ l" y6 K9 c. p: | 首先在CubeMX中选择我们的芯片,配置好时钟树以及时钟。 8 N, i8 c4 ~% i 引脚配置以及DMA配置2 N9 v8 Z4 z) j / v9 r: o* w5 k$ c" y2 M6 a7 N 将PA1(或者其他IO)配置为ADC_IN以及模拟模式。 # W* H6 e, l5 U- E: ^9 | 在ADC配置中,开启DMA传输,模式为循环模式!: j7 {7 b W# f0 X; d. \ 4 H' n# O3 x4 X* e 开启ADC连续转换以及DMA请求~ 防止ADC只采样一次以及DMA只工作一次。' |0 _, A$ T# T+ H( h: ?; D- L 工程内容. V1 {( q7 u( N, t 接下来就是创建工程了。5 c. \' x+ c; ]9 C( q# P! J g$ Y) O* L! @$ [; |) \6 F$ d' X% C. } 定义一个全局变量来存放DMA读取的内容
开启DMA,传入相关参数和存储区。
在While中打印存储区的内容,之后利用我们的串口示波器查看波形。6 r. A* F4 A9 z' [! C 转载自:电路小白9 ^0 D" m: a) M4 R" r) \# m ( ~: |9 N, i; s) z5 J 如有侵权请联系删除' J+ P$ d6 n6 E" j; w4 A) _. F 8 T Q- K9 j+ X0 ^' B3 R9 ] - p) c+ F5 p$ y2 {$ L |
基于STM32使用ADC的多通道采样经验分享
STM32F407/STM32F417通过以太网实现在应用中编程 (IAP)
STM32固件库分享,超全系列整理
基于STM32的心率计以DMA方式获取传感器数据经验分享
分享STM32F407的学习资料 附学习笔记
基于STM32利用ADC+DMA采样显示经验分享
STM32F4中文资料--基础篇
【经验分享】STM32使用DMA接收串口数据
基于STM32的DMA经验分享
基于STM32的ADC+DMA采样与板载运放跟随经验分享