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

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

[复制链接]
攻城狮Melo 发布时间:2024-6-15 12:46
示波器,厚礼协好贵,但是有时候还是很想看波形怎么办?我们可以使用STM32的ADC配合DMA连续采集波形数据之后利用串口示波器来显示波形。
9 O" A2 }0 k0 ?: u$ c4 }2 o5 w& S$ Y1 D( i
本期教大伙如何使用STM32 关于ADC配置以及DMA配置。
/ E) y/ S6 a! V# S$ E0 b
3 [: `- C/ z9 O) \: v$ j# F 微信图片_20240615124558.png
9 R+ `' ?* Y+ B0 L: c( O/ U

7 l+ k2 f! Z& d% @2 A& e1. 什么是DMA?
) `, }& D: S$ m- @Direct Memory Access(DMA): 直接内存操作!是一种允许外设之间或外设和内存之间直接进行数据传输的技术,相当于直接把数据搬到存储区,无需CPU的干预。这提高了数据传输的效率,同时释放了CPU用于其他任务。
$ u" l/ O& O2 }* }* {

  O3 j, i4 |/ A2 h2. STM32中的DMA特性:
9 G, B  B# P( h! @  ~多通道支持: STM32的DMA控制器通常支持多个通道,每个通道可以连接到不同的外设或内存区域。
  O1 R1 i' d( G0 ^6 T内存到内存传输: DMA可以在两个内存区域之间传输数据,而不涉及外设。
4 Q0 x- J- ?/ B+ X内存到外设传输: DMA可以从内存传输数据到外设,例如将数据发送到USART或SPI外设。
, I1 }# J0 Y* x4 a9 u' b外设到内存传输: DMA可以从外设接收数据并将其存储到内存中,例如从ADC获取数据。
4 E8 D/ l4 b3 e2 S) O( V循环模式: DMA支持循环模式,即在传输完成后重新开始,无需重新配置。
2 _4 @: I( u  c. W$ o传输方向和数据宽度: DMA支持不同的传输方向(内存到外设、外设到内存等)和数据宽度(8位、16位、32位)。0 m+ y+ O/ z& [

2 n- P- ]1 S( e6 j2 n3. DMA的工作原理:1 E/ r: x. L! g
配置: 在DMA传输之前,需要配置DMA控制寄存器,包括源地址、目的地址、数据宽度、传输方向等。
4 ?, r: E8 j1 d3 v2 ~2 ]触发: 一旦配置完成,DMA可以由硬件或软件触发开始传输。(本期我们选择软件触发), L1 R1 N! j0 i2 a) g* ~! C( j& ?- g
中断: DMA传输完成时,可以触发中断以通知CPU。
! T' w, @  d: s6 c4 M: ]循环传输: DMA可以配置为在传输完成后自动重新开始,形成循环传输。
, {. b: m  A& `, a: C7 i1 t5 |6 T# k$ a
4. 应用场景:
: W( w& n  p( c6 }6 N/ p5 jDMA在需要大量数据传输的应用中特别有用,例如音频处理、图像处理、通信协议等。. {! d! ^! O+ T6 ~
+ v; Y0 E* N  |

; N$ N' V* n' i" ], S% p内容实现, J- ]3 w$ d1 H1 I4 {( D4 J
时钟配置
) h0 y1 \2 Z% N5 \/ H
8 E1 s. ?: i5 J! F 微信图片_20240615124555.png / R8 n/ z9 g2 E3 l
( I7 g$ Z" Z) _# f* V7 Y
微信图片_20240615124552.png / z# W+ F# ~. b/ M& ]9 U

3 G% e7 p' F( ~! l0 f首先在CubeMX中选择我们的芯片,配置好时钟树以及时钟。4 s* a6 Q/ c8 G+ {8 {, M' |

! s- E: B  j# _7 r
引脚配置以及DMA配置
- i$ C% m5 f( n  N& T
! o7 l/ S4 l7 j5 ^  G! S  V 微信图片_20240615124549.png * [  R7 e4 q( i" U( [/ D" \
3 F6 J( g. u* K8 T) g, e. v* y* A
将PA1(或者其他IO)配置为ADC_IN以及模拟模式。
" x/ e* W6 F  m8 Q4 n3 O5 X5 C; J( o1 L- ?3 @8 a/ J
微信图片_20240615124545.png
/ a& W; h& i& d( i

2 L/ }4 `3 N  q/ o3 F' O在ADC配置中,开启DMA传输,模式为循环模式!
& F8 z6 d( k9 Z: u
  T8 [, U) d1 _: G9 v* u( _! Q 微信图片_20240615124519.png   Y1 J5 p$ ]- F
9 F+ i3 x& J- d( H) y5 g
开启ADC连续转换以及DMA请求~
3 X  [8 ]& Z8 ~- {$ Y防止ADC只采样一次以及DMA只工作一次。
) I5 |4 a( q& i. t7 ?7 N) r2 |4 [
工程内容
# @% @5 L. B5 l1 P5 {$ E9 q接下来就是创建工程了。, K4 f4 A/ m+ k% \+ ?1 F' r
3 m( C; }' \3 l
微信图片_20240615124515.png
: O) o1 \1 R! }: K
3 Q$ ~: l- M: X" b. U- m1 e0 }
定义一个全局变量来存放DMA读取的内容4 E/ ?! b* I# G

% B0 K0 @# ~: Y% Z: Q* V
  1. HAL_ADC_Start_DMA(&hadc1,(uint32_t *)ADC_Value,100);
复制代码
* S6 _# S3 N" g3 X- b/ o
开启DMA,传入相关参数和存储区。
% K* @6 _" v) \' K+ M
  1. for(int i = 0;i<100;i++)8 D  x2 C- Z# T$ X
  2.     {
    ) i% d9 Z0 b/ M! {
  3.       printf("A:%d\r\n",ADC_Value);
    # x& m: p, F$ t( V5 Z0 f
  4.     }
复制代码

# p. U6 y- Q" E, E% k在While中打印存储区的内容,之后利用我们的串口示波器查看波形。
& t4 D; U7 O! ~0 N# Q/ k  ?
. d2 E" }, L7 h" s 微信图片_20240615124512.png : g/ {! d% C; F* M# S2 i6 b- N
% v/ ^1 m  L! @) Q. @
转载自:电路小白
* N5 M8 W! F3 l. p" _: @5 X4 P* o; T/ Z% ^
如有侵权请联系删除1 H$ r1 f& o2 L7 m% b
) s: N1 ]( p4 u! N: }' q5 m: F$ J! s  ?9 R

# p; r3 a8 q7 q$ D! P! }+ c6 n8 J9 s7 M& E3 N% |
收藏 评论0 发布时间:2024-6-15 12:46

举报

0个回答

所属标签

相似分享

官网相关资源

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