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

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

[复制链接]
攻城狮Melo 发布时间:2024-6-15 12:46
示波器,厚礼协好贵,但是有时候还是很想看波形怎么办?我们可以使用STM32的ADC配合DMA连续采集波形数据之后利用串口示波器来显示波形。& U* q; h: K, v2 H# V
4 C8 Z7 d! N0 ^+ ]: k. \9 ~" {$ n
本期教大伙如何使用STM32 关于ADC配置以及DMA配置。
3 H$ ]* D: i4 U
# Z2 [5 q1 a- Q/ \9 T6 B  S! f 微信图片_20240615124558.png % e# D. p' a! H& `- I" F
5 f( w" V; X) v$ h+ }* o8 ?
1. 什么是DMA?2 i4 B$ F7 p# [+ A) z+ s- e
Direct Memory Access(DMA): 直接内存操作!是一种允许外设之间或外设和内存之间直接进行数据传输的技术,相当于直接把数据搬到存储区,无需CPU的干预。这提高了数据传输的效率,同时释放了CPU用于其他任务。
) e* o" _& K: L1 ~: `: n
; W* s$ h- P3 N
2. STM32中的DMA特性:6 ^6 I" I" R7 h- f1 f/ x
多通道支持: STM32的DMA控制器通常支持多个通道,每个通道可以连接到不同的外设或内存区域。
3 o) \2 S& ?. T* e内存到内存传输: DMA可以在两个内存区域之间传输数据,而不涉及外设。
8 V  ~) o* H4 ]5 |' D" m内存到外设传输: DMA可以从内存传输数据到外设,例如将数据发送到USART或SPI外设。( }: V, O0 Q- D  c  \
外设到内存传输: DMA可以从外设接收数据并将其存储到内存中,例如从ADC获取数据。
5 T4 h, A& T( u  z循环模式: DMA支持循环模式,即在传输完成后重新开始,无需重新配置。9 T! N3 N) X5 a2 w4 V# T
传输方向和数据宽度: DMA支持不同的传输方向(内存到外设、外设到内存等)和数据宽度(8位、16位、32位)。5 _* z) A7 r( z# J9 S9 W
. }: w9 j' |( ]2 C% G
3. DMA的工作原理:
! G" Z* s# h* ~配置: 在DMA传输之前,需要配置DMA控制寄存器,包括源地址、目的地址、数据宽度、传输方向等。- g* P' V2 ]" E
触发: 一旦配置完成,DMA可以由硬件或软件触发开始传输。(本期我们选择软件触发)  ?5 w2 Z7 o- k( @; o4 a' |) |
中断: DMA传输完成时,可以触发中断以通知CPU。
2 F9 N2 D( D1 ]! U循环传输: DMA可以配置为在传输完成后自动重新开始,形成循环传输。3 n; _' D( H5 s$ _' n! b& D- }* `

0 \. z) a& J- X; \4. 应用场景:2 G/ @' G3 n! i( W: s' ~6 Z
DMA在需要大量数据传输的应用中特别有用,例如音频处理、图像处理、通信协议等。
. b9 F; C3 _! O4 y: \
. o8 p+ U. ?7 n, I2 ^1 b, X1 O8 g
0 n" p; n8 {7 t. a* c
内容实现4 H) @& B; X! f
时钟配置
# @8 m9 ^& r5 f& h0 u+ G7 F0 k/ q) C9 v; U
微信图片_20240615124555.png
. `; T8 v* W) |/ C7 ?* G( M& T0 [' X
微信图片_20240615124552.png 9 o/ O  a1 v* g% S
) U1 g- W1 X: j! r; v3 N) p
首先在CubeMX中选择我们的芯片,配置好时钟树以及时钟。
) o7 k: q9 i* B0 z; K- [
" k3 @; Z5 e( @- R( t" S5 |
引脚配置以及DMA配置
& P7 S- f/ h+ o9 R
2 S* Z* q4 i% f 微信图片_20240615124549.png + o$ ]! F3 }" S1 y
9 ^0 ]5 S0 C" G; e- v& W
将PA1(或者其他IO)配置为ADC_IN以及模拟模式。1 J$ x2 P$ n# j2 S, ?
* Y: d& Q& Z+ y2 `  U
微信图片_20240615124545.png
" ]$ z* H7 C4 O& X, j, @& y
& ~4 L& |" Q1 {* j2 Q+ \
在ADC配置中,开启DMA传输,模式为循环模式!) o7 U  |$ w4 I' ^2 C( l
9 g5 u. O# F# B. j; h& H5 i# \
微信图片_20240615124519.png
) J2 H, T, k, ~; a6 _
5 M6 v  o0 Z/ S
开启ADC连续转换以及DMA请求~
0 `. v8 p2 ~' m! _防止ADC只采样一次以及DMA只工作一次。) o, ~: J9 L( z8 F- [" R* i) \
1 V; s/ g0 L. P8 {& Z3 D+ B
工程内容
3 X+ O* Q0 _- j% G8 I1 x5 R: i' r3 L接下来就是创建工程了。; L) a) K  b0 G7 x  I6 o7 c! e- {/ f5 ^
. A0 D: q1 x9 y
微信图片_20240615124515.png
9 D, G2 ]9 @5 x, B( @1 \& q

  L. j& _) |9 A) f2 n! q6 ?% g. ~定义一个全局变量来存放DMA读取的内容* }1 a3 B9 x. t. T& u6 {

8 Q* L9 T( k, k" F4 ^" r+ U& N1 E
  1. HAL_ADC_Start_DMA(&hadc1,(uint32_t *)ADC_Value,100);
复制代码

% f( {) V) t8 S; d# e5 k8 o开启DMA,传入相关参数和存储区。
$ h8 K; |3 L3 t; ~2 n2 d/ J& j0 A
  1. for(int i = 0;i<100;i++)) ]  q0 \: |# w: d% J8 h
  2.     {( T) A" \! r0 o  o/ p0 e0 N
  3.       printf("A:%d\r\n",ADC_Value);
    % C6 g: }+ E5 V: Y) E
  4.     }
复制代码

2 |; N& @* l! L& j在While中打印存储区的内容,之后利用我们的串口示波器查看波形。* x( G/ ?* f1 z# t
/ t% v2 V' r. M8 H  m
微信图片_20240615124512.png ; j0 c6 o4 E( B& O

% S/ R4 T, P( ?转载自:电路小白3 i7 W% ?% U. F: v

/ S( e/ [- I! k如有侵权请联系删除
) f* q, T; W8 ?5 y# k+ F
1 p$ u0 H7 h" k) b  w9 z/ j' h5 J; R$ z: X- Q. ?% M- i
2 T9 L/ Q' l* t% x
收藏 评论0 发布时间:2024-6-15 12:46

举报

0个回答

所属标签

相似技术帖

官网相关资源

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