请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
攻城狮Melo 发布时间:2024-6-15 12:46
示波器,厚礼协好贵,但是有时候还是很想看波形怎么办?我们可以使用STM32的ADC配合DMA连续采集波形数据之后利用串口示波器来显示波形。- D6 a( I4 m! F* n+ P' t1 F* J
! a5 [9 j6 Y  V: B' a# m2 \
本期教大伙如何使用STM32 关于ADC配置以及DMA配置。0 k. U- F+ H; R) b) L
  j' x: }3 d6 Y* H
微信图片_20240615124558.png
% A( O4 a2 e& F" X8 W
! s9 z# x# Q6 P* `* s
1. 什么是DMA?! l- y% K" y1 X- P$ W. n* p7 f. k
Direct Memory Access(DMA): 直接内存操作!是一种允许外设之间或外设和内存之间直接进行数据传输的技术,相当于直接把数据搬到存储区,无需CPU的干预。这提高了数据传输的效率,同时释放了CPU用于其他任务。6 \4 ], @8 N: K$ R' s; q
2 F' U. s& ~0 t$ K& a7 j6 ?" P
2. STM32中的DMA特性:, ]7 X7 Q2 ^! p+ T7 a9 K% G
多通道支持: STM32的DMA控制器通常支持多个通道,每个通道可以连接到不同的外设或内存区域。- d3 X& l7 l( j  U5 T
内存到内存传输: DMA可以在两个内存区域之间传输数据,而不涉及外设。
" m  z- S8 c2 Z# J& {内存到外设传输: DMA可以从内存传输数据到外设,例如将数据发送到USART或SPI外设。. Z1 V9 F3 E& s/ X9 Z
外设到内存传输: DMA可以从外设接收数据并将其存储到内存中,例如从ADC获取数据。7 r8 R5 U/ _1 i4 O6 C
循环模式: DMA支持循环模式,即在传输完成后重新开始,无需重新配置。( U  F: t1 K7 ^$ h6 N" s) A
传输方向和数据宽度: DMA支持不同的传输方向(内存到外设、外设到内存等)和数据宽度(8位、16位、32位)。- k' Y3 C9 [- d/ E6 m6 `
$ A$ o" B3 a6 q4 Y
3. DMA的工作原理:
4 C3 `7 a, Q1 u3 K$ K% _配置: 在DMA传输之前,需要配置DMA控制寄存器,包括源地址、目的地址、数据宽度、传输方向等。4 D% w/ O  f! L
触发: 一旦配置完成,DMA可以由硬件或软件触发开始传输。(本期我们选择软件触发)% R& i0 Z+ I. Z- b
中断: DMA传输完成时,可以触发中断以通知CPU。
6 z' z' T8 U6 K! S9 F' w循环传输: DMA可以配置为在传输完成后自动重新开始,形成循环传输。# S# l' A( h* \

1 c/ e  x, X- O0 W& X% R! B4 n4. 应用场景:& z5 Q# a4 D( q: E. x* [6 W  R
DMA在需要大量数据传输的应用中特别有用,例如音频处理、图像处理、通信协议等。) `# _. H8 h/ i# _/ U; }8 m

- i6 P3 J3 \, U7 |5 g* g. m, O
% ~. C0 b1 g: h6 o
内容实现
- u! I" Y( G8 J' L- x时钟配置
" e5 b( B% k* b; X
: J0 [& q1 l1 | 微信图片_20240615124555.png
+ c# M7 p& d  c, O( I
1 v7 H- \9 U. ] 微信图片_20240615124552.png
$ l+ H4 r) a6 X1 ^& R* l6 A! Z5 d+ P+ e
首先在CubeMX中选择我们的芯片,配置好时钟树以及时钟。# P- X) C1 X! E

4 X. B6 n' A. n1 H( l- v6 p6 ]
引脚配置以及DMA配置/ U0 K/ S+ `. }% l

0 h8 s1 p; w. l, k7 Q 微信图片_20240615124549.png & n  w$ U5 t( q$ s- E7 S4 \

) b/ Q! ]" p; ]. |将PA1(或者其他IO)配置为ADC_IN以及模拟模式。
4 _- ^" o  k: `
9 g( ^* Y/ Q$ [$ K 微信图片_20240615124545.png
1 e2 L" Z( m2 C
, y3 z  A: N7 z
在ADC配置中,开启DMA传输,模式为循环模式!
4 a; a; W; {" s$ e- }. }" l& Z+ F2 l3 O  N9 v
微信图片_20240615124519.png
# F2 @- F5 b3 d( s3 Y2 ]6 V

) |; H) m* }* V& I8 u; ~开启ADC连续转换以及DMA请求~0 V) h& N6 c& K- u" ?& e- b6 e% @
防止ADC只采样一次以及DMA只工作一次。( Q5 V* U6 G) D( o% `# h2 L" N
; B9 m( Q& W6 P* ~5 p' j
工程内容5 r; h. A* u  W( l2 ~% \
接下来就是创建工程了。" U4 T( a8 b/ g1 y9 i  f
; R& A- E; n6 Q8 x% k
微信图片_20240615124515.png
3 a5 L& b8 S: o9 N

1 c( a; C$ T% v: s定义一个全局变量来存放DMA读取的内容0 w$ @/ Q  ~4 \, C9 m
) d4 P% d# B9 K) G8 K' M# c
  1. HAL_ADC_Start_DMA(&hadc1,(uint32_t *)ADC_Value,100);
复制代码
8 B, }# s' ~4 ]6 h1 ]" P, O
开启DMA,传入相关参数和存储区。
( C$ a' _: U$ {9 m9 X2 t
  1. for(int i = 0;i<100;i++); X! `: c8 M6 I
  2.     {1 |1 Q* [" x( i! y3 h
  3.       printf("A:%d\r\n",ADC_Value);% c4 p9 |4 j& B' N# j6 M$ S& W
  4.     }
复制代码

3 B7 E( Y+ T3 s5 l" b1 m在While中打印存储区的内容,之后利用我们的串口示波器查看波形。" M2 V. |: t/ b6 G( \6 P( n) I2 L( K  ~
/ [# z. x" s: _
微信图片_20240615124512.png
' ~8 R9 N  S! V) t! A- d: k) k: ?) _1 N: F# s* n$ J
转载自:电路小白" q4 g. s/ d7 Z' O- z9 U, {
( i; }5 P- _6 _+ F7 d8 g
如有侵权请联系删除
" j2 f1 [  a( N! ~9 O3 Z4 \: H* U1 u5 @/ i- A

, m/ k2 L* o& [) a& C
2 S5 |3 i7 e7 j4 t3 J6 p
收藏 评论0 发布时间:2024-6-15 12:46

举报

0个回答

所属标签

相似分享

官网相关资源

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