示波器,厚礼协好贵,但是有时候还是很想看波形怎么办?我们可以使用STM32的ADC配合DMA连续采集波形数据之后利用串口示波器来显示波形。 本期教大伙如何使用STM32 关于ADC配置以及DMA配置。 % w( t* B# _) R9 M8 E/ c 1. 什么是DMA?2 Y: ?' C( @, p Direct Memory Access(DMA): 直接内存操作!是一种允许外设之间或外设和内存之间直接进行数据传输的技术,相当于直接把数据搬到存储区,无需CPU的干预。这提高了数据传输的效率,同时释放了CPU用于其他任务。% X$ W9 w$ x8 B5 @( ^8 j 2. STM32中的DMA特性:0 f, `# t6 q. n, E7 U 多通道支持: STM32的DMA控制器通常支持多个通道,每个通道可以连接到不同的外设或内存区域。 内存到内存传输: DMA可以在两个内存区域之间传输数据,而不涉及外设。& j1 G# Z# p! O- B6 a) h 内存到外设传输: DMA可以从内存传输数据到外设,例如将数据发送到USART或SPI外设。 u {8 ~: \2 O% [ 外设到内存传输: DMA可以从外设接收数据并将其存储到内存中,例如从ADC获取数据。 循环模式: DMA支持循环模式,即在传输完成后重新开始,无需重新配置。 传输方向和数据宽度: DMA支持不同的传输方向(内存到外设、外设到内存等)和数据宽度(8位、16位、32位)。7 O0 a) v4 r9 t2 X) T/ T# |8 @ + V; H p2 I6 E% m; x- z 3. DMA的工作原理:& _ b- m, ~& s f 配置: 在DMA传输之前,需要配置DMA控制寄存器,包括源地址、目的地址、数据宽度、传输方向等。; b2 l( r& S3 |& L) g 触发: 一旦配置完成,DMA可以由硬件或软件触发开始传输。(本期我们选择软件触发) 中断: DMA传输完成时,可以触发中断以通知CPU。0 O5 ]* P/ {- _- o3 y 循环传输: DMA可以配置为在传输完成后自动重新开始,形成循环传输。( _, P# \! j4 y 4. 应用场景:% D9 Y3 l! e! m! h- E8 ` DMA在需要大量数据传输的应用中特别有用,例如音频处理、图像处理、通信协议等。 ) p6 p/ [! Y6 K$ L. G8 M 内容实现 时钟配置 / E6 [: n& g0 G* H1 C/ U( C 首先在CubeMX中选择我们的芯片,配置好时钟树以及时钟。 ?2 Z% g2 |- u& g 引脚配置以及DMA配置+ {1 s S; Z; ]8 k % S1 P8 C% N9 R5 } ' ?* O4 P6 ^0 k0 I6 q 将PA1(或者其他IO)配置为ADC_IN以及模拟模式。 在ADC配置中,开启DMA传输,模式为循环模式! 0 }) [5 v2 }. k3 a2 T " W4 E5 k9 Z/ i/ t" T2 B+ u$ D- f 开启ADC连续转换以及DMA请求~" d; C! m5 z L$ T; t! ]' _ 防止ADC只采样一次以及DMA只工作一次。 工程内容 W0 S& T; Z+ n! t4 Y 接下来就是创建工程了。. E3 M$ O8 X( K6 R" Y7 q7 E8 Q 定义一个全局变量来存放DMA读取的内容
开启DMA,传入相关参数和存储区。' \, E. |0 \1 _7 ~* ?" q* j; A3 l
在While中打印存储区的内容,之后利用我们的串口示波器查看波形。 3 Z0 p! k6 B5 s) b1 U/ i4 t 2 `( k# [6 Q( d/ ^9 N 转载自:电路小白 - f+ d' S/ _% F6 U 如有侵权请联系删除4 r) a# j9 _9 U1 J; \ % `: k9 \/ K. M |
OpenBLT移植到STM32F405开发板
狂欢三】STM32C031使用TIM定时器DMA方式实现WS2812彩灯输出(三)
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法
串口通信波特率异常的解决办法
《RT-Thread设备驱动开发指南》书籍学习记录
STM32F407/STM32F417通过以太网实现在应用中编程 (IAP)
STM32的DMA双缓冲模式详解
基于STM32使用ADC的多通道采样经验分享
STM32固件库分享,超全系列整理
基于STM32的心率计以DMA方式获取传感器数据经验分享