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

【经验分享】STM32H7 ADC hal库

[复制链接]
STMCU小助手 发布时间:2021-12-24 19:00
前言5 l! A% }0 F5 B8 f- w
使用STM32H750VB作为主控,使用stm32cubemx配置工程,在单通道对ADC通道进行采集,预计对通道采集1024次,然后对1024个数据进行fft。
! W) q5 u' b4 H5 T1 _  \
  P2 O' z/ |3 I& [& z/ V一、配置
, P: p3 T: t- p9 R( `" D1. 时钟配置6 H1 a0 [/ u3 G, k! p
在cubemx中配置,RCC中采用外部时钟,外部晶振分别为25MHz和32.768KHz。时钟树配置如下图所示:3 J5 U. Z: O, T: O( k

5 }4 r6 N. b( U) q
20210704095938344.png

" W  C) Z% y/ c! u! _5 ]3 L# l; G7 g7 F  i5 G+ c( X
20210704100011534.png

7 E- W1 o) q2 G* z) U8 k9 r
) T( b' t4 q. I6 B% dADC时钟频率为150MHz。
; F, B/ B" @& u: W1 Q
* b, P* O- L8 T2 k# v" p2. ADC配置5 h# v$ y* ?+ _0 J7 r' e6 y2 Z2 n
选用ADC3中的IN0,其他的不选,具体配置如下,根据下图计算采样率首先,ADC的时钟为150MHz,时钟分频8分频,然后采样时间为32.5个时钟周期,采样率约577KHz,实测采用8.5个时钟周期也可也,但是时采样率再高就不太行了。: I0 S: Q. R9 \% b

9 C0 E8 g0 ^9 z0 Y
20210704100216440.png
& O$ N1 D) u+ \

6 d1 t, i& n& t4 `3 ]. u+ ?3. DMA配置; p4 l" a: A3 a; u6 T2 j
DMA配置如下图所示,由于是连续采样DMA配置为循环模式,同样,在ADC的配置中的转换数据管理模式也要配置为DMA Circular Mode。数据宽度选择half byte,在Debug中选上串行线就行。至此在cubemx中的配置完成。
8 g# Z* K; T6 K: j) s$ `" Y! a% u6 E6 D& C7 d) u6 |7 D
2021070410290080.png

* O! H- p% v& Q9 k! J/ V* B
" B3 k; s8 K; _. G- t9 h4 G3 b1 z, ]示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。9 u3 |* h  \) |5 w! |
7 o4 ]4 S5 {* E+ f
二、工程; G4 P9 v) l# L
1 . ADC测试
' h/ M8 w+ e4 ^2 Xcubemx建立的工程已经包含了对各个部分的初始化,查看与ADC相关的函数。然后选择调用函数。首先进行对ADC的校准,如下所示。校准函数后面的两个参数可以在函数定义上面的注解中找到。
& |* l4 x% K* O" S6 H6 J) N( W7 c2 Z; K1 k9 [
  1. volatile HAL_StatusTypeDef status;4 I( E; ?9 }7 _/ B7 p& L
  2. status=HAL_ADCEx_Calibration_Start(&hadc3,ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED);
复制代码

: u  o: i) p, Q4 I. ?
20210704105245249.png

0 v) s* C$ d5 T: A: R8 h% ^0 t/ A# ]9 e' s
然后开启ADC采样,由于是使用DMA方式,所以调用HAL_ADC_Start_DMA函数。处理方式也一并写在下面所示的程序中。4 C  l+ e2 @5 Y, G; @. i) H* [
: B$ Q* R: d& j$ E
  1. volatile uint32_t result;0 `, w& ?6 Q. n4 D/ v
  2. volatile float value;
    & r% q+ S; C/ G# W) K3 [! O7 p. z& o
  3. status=HAL_ADC_Start_DMA(&hadc3, &result, 1);
    8 J& Z7 p/ g- ]. }- e# B) S
  4. value=(float)(result&0xffff)/65536*3.3;
复制代码
8 D( K4 d: g: k8 I
调试时可以发现ADC的值可以连续被转换。
, P- ]7 G3 ^) j
20210704112136488.gif
  \  x$ p2 o; @' q
' h( L. G: L, Z0 }8 W; \: _9 r  K
三、FFT) B2 Q8 d: r5 k: H3 K
1. 添加DSP库
! w6 O8 I  J5 }+ qCMSIS包含了数字信号处理的一系列库,在Keil中添加比较方便,如下图所示。
6 P+ f" {# P; _* |) H8 s4 y: }: ?0 H  o8 C" A
20210704110212638.png

* R; A2 n# r8 a  H3 w8 z: K6 p% c/ I( q* \% F8 a$ w& k
DSP库的资料可以在keil安装目录中找到,如下图所示。( a8 r/ h  X) u, M5 R0 l

4 V8 l3 U$ {3 V% B5 @
20210704112010793.png
. F0 `) n' X' d; X
- u; x2 T# O% p% o  S
2. 数据采集1 }5 m0 x, P3 _) V5 R
采集1024组数据,声明长度为1024的float数组后,当给数组赋值,程序会进入hardfault,发现是H750VB的flash或者ram不够。后面准备研究外部flash存储数据,如果是ram的问题那就没办法了。后面就只有研究FPGA进行数据处理了。4 r0 X0 R4 a# W. i% w0 i

" f9 `; o& h5 X总结$ E' B! S) V2 k5 y
在整个过程中,发现使用6.0及以上版本的编译器编译的速度比5.0版本的块很多诶。6 Z8 s$ Z3 n, c6 k7 M$ n- a) g
2 ~1 _2 Q4 b/ c2 s/ ]1 x! S3 E
% \  q0 C) `# @

5 r/ |; n1 U: K6 D$ `+ j1 u
赞 收藏 评论0 发布时间:2021-12-24 19:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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