示波器,厚礼协好贵,但是有时候还是很想看波形怎么办?我们可以使用STM32的ADC配合DMA连续采集波形数据之后利用串口示波器来显示波形。 本期教大伙如何使用STM32 关于ADC配置以及DMA配置。& a5 Q8 `2 v: f& D' K # }8 L! z" L( F7 k1 S , V8 S4 C7 s. u ?6 A$ n& m 1. 什么是DMA?$ k5 _6 L+ {# V Direct Memory Access(DMA): 直接内存操作!是一种允许外设之间或外设和内存之间直接进行数据传输的技术,相当于直接把数据搬到存储区,无需CPU的干预。这提高了数据传输的效率,同时释放了CPU用于其他任务。- Q% J3 U. m5 [( Q1 D* P) V 2. STM32中的DMA特性: 多通道支持: STM32的DMA控制器通常支持多个通道,每个通道可以连接到不同的外设或内存区域。 内存到内存传输: DMA可以在两个内存区域之间传输数据,而不涉及外设。! ?! A. v5 p* |& g$ X# O 内存到外设传输: DMA可以从内存传输数据到外设,例如将数据发送到USART或SPI外设。 外设到内存传输: DMA可以从外设接收数据并将其存储到内存中,例如从ADC获取数据。/ @/ @& n W/ L3 q1 r" S 循环模式: DMA支持循环模式,即在传输完成后重新开始,无需重新配置。; a/ G2 L/ i# G* S( k0 Z 传输方向和数据宽度: DMA支持不同的传输方向(内存到外设、外设到内存等)和数据宽度(8位、16位、32位)。% G3 c6 N. D" Y0 \$ J. k5 i - }0 d! P4 }& h' n( s( b- @/ r 3. DMA的工作原理:$ v+ ?1 p& d+ ~9 ?0 M2 M' L 配置: 在DMA传输之前,需要配置DMA控制寄存器,包括源地址、目的地址、数据宽度、传输方向等。 触发: 一旦配置完成,DMA可以由硬件或软件触发开始传输。(本期我们选择软件触发) 中断: DMA传输完成时,可以触发中断以通知CPU。 循环传输: DMA可以配置为在传输完成后自动重新开始,形成循环传输。 4. 应用场景: DMA在需要大量数据传输的应用中特别有用,例如音频处理、图像处理、通信协议等。6 z, n' U. E$ Z* f2 x2 H! D + e9 s' \/ {1 T6 o4 { 1 L1 t2 x/ R r+ ^" l9 p! }$ U 内容实现; R; J% ~% x( x 时钟配置 " p1 @4 _1 V7 T + A2 B" U. E' v! G' Z: Y% t+ J 首先在CubeMX中选择我们的芯片,配置好时钟树以及时钟。7 W2 n$ [2 I1 Y # Q$ A' Y! M1 Q( R 引脚配置以及DMA配置6 A ]- D, g' O! g) i1 O( e* {) d' z * n A0 @+ X' [5 Q$ L2 E$ h3 o 将PA1(或者其他IO)配置为ADC_IN以及模拟模式。 在ADC配置中,开启DMA传输,模式为循环模式!% s# T$ G: H! X7 @ 开启ADC连续转换以及DMA请求~/ E) v2 M9 z$ L' ~ j+ L0 Q3 A' H 防止ADC只采样一次以及DMA只工作一次。 工程内容& q `/ A! g, v" H3 C 接下来就是创建工程了。 ' R- b- B+ S: b6 C) ^% m ! \: D: v$ W9 e8 {9 W R/ w+ ] 定义一个全局变量来存放DMA读取的内容+ Q+ g5 `0 m/ J" B
开启DMA,传入相关参数和存储区。1 ~) _) b, \* o* O+ h& S4 b
在While中打印存储区的内容,之后利用我们的串口示波器查看波形。* w2 |, A# l- w2 ~1 X : Q* W9 b; D% d( U 转载自:电路小白# \) G H$ J4 i7 } : z4 e' y4 ~$ X0 a9 H) f, ~+ C 如有侵权请联系删除 q7 t3 m- o9 N2 @! C) N9 A 1 v$ o' o, b4 Y3 a8 X |
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法
串口通信波特率异常的解决办法
《RT-Thread设备驱动开发指南》书籍学习记录
STM32F407/STM32F417通过以太网实现在应用中编程 (IAP)
STM32的DMA双缓冲模式详解
基于STM32使用ADC的多通道采样经验分享
STM32固件库分享,超全系列整理
基于STM32的心率计以DMA方式获取传感器数据经验分享
分享STM32F407的学习资料 附学习笔记
基于STM32利用ADC+DMA采样显示经验分享