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

【经验分享】STM32H7 ADC hal库

[复制链接]
STMCU小助手 发布时间:2021-12-24 19:00
前言0 L2 h6 m" o  }9 }* k1 ]
使用STM32H750VB作为主控,使用stm32cubemx配置工程,在单通道对ADC通道进行采集,预计对通道采集1024次,然后对1024个数据进行fft。6 l. [: I1 X  s# `# ?  ~

* `. G& L  k/ D) E' a一、配置* w2 e% D8 \6 Q' J; `& }* ~
1. 时钟配置
! Q5 ^9 x" i, F" Z/ U0 |. h9 |- ~在cubemx中配置,RCC中采用外部时钟,外部晶振分别为25MHz和32.768KHz。时钟树配置如下图所示:
2 X; |7 S: b5 }8 M- o5 }4 B
$ |' G/ T4 m6 |! k
20210704095938344.png

* }' k$ ]% M$ t( q1 D, s- t3 F( K6 f6 q( _6 ?! n
20210704100011534.png

( Q* `3 ~/ H/ P( \- E
  l. P( d! w5 k: s  ?/ UADC时钟频率为150MHz。2 D4 f! V8 E% c
7 ~& L, B$ B/ O+ \3 F
2. ADC配置
) ~. }& R" F6 C! \% a% Z3 M选用ADC3中的IN0,其他的不选,具体配置如下,根据下图计算采样率首先,ADC的时钟为150MHz,时钟分频8分频,然后采样时间为32.5个时钟周期,采样率约577KHz,实测采用8.5个时钟周期也可也,但是时采样率再高就不太行了。
! V% L- u4 W; |; ^: F
# N! C! F, K0 W+ @
20210704100216440.png

' m% Z- }3 z) ]1 h1 j
" p# |; t2 y+ ^0 C* q; p: U3. DMA配置
' Q) ]0 m- J+ Y0 B& s4 K& r5 oDMA配置如下图所示,由于是连续采样DMA配置为循环模式,同样,在ADC的配置中的转换数据管理模式也要配置为DMA Circular Mode。数据宽度选择half byte,在Debug中选上串行线就行。至此在cubemx中的配置完成。3 L8 ^* @- W% o7 I' H/ D% i
: o* ^, e4 l5 R4 C
2021070410290080.png

1 C5 ^7 ]  [2 D$ D: g" [% ]
' @1 G4 z9 z5 l2 G# V, U示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
# X* i. j2 a, C+ p- }
, D3 ~# h2 \9 M$ j% d2 |二、工程
( h' Z' X7 a; e7 z4 }9 y1 . ADC测试
3 `  l8 ?8 ?# N3 D- w& ^5 Gcubemx建立的工程已经包含了对各个部分的初始化,查看与ADC相关的函数。然后选择调用函数。首先进行对ADC的校准,如下所示。校准函数后面的两个参数可以在函数定义上面的注解中找到。
; a9 S0 C# R* s" U5 V  Y% ]7 r, t  y$ S& \
  1. volatile HAL_StatusTypeDef status;
    5 Q3 O& }# e) u, @! W
  2. status=HAL_ADCEx_Calibration_Start(&hadc3,ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED);
复制代码
% o; A. G; g$ }0 J) M& J+ ^9 _
20210704105245249.png
4 Q  x; w+ u) p% Z9 Z! p+ P

" [; t' c; q1 ~- `  d然后开启ADC采样,由于是使用DMA方式,所以调用HAL_ADC_Start_DMA函数。处理方式也一并写在下面所示的程序中。! I7 i: e! Q4 g3 u+ h+ u1 @
  `+ X" l/ U, {6 X1 F* D! R
  1. volatile uint32_t result;
    # v/ n% |/ X2 E0 U
  2. volatile float value;' W) l6 ?; ^+ y- d4 O" h8 \
  3. status=HAL_ADC_Start_DMA(&hadc3, &result, 1);% Q+ P$ x# |0 `  a
  4. value=(float)(result&0xffff)/65536*3.3;
复制代码
& b5 R( I. R5 G, K# |, b+ f
调试时可以发现ADC的值可以连续被转换。+ ~$ R" W0 O7 C+ e3 n9 H
20210704112136488.gif

0 z) z2 f5 y. J/ t" A
7 n4 K& B2 Z4 e% _9 z三、FFT
3 o0 I: P* a# Z# E" L. X/ [1. 添加DSP库
, g1 q$ v; q( U! {; aCMSIS包含了数字信号处理的一系列库,在Keil中添加比较方便,如下图所示。
5 o# o3 G/ b4 J4 S. b8 E
# B8 Z5 V( }2 F+ X. j. D' ~
20210704110212638.png
6 H  H, j! _# z! a) u
+ Q$ e- F/ L  t# F7 f2 P
DSP库的资料可以在keil安装目录中找到,如下图所示。) Z% X0 u; l4 \/ @) T/ {, \

5 l6 |' u7 {: ?# F9 c
20210704112010793.png

& N% z( g" K) {- \
5 L& s5 P* b/ u/ [$ ~2. 数据采集2 d, L- _0 L. _/ o
采集1024组数据,声明长度为1024的float数组后,当给数组赋值,程序会进入hardfault,发现是H750VB的flash或者ram不够。后面准备研究外部flash存储数据,如果是ram的问题那就没办法了。后面就只有研究FPGA进行数据处理了。
$ x' M% Q9 B7 M# k/ T/ r
& u$ ]" [$ Q" P4 h, ]总结
3 d4 J$ e& i" E1 |4 k在整个过程中,发现使用6.0及以上版本的编译器编译的速度比5.0版本的块很多诶。. U* t( l" V1 a- A( ~2 ]
' g# E4 i% i$ ~; ?  u
3 T" R  q3 b) H: Y& d) t4 c
+ u5 _: G( F) J  ?, U% L3 _2 K% t' E
收藏 评论0 发布时间:2021-12-24 19:00

举报

0个回答

所属标签

相似分享

官网相关资源

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