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

【经验分享】STM32H7 ADC hal库

[复制链接]
STMCU小助手 发布时间:2021-12-24 19:00
前言
2 f0 u9 P* i) o3 {7 a使用STM32H750VB作为主控,使用stm32cubemx配置工程,在单通道对ADC通道进行采集,预计对通道采集1024次,然后对1024个数据进行fft。0 P! \1 H9 W6 r9 p

) `6 }' {" u0 q/ u  j9 z一、配置- Q! ?  J, P# ^: G
1. 时钟配置# W( Y* o* W% _/ P% |$ R) s
在cubemx中配置,RCC中采用外部时钟,外部晶振分别为25MHz和32.768KHz。时钟树配置如下图所示:
2 w& }5 |, @$ F/ T8 j0 T, x+ b. `; v* y  q" V% ?% b! D9 P- _
20210704095938344.png

0 N) V2 B0 d' h! X- \# V# [4 S7 v; Y8 A' {- E2 I
20210704100011534.png

0 N# s( O' u) R* B" s% W* {" |' x9 h; u/ t1 S0 x  n0 E; q3 r, Z
ADC时钟频率为150MHz。
* x/ k/ {+ Z, h4 d! i/ ?3 d7 a
: I2 D4 V8 R& p1 U. F9 r0 J2. ADC配置& _9 O" _! K  N( L6 O" w- q* w/ s) V; I
选用ADC3中的IN0,其他的不选,具体配置如下,根据下图计算采样率首先,ADC的时钟为150MHz,时钟分频8分频,然后采样时间为32.5个时钟周期,采样率约577KHz,实测采用8.5个时钟周期也可也,但是时采样率再高就不太行了。
! r7 v% r- R& \# c; e! A. _
- ?; M  `) @* C( u' B
20210704100216440.png
/ m& P. A" I" e$ h, h$ H

: u/ V& N0 w$ }1 n3 s- s. e3. DMA配置. P) ]/ [* G8 W$ W/ c; X: T6 ~
DMA配置如下图所示,由于是连续采样DMA配置为循环模式,同样,在ADC的配置中的转换数据管理模式也要配置为DMA Circular Mode。数据宽度选择half byte,在Debug中选上串行线就行。至此在cubemx中的配置完成。
: p! l* r8 q3 I0 i% _. O2 P7 W/ z7 I5 i. v- S9 ?' O1 i$ m/ I
2021070410290080.png
' t1 O( u( ^% X* U9 d# `

: ^. J1 W& n0 o: W  |示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
( |/ s7 e1 {' L0 r3 P/ Q1 c$ b" v% a& `4 {! D% Z% I' Y4 o
二、工程
! W, S3 M4 H2 J. u- X4 P8 b: [1 . ADC测试
8 ^' f* I" T, v, m. ^cubemx建立的工程已经包含了对各个部分的初始化,查看与ADC相关的函数。然后选择调用函数。首先进行对ADC的校准,如下所示。校准函数后面的两个参数可以在函数定义上面的注解中找到。. ~* f* m8 \  P

1 w$ w- ?" M$ e. u7 E& m; b
  1. volatile HAL_StatusTypeDef status;
    ) \' m0 t7 {% V8 H( G- w
  2. status=HAL_ADCEx_Calibration_Start(&hadc3,ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED);
复制代码
, @7 r0 x3 U9 I& ?% Z( K4 e/ n
20210704105245249.png

. U$ |! L- L7 P5 I1 e3 }
, N, H9 x# t" V. t然后开启ADC采样,由于是使用DMA方式,所以调用HAL_ADC_Start_DMA函数。处理方式也一并写在下面所示的程序中。$ c0 Z* f: ]: J: C

* [. b! O1 }  y, k* l( K0 f
  1. volatile uint32_t result;3 v1 W  q3 x! j! j; A: j! F
  2. volatile float value;  I& x4 ?( q6 V1 Y- e6 C: c3 W" Z
  3. status=HAL_ADC_Start_DMA(&hadc3, &result, 1);
    3 |- E" r# G. u; s! \
  4. value=(float)(result&0xffff)/65536*3.3;
复制代码

! @6 h; ~7 A9 a; e调试时可以发现ADC的值可以连续被转换。
8 e' T6 ^7 P4 E0 K2 |# k
20210704112136488.gif
. Q; l9 H. N- P# d& T- y

8 Z! }. |3 g! S三、FFT( {) Q+ n1 Z, g3 s1 G
1. 添加DSP库
2 N/ l; A5 t9 g# C8 U- T8 ]9 K4 p/ e$ |CMSIS包含了数字信号处理的一系列库,在Keil中添加比较方便,如下图所示。
0 r: S$ T% p; J4 M0 T% f) Q6 d4 f0 N9 q1 w7 r
20210704110212638.png
! L1 X% w1 @3 j+ x# a: B& g
* N. x/ L0 u1 p1 r8 P% a7 b9 B/ r
DSP库的资料可以在keil安装目录中找到,如下图所示。
4 I5 Y: n" Y0 J! V1 g- u7 C! Y* X# B8 h. @) y
20210704112010793.png

+ c- x% Z; @0 T7 O+ d* S$ H/ J' x+ Y: e
2. 数据采集
/ Q0 U* v" b' a' k+ f3 k采集1024组数据,声明长度为1024的float数组后,当给数组赋值,程序会进入hardfault,发现是H750VB的flash或者ram不够。后面准备研究外部flash存储数据,如果是ram的问题那就没办法了。后面就只有研究FPGA进行数据处理了。4 [& u3 D0 G% `

" x# D( ]9 F3 {总结
2 y$ Y4 u: |, T. ?在整个过程中,发现使用6.0及以上版本的编译器编译的速度比5.0版本的块很多诶。, c5 @5 Z. `* c

$ o* I. ~! E  ?7 V9 M
  T6 T  l& w5 C% G; K9 r
6 _* m2 s) M7 }1 h9 Q2 |1 m- z
收藏 评论0 发布时间:2021-12-24 19:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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