示波器,厚礼协好贵,但是有时候还是很想看波形怎么办?我们可以使用STM32的ADC配合DMA连续采集波形数据之后利用串口示波器来显示波形。, u% g5 N0 o" {7 d; } 5 f* I8 H- u; Z& B& T5 ]2 i 本期教大伙如何使用STM32 关于ADC配置以及DMA配置。 1. 什么是DMA?( I1 K/ _0 F$ Y: P/ }9 f K4 ] Direct Memory Access(DMA): 直接内存操作!是一种允许外设之间或外设和内存之间直接进行数据传输的技术,相当于直接把数据搬到存储区,无需CPU的干预。这提高了数据传输的效率,同时释放了CPU用于其他任务。 2. STM32中的DMA特性:3 J: l& [. C" G 多通道支持: STM32的DMA控制器通常支持多个通道,每个通道可以连接到不同的外设或内存区域。 内存到内存传输: DMA可以在两个内存区域之间传输数据,而不涉及外设。 内存到外设传输: DMA可以从内存传输数据到外设,例如将数据发送到USART或SPI外设。 外设到内存传输: DMA可以从外设接收数据并将其存储到内存中,例如从ADC获取数据。 循环模式: DMA支持循环模式,即在传输完成后重新开始,无需重新配置。 传输方向和数据宽度: DMA支持不同的传输方向(内存到外设、外设到内存等)和数据宽度(8位、16位、32位)。! N0 L; `) a# A7 w( r5 r$ }- |3 G $ W2 f; T, [- b! g 3. DMA的工作原理:0 y3 m/ I/ C! y: ^8 { 配置: 在DMA传输之前,需要配置DMA控制寄存器,包括源地址、目的地址、数据宽度、传输方向等。9 C+ R% n F; c( s 触发: 一旦配置完成,DMA可以由硬件或软件触发开始传输。(本期我们选择软件触发) 中断: DMA传输完成时,可以触发中断以通知CPU。 循环传输: DMA可以配置为在传输完成后自动重新开始,形成循环传输。 4. 应用场景: DMA在需要大量数据传输的应用中特别有用,例如音频处理、图像处理、通信协议等。) m& G3 J Y3 ], S- c% C6 n $ b! g! p4 q# \* f; c 内容实现 U8 x8 i* t: G, Z; T0 G 时钟配置 % z/ C1 F, z: i3 ^4 ~1 f4 K$ _ 首先在CubeMX中选择我们的芯片,配置好时钟树以及时钟。( V2 J9 j' G, X0 l* [- C1 s" t - X3 C7 c5 \7 S( h7 ~- c- ~ 引脚配置以及DMA配置2 Q% y7 D9 \ H2 H7 u 5 d+ \- {# t& S: `0 H) w 6 _- _* K2 m1 K( o9 ~ 将PA1(或者其他IO)配置为ADC_IN以及模拟模式。! I3 x8 L% [1 _' N$ M8 X+ Y) g& C 在ADC配置中,开启DMA传输,模式为循环模式!. O* w5 |4 a/ i" z 开启ADC连续转换以及DMA请求~ 防止ADC只采样一次以及DMA只工作一次。 工程内容! H& ]$ ~) I2 b 接下来就是创建工程了。; G7 ^' Y3 ]& B- {/ ]9 t ' n* c! p0 l2 p+ i% n 定义一个全局变量来存放DMA读取的内容 $ c0 x. c& M2 \8 _
开启DMA,传入相关参数和存储区。3 z& |9 d4 I& [( [# j: }
在While中打印存储区的内容,之后利用我们的串口示波器查看波形。 ?1 W3 d) e0 N) V6 {! v4 K5 Z 转载自:电路小白 $ Z2 T# B1 `5 R1 u 如有侵权请联系删除 + F6 ?6 N* g+ H! ^1 w' N ' I$ g* Z9 b, W g* X; z, D |
《RT-Thread设备驱动开发指南》书籍学习记录
STM32F407/STM32F417通过以太网实现在应用中编程 (IAP)
STM32的DMA双缓冲模式详解
基于STM32使用ADC的多通道采样经验分享
STM32固件库分享,超全系列整理
基于STM32的心率计以DMA方式获取传感器数据经验分享
分享STM32F407的学习资料 附学习笔记
基于STM32利用ADC+DMA采样显示经验分享
STM32F4中文资料--基础篇
【经验分享】STM32使用DMA接收串口数据