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

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

[复制链接]
攻城狮Melo 发布时间:2024-6-15 12:46
示波器,厚礼协好贵,但是有时候还是很想看波形怎么办?我们可以使用STM32的ADC配合DMA连续采集波形数据之后利用串口示波器来显示波形。9 D* P7 |; H" C+ y; h  e4 e! m
2 d% l( ^4 t% _" m# @  i$ e
本期教大伙如何使用STM32 关于ADC配置以及DMA配置。
: P& }, u7 ~: q' l  O, o, f* K0 a% b5 a
微信图片_20240615124558.png * i; s, K2 }3 C3 l, e
2 W1 L# J( A! X9 X6 f- i
1. 什么是DMA?
* H8 G' F/ O0 h2 X/ |Direct Memory Access(DMA): 直接内存操作!是一种允许外设之间或外设和内存之间直接进行数据传输的技术,相当于直接把数据搬到存储区,无需CPU的干预。这提高了数据传输的效率,同时释放了CPU用于其他任务。& I6 p9 h. z1 f) {. o
  n# V: U" ~! K7 n% Y9 L
2. STM32中的DMA特性:
, o& {; a0 w. ?* m多通道支持: STM32的DMA控制器通常支持多个通道,每个通道可以连接到不同的外设或内存区域。1 @" v) \! e1 d; z3 j
内存到内存传输: DMA可以在两个内存区域之间传输数据,而不涉及外设。
+ a, K6 j) U6 I! v! n% @3 M内存到外设传输: DMA可以从内存传输数据到外设,例如将数据发送到USART或SPI外设。
+ ~+ _- S! z( E+ {外设到内存传输: DMA可以从外设接收数据并将其存储到内存中,例如从ADC获取数据。7 d9 @. S$ N1 o4 ]" w- b1 A
循环模式: DMA支持循环模式,即在传输完成后重新开始,无需重新配置。
3 A3 A6 v/ h3 Y6 C/ u) q# G传输方向和数据宽度: DMA支持不同的传输方向(内存到外设、外设到内存等)和数据宽度(8位、16位、32位)。
( O' O2 A# `- C. [  O4 K$ ^* Q. B, K* ?4 R! q; P0 ^  u$ o
3. DMA的工作原理:
0 T. p- ~3 M% W- l配置: 在DMA传输之前,需要配置DMA控制寄存器,包括源地址、目的地址、数据宽度、传输方向等。+ V5 l! M' I) f. w- V$ `" u8 o$ s# P
触发: 一旦配置完成,DMA可以由硬件或软件触发开始传输。(本期我们选择软件触发)' b) |$ B. Q2 N
中断: DMA传输完成时,可以触发中断以通知CPU。% A+ K2 e& V# Z  s  G
循环传输: DMA可以配置为在传输完成后自动重新开始,形成循环传输。7 S" Z9 V+ b+ {" I6 W8 L

9 X* \& W' Y8 t. q( h3 g4. 应用场景:" C/ P8 \- f9 z* J3 A2 l9 u
DMA在需要大量数据传输的应用中特别有用,例如音频处理、图像处理、通信协议等。7 K' y3 y4 `) i, y; |! R5 B

7 H9 w6 Y/ X) _

4 ~. O2 b9 {. K  V8 \8 W9 L内容实现5 Z0 w" k1 C  ?0 J9 w. Z4 q) g
时钟配置
- o* }2 v/ [4 a  ^5 [+ Y3 K
" i) G- _! P- Q 微信图片_20240615124555.png
; s9 h9 f- Z( |
2 v" T& j3 |, z& U 微信图片_20240615124552.png
! T6 I/ N% C' \
2 g& T( t6 g3 _# @& m# F. W9 a首先在CubeMX中选择我们的芯片,配置好时钟树以及时钟。
5 z) r2 W. [8 s* n4 _3 |7 \$ k: s
* X- A. F! `5 J( b. h: _, o
引脚配置以及DMA配置
8 Q& {% I7 C6 k% J, ^
3 G/ ~9 f- B, {! W2 H6 P 微信图片_20240615124549.png ( ~  {" i) {( h+ l

# \+ {+ f7 {! E8 Y6 N: u将PA1(或者其他IO)配置为ADC_IN以及模拟模式。7 Y0 `) s. Z/ ?; {5 Q

' ?6 |$ Z" R- c# s# h6 ^" l5 ] 微信图片_20240615124545.png ' F: ?' C4 I; O3 [1 i
3 l6 M0 R' {/ K/ E: p1 ?# ^) }# F
在ADC配置中,开启DMA传输,模式为循环模式!) F/ U& V/ o% p  @3 \

. c( C3 |0 ^: ^% _) q 微信图片_20240615124519.png 2 M; k) g: j" m- \4 b# C- r2 j* i' h

7 s+ K. K) Y! u$ b% L开启ADC连续转换以及DMA请求~
7 j! f. N# ]" j# \防止ADC只采样一次以及DMA只工作一次。
* ?( V! x/ p! X5 j
' _+ O6 U" {- Q& s
工程内容! U7 n% T4 F+ O0 M
接下来就是创建工程了。
) r( p4 M  {: S9 P& v" T! r- ]: H, r- h. c, `4 Y; j
微信图片_20240615124515.png 8 ]7 z$ z) I; j8 K, q( L# p
9 D4 U  Y) ~/ z
定义一个全局变量来存放DMA读取的内容
7 f$ p9 z+ ?! Q7 `
. N! x! n2 U: J" P* E
  1. HAL_ADC_Start_DMA(&hadc1,(uint32_t *)ADC_Value,100);
复制代码
+ D9 ?. |* H& g* A9 z& r/ @% h
开启DMA,传入相关参数和存储区。: @* w6 @: G% P. H3 n
  1. for(int i = 0;i<100;i++)1 z6 f$ R1 r( `6 |. |
  2.     {
    7 M7 P4 C! z% [8 r/ @. k7 N
  3.       printf("A:%d\r\n",ADC_Value);
    : j- j7 P7 e3 r7 H3 {9 Q
  4.     }
复制代码

4 P& n. |; n& j1 Y$ U在While中打印存储区的内容,之后利用我们的串口示波器查看波形。
$ B7 m) `$ w$ i+ V! h
  m+ x# _- L; M# n5 C" w 微信图片_20240615124512.png
  Z- O! J* T' m3 V4 \8 g, ~2 ~9 Y. ^, k& h5 M
转载自:电路小白
, V, N( S5 R) C6 d+ _% [8 s7 g7 t# H/ @2 f6 {( L
如有侵权请联系删除
3 @$ S; O9 P' `. V0 `1 P- Y) b" ]9 {( @& {- [

- T. g) U' k) @+ J( m$ ~
/ r# m* r7 u2 ~  b/ t6 H6 }
收藏 评论0 发布时间:2024-6-15 12:46

举报

0个回答

所属标签

相似分享

官网相关资源

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