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

【经验分享】stm32H743基于CubeMX配置为双ADC多通道DMA规则采样

[复制链接]
STMCU小助手 发布时间:2021-12-30 13:13
stm32H743的ADC支持的最大频率为36MHz,有相关资料上说是可以超频,具体技术细节不多讨论。
; Z) F$ z7 ?( i0 \" v1 j3 N% ~0 d$ R  J
需求:
7 c! Q! l5 ~$ r, l2 W/ W7 ^/ i2 Z, Z* }1 W& V: Y
使用stm32H743的ADC采集5路数据,当然还要配合DMA,现在把5路数据分在两个ADC上,ADC1和ADC3,那么也要用两个DMA还传送数据。
# x3 n1 M1 s0 p/ p
0 ^3 `% N" ^+ Y! @! t* z5 m$ `/ FCubeMX配置如下:( M* u* q  F. K( d% \8 y& m

3 Z3 o5 e/ k- h, p# H" f配置时钟:( V- |% g. o: t( m, l+ o

( |) E# j# b6 b; m) M. Q- T先配置主时钟,我的是8M的,再配置系统频率480M,然后配置ADC时钟36M,分频后ADC的频率为18M,其它参数系统会自动配置,这个还是比较方便的,配置如下图:
. I: `. C# _# M5 C% b  W
/ n# g, }* e! [: t. T( B4 }
20210603162553220.png

% K/ M% M" M6 b5 e7 x% A' Z0 j+ h8 N6 r) t! a4 _
20210603162652932.png

' `, j3 B& ^; G$ y6 d# ?- Y- Z1 g* x+ X" C) q) L  v. y
下面配置芯片管脚:
; v/ z$ j! ^3 a% ~; Y. G; e/ q0 ]8 W+ m% n
ADC1下面采3个通道:
5 E& y; U1 K$ a+ J6 ]% {. w+ Y9 Z
, n/ H, ^- T% y0 Y! N" K
20210603162826402.png

5 R2 h  K, k+ l: L% d
! H4 ~9 h2 L6 ]2 }. w' I3 n! E. c- J
20210603163005774.png
( t( \( o( M: ?* u: @

2 {0 [! r4 q0 i' @# ^* r! j$ ~. `DMA配置:0 n, U1 e8 E# e9 U6 ]
. t8 t8 b4 B- P  i- `. c
20210603163044509.png

7 J( `7 T0 J% f; r: X4 m' `  c5 z+ w% G. a2 O. w3 U" J' m/ ~
GPIO配置:4 K# M' y# o* ~% P* A1 ~/ W  R
/ w9 D7 o/ @+ t+ f5 v7 _1 W- y
20210603163123541.png
4 G: v8 w; g) ?) t
; g7 y. z( E' Y4 F- }% W5 x
ADC3下面挂2个通道:" P" j: @5 {- W' N+ |1 x8 {

; m3 J# V. Z2 {: w: \  Y+ }主要是DMA,避免冲突,用了另一个DMA,其它配置都一样。
) ^. _6 l! m; \0 b# v$ g% I6 k1 m' n- G
2021060316330787.png
& z5 ?& G& M# K' u+ j" |
. j& g1 X* L4 {$ b; y2 Y
中断配置:
/ f7 T, n% j: g7 s% H  z  G5 I5 c" B& Q, F5 w& M8 A' Y6 b' Z
因为在使用HAL库时,函数调用太繁杂,也没有那么多时间细细研究,所以,把调用HAL句柄的选项点掉了:
+ G0 t/ \, I0 J' H$ J1 d6 v8 C: R6 v
20210603163555900.png
$ O2 s0 Z  c) {* H# l
! c( }% @8 n9 O8 i/ O
然后就可以生成代码了。& E) b- V. Z- V, L3 t4 w

4 l+ N" h4 }6 x, J0 |) W在生成后的代码中,要启用采样时调用函数:
  1.             HAL_ADC_Start_DMA(&hadc3, (uint32_t *)adcData.array2, 6000);
    4 S' Q' s: t; n9 W
  2.             HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adcData.array1, 9000);
复制代码
- F- @, d0 z9 E/ F( n
在文件stm32h7xx_it.cvoid 中的中断函数:6 _5 j$ q8 a) r+ N

( t6 c! z% k1 N2 Pvoid DMA2_Stream0_IRQHandler(void)
7 I, I% o9 Y0 ]1 y. \3 ~9 |. u/ e$ F& {. d/ Y  x, n2 X
void DMA1_Stream0_IRQHandler(void) 中,要清中断标志位和停止采集:
2 M+ g3 n1 D6 X: e$ H+ J
: r- S$ I6 b; W
  1.         MODIFY_REG(DMA1->LIFCR, DMA_LIFCR_CTCIF0, DMA_LIFCR_CTCIF0);  // 清除中断
    0 ~7 b) G3 w& Y- ]. l1 Q
  2.         HAL_ADC_Stop_DMA(&hadc3);
复制代码

" J, @% r" y% B0 U3 P0 `+ {
2 R5 [: R) @. P8 e& B" A7 T5 R- P$ N% B8 Z/ p% n9 \
! m: J' A- q5 Q, q& {
赞 收藏 评论0 发布时间:2021-12-30 13:13

举报

0个回答

所属标签

相似技术帖

官网相关资源

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