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

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

[复制链接]
攻城狮Melo 发布时间:2024-6-15 12:46
示波器,厚礼协好贵,但是有时候还是很想看波形怎么办?我们可以使用STM32的ADC配合DMA连续采集波形数据之后利用串口示波器来显示波形。, u% g5 N0 o" {7 d; }
5 f* I8 H- u; Z& B& T5 ]2 i
本期教大伙如何使用STM32 关于ADC配置以及DMA配置。
2 s& A7 a3 k2 ]4 b7 A
' J) z: a; G9 y  H7 ~+ x$ v 微信图片_20240615124558.png 5 M: k  G- r$ C+ t& u

) W# I9 ~' l7 ^' Y) W& O1. 什么是DMA?( I1 K/ _0 F$ Y: P/ }9 f  K4 ]
Direct Memory Access(DMA): 直接内存操作!是一种允许外设之间或外设和内存之间直接进行数据传输的技术,相当于直接把数据搬到存储区,无需CPU的干预。这提高了数据传输的效率,同时释放了CPU用于其他任务。
# ?9 V$ l4 i, u4 y9 l4 J0 a

5 _8 v( o+ O/ h' }6 h2. STM32中的DMA特性:3 J: l& [. C" G
多通道支持: STM32的DMA控制器通常支持多个通道,每个通道可以连接到不同的外设或内存区域。
9 H% {1 r6 j+ j3 `. m内存到内存传输: DMA可以在两个内存区域之间传输数据,而不涉及外设。
3 Q, O1 b) B) w9 r+ N0 S内存到外设传输: DMA可以从内存传输数据到外设,例如将数据发送到USART或SPI外设。
" `* e( m/ i! H外设到内存传输: DMA可以从外设接收数据并将其存储到内存中,例如从ADC获取数据。
2 E) f3 O$ \3 z0 U6 v循环模式: DMA支持循环模式,即在传输完成后重新开始,无需重新配置。
+ A; P2 l6 p( n, F% W. ]& h/ j传输方向和数据宽度: DMA支持不同的传输方向(内存到外设、外设到内存等)和数据宽度(8位、16位、32位)。! N0 L; `) a# A7 w( r5 r$ }- |3 G
$ W2 f; T, [- b! g
3. DMA的工作原理:0 y3 m/ I/ C! y: ^8 {
配置: 在DMA传输之前,需要配置DMA控制寄存器,包括源地址、目的地址、数据宽度、传输方向等。9 C+ R% n  F; c( s
触发: 一旦配置完成,DMA可以由硬件或软件触发开始传输。(本期我们选择软件触发)
7 E- z* D9 f, S' m: ]' k中断: DMA传输完成时,可以触发中断以通知CPU。
$ C+ |0 E: H# c8 r; e" U1 l: B) g循环传输: DMA可以配置为在传输完成后自动重新开始,形成循环传输。
# X- k5 d! r2 q' H
2 v% y1 D, L4 o3 K8 V  f5 N4. 应用场景:
3 \. r. I! l! i$ yDMA在需要大量数据传输的应用中特别有用,例如音频处理、图像处理、通信协议等。) m& G3 J  Y3 ], S- c% C6 n
$ b! g! p4 q# \* f; c

3 p( [1 h  u6 \: V2 ~5 G: ^( Y3 ]内容实现  U8 x8 i* t: G, Z; T0 G
时钟配置
0 s% ?6 ?, y! N' q4 {9 g+ G) e
& E2 k& C, M% r  `( ?$ c% o* O; T 微信图片_20240615124555.png
7 Q$ r& e9 J2 N
- O# ?8 ~6 }5 F6 G 微信图片_20240615124552.png 6 H2 R+ B8 q( \9 Q
% z/ C1 F, z: i3 ^4 ~1 f4 K$ _
首先在CubeMX中选择我们的芯片,配置好时钟树以及时钟。( V2 J9 j' G, X0 l* [- C1 s" t
- X3 C7 c5 \7 S( h7 ~- c- ~
引脚配置以及DMA配置2 Q% y7 D9 \  H2 H7 u
5 d+ \- {# t& S: `0 H) w
微信图片_20240615124549.png % G- W% N. Z- r( ?+ a; j% V
6 _- _* K2 m1 K( o9 ~
将PA1(或者其他IO)配置为ADC_IN以及模拟模式。! I3 x8 L% [1 _' N$ M8 X+ Y) g& C

8 E( f* f+ H2 G 微信图片_20240615124545.png / ^. @6 P9 I  `! d' ~' [

, U( F# P1 r& ~' U- [  S  I在ADC配置中,开启DMA传输,模式为循环模式!. O* w5 |4 a/ i" z

) o% h0 r& O8 K7 ~# g$ U, `' i" z 微信图片_20240615124519.png
) {2 e6 X: f8 x( c( m' W. t

2 o  @4 H; R0 G开启ADC连续转换以及DMA请求~
7 G8 ]) @5 _9 m防止ADC只采样一次以及DMA只工作一次。
& u1 ]& a' B- h( S0 z
; O8 Z" q8 Q4 O( d
工程内容! H& ]$ ~) I2 b
接下来就是创建工程了。; G7 ^' Y3 ]& B- {/ ]9 t
' n* c! p0 l2 p+ i% n
微信图片_20240615124515.png 3 R& d; I" M, V# H& C) m) \

  z! p, J! Q, Y" Q( r7 s# h2 w7 ]定义一个全局变量来存放DMA读取的内容
+ }" Z/ [/ w2 k; t( I3 g+ W) ^$ c0 x. c& M2 \8 _
  1. HAL_ADC_Start_DMA(&hadc1,(uint32_t *)ADC_Value,100);
复制代码
# q: z) T$ x3 E) j2 N, w
开启DMA,传入相关参数和存储区。3 z& |9 d4 I& [( [# j: }
  1. for(int i = 0;i<100;i++)
    6 _3 T8 b+ Y  b% h/ _0 Q. H# w
  2.     {/ {, K+ a9 b; f+ v  u3 [
  3.       printf("A:%d\r\n",ADC_Value);
    , Y& J% p+ {1 ]& X
  4.     }
复制代码
+ P, C7 Q# S+ f; k( g' O
在While中打印存储区的内容,之后利用我们的串口示波器查看波形。
( A+ N/ V  v% I/ [2 a
3 |% M6 [+ e! W 微信图片_20240615124512.png 1 }/ {4 z! q. P7 i6 L. A
  ?1 W3 d) e0 N) V6 {! v4 K5 Z
转载自:电路小白
4 l  q. E" Q' @, W2 u1 x! ^  O% \$ Z2 T# B1 `5 R1 u
如有侵权请联系删除
3 ]- k  y* f- T  t# u+ F6 ?6 N* g+ H! ^1 w' N

% A5 Q5 M" [( X* `; a6 g, n8 [' I$ g* Z9 b, W  g* X; z, D
收藏 评论0 发布时间:2024-6-15 12:46

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版