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

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

[复制链接]
STMCU小助手 发布时间:2021-12-30 13:13
stm32H743的ADC支持的最大频率为36MHz,有相关资料上说是可以超频,具体技术细节不多讨论。
- @9 }3 g9 T: Q/ E3 v2 C/ X# j+ E0 e1 F
需求:7 t3 j. j) j- i: H) t

9 V( A/ ~& K6 q4 P, C) s使用stm32H743的ADC采集5路数据,当然还要配合DMA,现在把5路数据分在两个ADC上,ADC1和ADC3,那么也要用两个DMA还传送数据。0 T% ?( O* z/ k
9 T3 b) a6 f+ r6 f
CubeMX配置如下:
) z9 C" k( W( p5 T* N2 l, d! P' n- p# C$ u
配置时钟:; ?2 c/ K! q9 y, x2 y' T$ X
- Q% k: C/ O! x/ S4 z- x8 B
先配置主时钟,我的是8M的,再配置系统频率480M,然后配置ADC时钟36M,分频后ADC的频率为18M,其它参数系统会自动配置,这个还是比较方便的,配置如下图:7 c- m; |" A; i+ \- K, [4 t; N
+ n8 m/ Q: j2 F' p3 e: U2 [
20210603162553220.png

* O+ I; e5 u, c# A* M, o$ M. y- ^# u6 C" P# t. w. `. W# k
20210603162652932.png
( l  h; U$ u6 p4 }+ P
( B0 e# d) K/ y, o# w) s- k
下面配置芯片管脚:
; w, O4 m& D2 {& w# B; L3 s+ D3 |& t
ADC1下面采3个通道:
& h+ y1 a# U2 g; ?( B" |
5 w1 i8 |, b" B! _7 d' m0 v. [, D
20210603162826402.png
! D* P0 L! b( h
5 T5 _& s. k9 H
20210603163005774.png

8 i" h+ [: m* |/ Z6 p3 H( K* _4 x, L/ I$ M$ ^" s  L5 S
DMA配置:4 b& d& g' y+ c

+ D* d- T0 r; }
20210603163044509.png

/ w9 M0 T, K/ u5 U7 M6 x8 B1 J, O' H3 f4 |; g( \0 a
GPIO配置:* l9 w! N9 W1 f8 z/ ^) b& Z8 d
" ]* ~2 i7 [# M8 p, T. |- X4 C9 S) j
20210603163123541.png

/ h# {; u9 E- i' @3 y" \0 `" ?
/ P  g3 P- X% h. L6 e, DADC3下面挂2个通道:
* h8 |# Y. t0 w" A/ E, @" y7 v6 }, h# X' M6 T
主要是DMA,避免冲突,用了另一个DMA,其它配置都一样。
( |! X7 d( W! z! Y4 r% ?$ n1 Q
0 ~5 g- P) Z; m0 i% D5 |, M' W
2021060316330787.png
3 i# H' }" \$ U' T. M. ^5 o! |
0 N) Q, _( g. L: s' `3 }4 c' f
中断配置:3 H: V, P/ Q/ Y$ q

* @% [/ F$ d. }6 D" M$ h* v因为在使用HAL库时,函数调用太繁杂,也没有那么多时间细细研究,所以,把调用HAL句柄的选项点掉了:$ ]2 y6 X- J; v3 \" ]- e. Y! ]

0 ]" e" d" y: d  Q! x8 x- F/ J
20210603163555900.png

7 \7 P# {0 H" |- d# a0 b& S( a6 l. M4 B& w( `7 C5 l: R0 w
然后就可以生成代码了。
9 S  M: |% U, ~  k4 J6 P$ n1 P5 o( @$ O8 q/ [& W* u& M0 V
在生成后的代码中,要启用采样时调用函数:
  1.             HAL_ADC_Start_DMA(&hadc3, (uint32_t *)adcData.array2, 6000);
    / Z1 \& u. }8 ?$ j
  2.             HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adcData.array1, 9000);
复制代码

# U" ?  e2 \$ X6 ^2 i在文件stm32h7xx_it.cvoid 中的中断函数:0 J6 W4 x! L# r: E/ U

& h, ~, g! p. H) Q8 svoid DMA2_Stream0_IRQHandler(void)
/ j. |8 l$ G( e  d! T! s+ H7 `% Y4 W5 k# B8 Y
void DMA1_Stream0_IRQHandler(void) 中,要清中断标志位和停止采集:
: M1 a4 [* |% b; i8 x8 M3 C7 {
3 R# F3 n& c0 ^& }4 U8 R
  1.         MODIFY_REG(DMA1->LIFCR, DMA_LIFCR_CTCIF0, DMA_LIFCR_CTCIF0);  // 清除中断1 E( O' T( j8 K( G
  2.         HAL_ADC_Stop_DMA(&hadc3);
复制代码
5 b! ~4 O1 ^8 t4 s+ r9 a* x

# d; X+ k& V6 p( e* e/ D( v/ n) `9 s6 _$ I; Z) S- d: f

, u4 r, K( G# x3 V+ m. v
赞 收藏 评论0 发布时间:2021-12-30 13:13

举报

0个回答

所属标签

相似技术帖

官网相关资源

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