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

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

[复制链接]
STMCU小助手 发布时间:2021-12-30 13:13
stm32H743的ADC支持的最大频率为36MHz,有相关资料上说是可以超频,具体技术细节不多讨论。( w" p( `# F- z4 J8 a/ z% J
; f: U) G8 j! b# H; R. j3 P" s% s
需求:
) u4 H3 Y9 A: V0 F
4 D3 i4 t& R, k, {2 D# _8 j使用stm32H743的ADC采集5路数据,当然还要配合DMA,现在把5路数据分在两个ADC上,ADC1和ADC3,那么也要用两个DMA还传送数据。
  g- l) U% Y4 F, `5 L7 R' E7 d3 B: z
CubeMX配置如下:, p& H" Y. a" M# _, P
1 i4 v% Q/ @! U) t
配置时钟:
$ r2 x3 B8 L2 x. S8 F$ y0 v' w# N8 y# T; H! u- g$ [
先配置主时钟,我的是8M的,再配置系统频率480M,然后配置ADC时钟36M,分频后ADC的频率为18M,其它参数系统会自动配置,这个还是比较方便的,配置如下图:* d& L' u1 s% S( o2 s
* P0 ?8 u4 p" J- W% X8 a& r" d0 G
20210603162553220.png
/ j$ W" @% r2 [3 N, [! V$ G' w' V

6 S3 [4 R8 o  y6 k. d
20210603162652932.png
8 b* w+ R2 n  O; O/ _

; T" |, X) p( S/ M0 P) G; k5 \! ^下面配置芯片管脚:
! U9 u) {9 \& M2 s1 R' U
; ]* F+ \9 _- ?8 l# c3 |* R8 Q9 bADC1下面采3个通道:+ K5 W4 h+ G$ J3 a7 r

' m( t' K& w  C. q( |# U
20210603162826402.png

  {) h3 D! B9 @' [# l: X/ C  ~7 u
0 m% S% C# ^* x
20210603163005774.png
7 p! A4 Y4 i6 M; l3 ]  ]
0 @$ I, Y( G3 q. @4 Z# T3 M6 G
DMA配置:
* E! y* l" E  t  g( g- f, `/ j0 ~( K' h+ k  M$ k) m: d
20210603163044509.png
3 _5 {9 N6 v9 x& z% y
( Z9 [, G' n7 @
GPIO配置:
, `6 w, J6 @8 h3 T. O$ [, `6 X
; a/ u) H" y+ V  q9 m8 x5 o
20210603163123541.png
8 P% s& q" J" B0 D0 W1 |
' v4 b" t. u4 `
ADC3下面挂2个通道:; O1 r/ c7 A9 |+ w
* s" R+ y, S# N* d- }; W
主要是DMA,避免冲突,用了另一个DMA,其它配置都一样。
7 U! f7 ]7 O4 r+ ~5 |
1 q; Q! ?; V6 t& m) h# \2 M! I
2021060316330787.png

. s" `5 t* C* B* b
9 X% x9 U, ]* P) K/ q; _, |中断配置:
. |# [7 ~1 A4 c# Y% q* y( c: E+ w4 E6 L+ E- l
因为在使用HAL库时,函数调用太繁杂,也没有那么多时间细细研究,所以,把调用HAL句柄的选项点掉了:+ x4 P* U- e, c/ i& n+ H4 a: E* L
$ V+ y$ C+ a* V' d; S$ }7 S- O1 K1 u; r
20210603163555900.png

/ Z) G; T7 e5 [% i% u9 `) Z  g: ~8 d
然后就可以生成代码了。2 ]4 d% `5 M2 g1 s: g: E
  E$ R$ k- a, o. V" u4 |& g
在生成后的代码中,要启用采样时调用函数:
  1.             HAL_ADC_Start_DMA(&hadc3, (uint32_t *)adcData.array2, 6000);
    & `4 z5 v) p+ E& [, R
  2.             HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adcData.array1, 9000);
复制代码

; |- A5 h0 q: U4 V% w在文件stm32h7xx_it.cvoid 中的中断函数:
/ d$ W) c0 f- _# @+ p! u, W0 T/ A
7 w$ C, w6 B) D1 d, N. L0 \  Svoid DMA2_Stream0_IRQHandler(void)) G6 t) @. J0 t3 [

9 x9 {' y% z6 d0 E4 p. c+ uvoid DMA1_Stream0_IRQHandler(void) 中,要清中断标志位和停止采集:
9 G4 V7 I( o* n6 a- C. y3 |/ C- W6 D" W& i9 n9 B$ B
  1.         MODIFY_REG(DMA1->LIFCR, DMA_LIFCR_CTCIF0, DMA_LIFCR_CTCIF0);  // 清除中断
    / s3 P( z; _% A0 d- [4 n
  2.         HAL_ADC_Stop_DMA(&hadc3);
复制代码

7 ?. C: I) \7 r+ R+ X2 S- a$ W

* ^/ F2 v4 k0 ^4 p/ ^: X( I2 @) ~, v8 V& Y0 h: k- S" T: \4 q* H
收藏 评论0 发布时间:2021-12-30 13:13

举报

0个回答

所属标签

相似技术帖

官网相关资源

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