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

【经验分享】STM32H7 ADC hal库

[复制链接]
STMCU小助手 发布时间:2021-12-24 19:00
前言
, F  @4 H' D4 a* L使用STM32H750VB作为主控,使用stm32cubemx配置工程,在单通道对ADC通道进行采集,预计对通道采集1024次,然后对1024个数据进行fft。
( ^- e* b, ^( |4 Z( _9 B( v% A
8 d+ ~0 }/ G' N8 r& j) R$ v一、配置
$ ~$ q# m; G, @3 T* M/ d4 D1. 时钟配置
- f! J+ ?0 C( D+ o5 v6 t在cubemx中配置,RCC中采用外部时钟,外部晶振分别为25MHz和32.768KHz。时钟树配置如下图所示:
) e, c% U5 f: W9 E
( C! a  Q9 \+ ?* l4 A
20210704095938344.png
. K9 i2 P( l8 Z% l9 @# U( L

9 L( O  C2 f- G7 W, p
20210704100011534.png

) Q/ c3 x$ l/ ^: ?9 K) Z1 g6 [3 `. U) g" T" z5 Y' u
ADC时钟频率为150MHz。+ ^* J5 `% r# W! T, D

& |6 t3 i' b- S( C. J2. ADC配置
$ x. V3 h$ D  O# o8 W选用ADC3中的IN0,其他的不选,具体配置如下,根据下图计算采样率首先,ADC的时钟为150MHz,时钟分频8分频,然后采样时间为32.5个时钟周期,采样率约577KHz,实测采用8.5个时钟周期也可也,但是时采样率再高就不太行了。% y, X5 y* F" _
3 }$ L) n: j% _7 I
20210704100216440.png
- W' O0 }) A7 o- T# O

9 t* K  z8 ]5 l+ W8 ?) u" ]3. DMA配置; _: O9 D6 V# R% x& ?$ S& D
DMA配置如下图所示,由于是连续采样DMA配置为循环模式,同样,在ADC的配置中的转换数据管理模式也要配置为DMA Circular Mode。数据宽度选择half byte,在Debug中选上串行线就行。至此在cubemx中的配置完成。9 ?+ k; v+ Z# d& M
2 |' o! H6 }, P; _  p
2021070410290080.png

$ J: a& Y# R1 i2 I5 {
: c" _+ y4 h( C  e示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
+ @# ]9 |$ D; }( k2 c$ E1 {5 c& {+ k3 F# ^
二、工程
/ Z& R) G5 A# q1 l3 p1 . ADC测试
# o, K5 `* D; V' I. s. icubemx建立的工程已经包含了对各个部分的初始化,查看与ADC相关的函数。然后选择调用函数。首先进行对ADC的校准,如下所示。校准函数后面的两个参数可以在函数定义上面的注解中找到。
( k. r% u  E$ a4 E% @0 T5 ]
) E/ H" F5 |+ ~, c
  1. volatile HAL_StatusTypeDef status;6 C. Q7 G6 D5 W; K
  2. status=HAL_ADCEx_Calibration_Start(&hadc3,ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED);
复制代码
. S; j0 W* H) h! A
20210704105245249.png
2 M# _" j: y3 y5 m8 L( o
8 G7 h/ [2 R; [) S6 U
然后开启ADC采样,由于是使用DMA方式,所以调用HAL_ADC_Start_DMA函数。处理方式也一并写在下面所示的程序中。
; W- P1 r4 Q4 {3 O1 W$ y. M* i8 R: l0 b
  1. volatile uint32_t result;
    0 H5 ^% I2 ?& d
  2. volatile float value;* c8 E2 C1 Q5 x" I2 `% T' V
  3. status=HAL_ADC_Start_DMA(&hadc3, &result, 1);
    5 H, b+ w' [9 _0 n$ u
  4. value=(float)(result&0xffff)/65536*3.3;
复制代码
, I5 z( h& G, {, p  ]  `& j/ f
调试时可以发现ADC的值可以连续被转换。
) O9 A: y. g) [* u+ M
20210704112136488.gif

7 j( P( Z' e/ r4 v7 e
- c2 @3 {0 F7 Y3 `* o三、FFT5 d  i, Q6 r0 G2 ?' ^
1. 添加DSP库
9 M( w$ g. Z& E' y/ B( |9 L2 ]CMSIS包含了数字信号处理的一系列库,在Keil中添加比较方便,如下图所示。
) ~  p  z2 T1 ]7 ?- p4 ?$ O& I0 H, p; ]# |
20210704110212638.png

: e  u5 k9 f* G. [+ s
, z9 T% p8 Y/ u: f' a8 iDSP库的资料可以在keil安装目录中找到,如下图所示。2 L4 O5 \  Q: w6 @5 B6 W3 o
% k, z- L/ i8 {( H
20210704112010793.png

4 Z  B0 X% R9 f; i# p
; Z/ |6 r9 m# h* @! }6 k7 w2. 数据采集
4 m: a, h5 s+ g3 V, M采集1024组数据,声明长度为1024的float数组后,当给数组赋值,程序会进入hardfault,发现是H750VB的flash或者ram不够。后面准备研究外部flash存储数据,如果是ram的问题那就没办法了。后面就只有研究FPGA进行数据处理了。% F2 h3 V* [1 h: F# r3 r% j
* u( V$ A( n2 U" o+ ]* t' D0 f
总结4 E* ~1 m: O2 a' K% k1 Z" u
在整个过程中,发现使用6.0及以上版本的编译器编译的速度比5.0版本的块很多诶。; ]( S1 |8 r  v/ c- m  F+ u1 }& |
% W, Q( B& m* O' @! }4 z

5 v1 |: F3 @& |7 {! o
. I' H: ^" _9 Z" V
收藏 评论0 发布时间:2021-12-24 19:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版