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

【经验分享】STM32H7 ADC hal库

[复制链接]
STMCU小助手 发布时间:2021-12-24 19:00
前言! g' q- `  c7 n4 T+ L4 G
使用STM32H750VB作为主控,使用stm32cubemx配置工程,在单通道对ADC通道进行采集,预计对通道采集1024次,然后对1024个数据进行fft。
0 Q3 P$ h$ E6 o* J8 }% Z
7 ^  j1 k' c0 W" C; P) s3 i一、配置; v. u4 R" p6 U; \# C  q$ k1 y0 c* f# S
1. 时钟配置* J, c( @1 N* K, \
在cubemx中配置,RCC中采用外部时钟,外部晶振分别为25MHz和32.768KHz。时钟树配置如下图所示:( q: u# n- Q) K  T$ T: K' a, {

, y. A. s7 b9 c: O3 C3 r- k6 [! a
20210704095938344.png
( S' n4 O: k& }) R5 ~$ q$ ?

- D5 b0 d9 L2 j( h+ R1 j
20210704100011534.png

6 Z5 P, S) ^: T+ N
3 t4 L' o+ M- V" UADC时钟频率为150MHz。
9 e* h* p% H. p" E1 i0 A
: e. n# z; f) X- h3 i5 ?$ T# E2. ADC配置
# P7 ?  `3 C- r; J2 y* L选用ADC3中的IN0,其他的不选,具体配置如下,根据下图计算采样率首先,ADC的时钟为150MHz,时钟分频8分频,然后采样时间为32.5个时钟周期,采样率约577KHz,实测采用8.5个时钟周期也可也,但是时采样率再高就不太行了。, h2 u9 g# D( y5 s/ R
- K* x. a; n- ]( ?# y3 a/ P
20210704100216440.png

) j/ q3 J! e3 Y& |; y) v+ l
* k" N% r/ l! |/ C- J3. DMA配置: g8 \) K, b# \  z: F( K" G
DMA配置如下图所示,由于是连续采样DMA配置为循环模式,同样,在ADC的配置中的转换数据管理模式也要配置为DMA Circular Mode。数据宽度选择half byte,在Debug中选上串行线就行。至此在cubemx中的配置完成。
' q8 n( M! ]! v3 q- m! S5 |$ |/ d) d& C- x4 X% Z& Z; x9 V
2021070410290080.png

0 x5 F6 A2 q2 ^& d; I" A8 C6 A+ |0 A
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
+ u) x: q7 A/ r1 k2 x6 `
1 N5 r% n4 i: S二、工程3 G. w7 L) j0 Q" c$ h
1 . ADC测试
/ m' o, c" o2 Y2 {2 o" Qcubemx建立的工程已经包含了对各个部分的初始化,查看与ADC相关的函数。然后选择调用函数。首先进行对ADC的校准,如下所示。校准函数后面的两个参数可以在函数定义上面的注解中找到。0 B2 u  p7 z9 V# }  U) [2 ]
( w# M8 `# S( }* w; C: C
  1. volatile HAL_StatusTypeDef status;
    2 k/ |; E& D) B' I# ^8 o! U
  2. status=HAL_ADCEx_Calibration_Start(&hadc3,ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED);
复制代码
1 S5 K, d- E" j
20210704105245249.png

# R; s8 p+ A# [! L$ s9 K6 ~$ L) @  }1 O' [' D+ a
然后开启ADC采样,由于是使用DMA方式,所以调用HAL_ADC_Start_DMA函数。处理方式也一并写在下面所示的程序中。
  Z% w7 A" [/ Q+ S4 G- }, r- b" H+ H8 M
  1. volatile uint32_t result;
    - B- y) r( F1 G; z
  2. volatile float value;
      P2 }, C! ^$ ]& B: L
  3. status=HAL_ADC_Start_DMA(&hadc3, &result, 1);
    , C* u! m* k0 ?0 {
  4. value=(float)(result&0xffff)/65536*3.3;
复制代码
, I6 _3 j! c9 ~6 J. H2 |
调试时可以发现ADC的值可以连续被转换。! i, W# F4 ]  f% g9 e
20210704112136488.gif
; Q+ f8 w0 W( E* ~

3 u4 ?9 q* V! m三、FFT. F  j/ e; n, v7 i8 h4 Q
1. 添加DSP库8 Z* v9 p$ Q) P' I5 o/ O) c
CMSIS包含了数字信号处理的一系列库,在Keil中添加比较方便,如下图所示。! h; n0 ]  u0 j  a; C
' O% k* ^: e6 W$ B! D
20210704110212638.png

; @& X4 m/ H; d3 |. X( j3 q$ g( C$ d% U' r
DSP库的资料可以在keil安装目录中找到,如下图所示。% P, I+ G0 o- A8 v# |, C

) j3 W, H2 j) x& O% ^
20210704112010793.png
3 {9 v$ {! N5 s4 i' A7 @# T

. l. g0 F) m$ ]0 E2. 数据采集
1 q4 V' a! m* O8 b采集1024组数据,声明长度为1024的float数组后,当给数组赋值,程序会进入hardfault,发现是H750VB的flash或者ram不够。后面准备研究外部flash存储数据,如果是ram的问题那就没办法了。后面就只有研究FPGA进行数据处理了。
' `2 p( C- u2 E+ _/ Y+ `0 Y! X. D6 U$ O6 ?+ g
总结7 C1 {" \6 d( f* L# k
在整个过程中,发现使用6.0及以上版本的编译器编译的速度比5.0版本的块很多诶。
2 x! O5 ^) n" c. L( g# u
4 \, v# k& s! X+ @1 L0 N( _! `  n. m

" c5 D& l. x  `' b& J/ d
收藏 评论0 发布时间:2021-12-24 19:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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