你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32F407和Cubemx的ADC采集+DMA传输实现简易示波器经验分享

[复制链接]
攻城狮Melo 发布时间:2024-6-15 12:46
示波器,厚礼协好贵,但是有时候还是很想看波形怎么办?我们可以使用STM32的ADC配合DMA连续采集波形数据之后利用串口示波器来显示波形。
$ ^9 c/ d8 G, y5 i! G
8 u& b' E. @/ W9 n
本期教大伙如何使用STM32 关于ADC配置以及DMA配置。5 C% y4 e- O! c% N( w
3 k7 u0 N) }! c; ~9 h
微信图片_20240615124558.png 8 N0 H+ j4 o% j5 {" X0 H) z
* b" e- U7 W! X7 w( n- \
1. 什么是DMA?* l8 W. ?; E; I( u2 c
Direct Memory Access(DMA): 直接内存操作!是一种允许外设之间或外设和内存之间直接进行数据传输的技术,相当于直接把数据搬到存储区,无需CPU的干预。这提高了数据传输的效率,同时释放了CPU用于其他任务。
8 p& T  c% ?3 B8 q3 k
' h/ d7 R$ V& {4 ?  ~+ k
2. STM32中的DMA特性:" \1 @3 d$ D/ I  u; H5 p
多通道支持: STM32的DMA控制器通常支持多个通道,每个通道可以连接到不同的外设或内存区域。+ I& y, `* U+ P
内存到内存传输: DMA可以在两个内存区域之间传输数据,而不涉及外设。
: j" l; N2 M8 K9 J; N  N. q# z内存到外设传输: DMA可以从内存传输数据到外设,例如将数据发送到USART或SPI外设。
3 d8 b7 P1 i4 j8 e" A9 ]1 g: K外设到内存传输: DMA可以从外设接收数据并将其存储到内存中,例如从ADC获取数据。/ ^! g1 [: j6 h" h
循环模式: DMA支持循环模式,即在传输完成后重新开始,无需重新配置。. I3 O$ J8 [0 T% G
传输方向和数据宽度: DMA支持不同的传输方向(内存到外设、外设到内存等)和数据宽度(8位、16位、32位)。
4 n! r$ ^. i6 \7 j" k( r! y- K# h9 [  G" |. c
3. DMA的工作原理:# o7 R# I( }9 [: h( ]7 t
配置: 在DMA传输之前,需要配置DMA控制寄存器,包括源地址、目的地址、数据宽度、传输方向等。0 p, z, D  J0 _8 j: T3 z% S1 v
触发: 一旦配置完成,DMA可以由硬件或软件触发开始传输。(本期我们选择软件触发)
) Q/ v7 A& M4 Z4 _" q  F中断: DMA传输完成时,可以触发中断以通知CPU。
5 R) u; D/ D# p循环传输: DMA可以配置为在传输完成后自动重新开始,形成循环传输。
! O& K, w( r+ |' v
% c- Z$ |4 y& h9 W7 B8 e4. 应用场景:
" T; o& \2 x0 V" ]DMA在需要大量数据传输的应用中特别有用,例如音频处理、图像处理、通信协议等。2 h7 O% I( U% c4 J
% H6 F7 _; }* g
) J5 s1 \, ?5 @3 A# m9 U) I
内容实现
) \) o" m# i" I- A时钟配置; Y) r9 l( m2 S2 @
3 e; c2 ~# y6 w$ @) F3 L
微信图片_20240615124555.png $ U- @! k' _, G% u% V( ~- F0 \

  O4 q$ F/ J; ^. d0 I  e 微信图片_20240615124552.png   c+ T- s9 U6 `: P) H* G
! W1 {7 E; [. u4 K
首先在CubeMX中选择我们的芯片,配置好时钟树以及时钟。
8 i; G) B+ H3 h' v# w8 v, S" O9 Z/ j. {" B9 ]
引脚配置以及DMA配置
4 y. T; W1 e6 z
8 P1 |9 N9 k' V 微信图片_20240615124549.png   ^# ]6 ?, W2 i; D) i

1 ^1 `7 x: q: ]! z将PA1(或者其他IO)配置为ADC_IN以及模拟模式。
( Q5 X+ N2 _& v9 g$ ], V2 Y7 W  _* w6 P" T" J
微信图片_20240615124545.png
/ E% ]  m% b# z% B$ z% a

3 Y% t+ C1 C% H6 B& [+ U在ADC配置中,开启DMA传输,模式为循环模式!
% Z) R( _) |$ F4 ~  v
% Z) S3 g5 [9 z" I1 v8 n& @ 微信图片_20240615124519.png
0 [! o- H/ L" u- `& @- z( G

0 n+ g" P2 z( g* g! o- u7 x开启ADC连续转换以及DMA请求~
& Q* R$ y& J8 p# ]) ^: T$ V( d' _4 P防止ADC只采样一次以及DMA只工作一次。$ f8 M4 V/ r$ Q- U  n4 N
5 h6 v+ b: x; b
工程内容6 C; u2 \5 A# E; o, S4 J5 O
接下来就是创建工程了。
' r& V6 A3 b& B% V$ Q0 u
8 K4 K, O* A+ e  h3 c, ]" R& q+ M 微信图片_20240615124515.png ( I5 C* Q1 B6 L4 \3 J
& {( c/ d# }1 t4 F' A; |0 v# V
定义一个全局变量来存放DMA读取的内容
. i+ G! V+ ~9 M+ v% B" z8 J' B
- V, U% K  o" B7 }* ~3 n/ O: q
  1. HAL_ADC_Start_DMA(&hadc1,(uint32_t *)ADC_Value,100);
复制代码

6 A- p; d) u& F开启DMA,传入相关参数和存储区。" n, d- x; f) X
  1. for(int i = 0;i<100;i++)6 {: L9 O+ D- O7 s2 w) ]% |: G
  2.     {5 ]2 i9 X. ]) W5 D& I/ H7 H
  3.       printf("A:%d\r\n",ADC_Value);0 C2 O; A' z+ y! q( d9 v  S
  4.     }
复制代码

' Y, K) z' g. l+ H6 P/ L在While中打印存储区的内容,之后利用我们的串口示波器查看波形。
1 {) `* {/ r5 K* K
6 U& U8 }# ~" q6 V, t# e( A' e, | 微信图片_20240615124512.png
1 W* }1 T% ]2 F( h6 X
: z2 n& H- R( m; n5 c转载自:电路小白6 F: l2 {6 D; f0 k4 J) Q" ~

7 T  D+ L& z  X2 O8 y如有侵权请联系删除$ G) X- M* H! |) l# ~" @
; V+ R) J. i4 j# w+ s% {7 O5 [
3 D# k9 \1 [3 n; R& W! c
! Z" S3 u, @  J; G: C
收藏 评论0 发布时间:2024-6-15 12:46

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版