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

【经验分享】STM32H7 ADC hal库

[复制链接]
STMCU小助手 发布时间:2021-12-24 19:00
前言
: o9 k& }7 X/ u) |使用STM32H750VB作为主控,使用stm32cubemx配置工程,在单通道对ADC通道进行采集,预计对通道采集1024次,然后对1024个数据进行fft。
5 ]9 ?5 T4 o2 c$ ?6 T8 \
6 a* B6 E: n/ S( Q  t$ g) A一、配置# F1 ^+ R% T( r! o8 m
1. 时钟配置% F- K8 Q$ t2 ~) e3 W: N
在cubemx中配置,RCC中采用外部时钟,外部晶振分别为25MHz和32.768KHz。时钟树配置如下图所示:- Z+ O' L/ Z, c

0 v) Y2 _6 p- T- X3 [0 A8 H
20210704095938344.png

; r8 e' j7 A1 v' @. S$ V: H3 R+ P% Y2 r7 Z. Z5 F
20210704100011534.png

$ u: d) @! S& [4 S& b  H' H* v" U& W+ n; {; r7 h/ H
ADC时钟频率为150MHz。# ^) }7 B3 _; K+ e# y

: x- V2 o# P2 u2. ADC配置
5 p5 B. Y; I% u5 o选用ADC3中的IN0,其他的不选,具体配置如下,根据下图计算采样率首先,ADC的时钟为150MHz,时钟分频8分频,然后采样时间为32.5个时钟周期,采样率约577KHz,实测采用8.5个时钟周期也可也,但是时采样率再高就不太行了。' Z. l0 x1 o% K, D4 ~& }: s

3 ?7 X' s# r- x
20210704100216440.png

( \% s3 U4 K5 Q7 K
6 X" C% Z# ]$ [1 ~  V- Z  v) W3. DMA配置' d+ \: V2 l2 [8 _
DMA配置如下图所示,由于是连续采样DMA配置为循环模式,同样,在ADC的配置中的转换数据管理模式也要配置为DMA Circular Mode。数据宽度选择half byte,在Debug中选上串行线就行。至此在cubemx中的配置完成。5 V; D. V5 H: s- p9 T, o

2 l) N8 G! d- P
2021070410290080.png

8 v$ Q' @, U% t" C9 k, `
5 k9 ~" E/ ~/ f9 u& n9 M5 D  L9 l  o3 \示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。6 q2 Y' x* p7 M1 y0 j% {
/ ?( b. w9 r' W8 o
二、工程0 `+ \% }: z( J; L. a& o
1 . ADC测试
. X2 T; O6 n0 u  `. H+ y) ?cubemx建立的工程已经包含了对各个部分的初始化,查看与ADC相关的函数。然后选择调用函数。首先进行对ADC的校准,如下所示。校准函数后面的两个参数可以在函数定义上面的注解中找到。$ M' I) H1 Z; p  S
- h( A  Y- M, N0 Y1 ^
  1. volatile HAL_StatusTypeDef status;' W. P: b  z2 r9 l
  2. status=HAL_ADCEx_Calibration_Start(&hadc3,ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED);
复制代码

2 W' }4 o9 v7 J* v( M
20210704105245249.png

( m/ k& l" ]5 G' }9 K4 h4 {, F
) m0 r+ h% e' A, b' I2 Q: Z( J# D然后开启ADC采样,由于是使用DMA方式,所以调用HAL_ADC_Start_DMA函数。处理方式也一并写在下面所示的程序中。
2 \6 ^5 U$ A* g! @! i! M1 f" s. f, ]* f- G3 D: x- R( X
  1. volatile uint32_t result;% `7 H. q# t5 C: X7 E
  2. volatile float value;
    * I& M  l, \8 ], K: R
  3. status=HAL_ADC_Start_DMA(&hadc3, &result, 1);% D1 R8 E) K- i5 C3 E' n# N
  4. value=(float)(result&0xffff)/65536*3.3;
复制代码

3 n+ S; _9 _; n+ r0 q  Q$ S调试时可以发现ADC的值可以连续被转换。
, B( ~8 a, X4 G! P4 R7 r
20210704112136488.gif

" H8 L! n$ }9 @
$ @' V2 i8 r. w( i5 G" I7 E: I三、FFT
( N0 @. B9 k. X, \, m* L7 e1. 添加DSP库# J  L6 E( r$ Z
CMSIS包含了数字信号处理的一系列库,在Keil中添加比较方便,如下图所示。% D# w% j& B% K
) F: c) H" b$ E
20210704110212638.png

! V2 f& l: I) n! {
. F0 F& s* e. mDSP库的资料可以在keil安装目录中找到,如下图所示。
' C" f/ Q4 e* m+ B8 h# m9 [' Z: u3 b, n* M0 A; Q/ O7 J4 D
20210704112010793.png
+ \2 O8 O2 I  K( l9 N; B

: g  h  j( k7 T* Q# S2. 数据采集' ^* u; k/ ~% s. y7 G9 d
采集1024组数据,声明长度为1024的float数组后,当给数组赋值,程序会进入hardfault,发现是H750VB的flash或者ram不够。后面准备研究外部flash存储数据,如果是ram的问题那就没办法了。后面就只有研究FPGA进行数据处理了。; S/ q  i; ~* i" {) s: k
7 g. B) l2 \' s: D- i7 @% D
总结3 h9 `8 G7 B8 @5 M" x  @. n
在整个过程中,发现使用6.0及以上版本的编译器编译的速度比5.0版本的块很多诶。
% k) g$ H# N& ?' G" Y7 N$ f$ ]8 O& E( V" k2 u6 \# _2 A; K0 T* f
3 A% E& L* \/ V6 p1 P1 p8 M1 M' a
0 {( ~9 r+ I. Y( R
赞 收藏 评论0 发布时间:2021-12-24 19:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版