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

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

[复制链接]
STMCU小助手 发布时间:2021-12-30 13:13
stm32H743的ADC支持的最大频率为36MHz,有相关资料上说是可以超频,具体技术细节不多讨论。
# C5 Y/ @8 }+ {7 j$ Y* W3 I& w8 E. H3 C) ~" P
需求:
+ s7 F; V- X4 g  a) [1 J3 Q+ y) u+ W
使用stm32H743的ADC采集5路数据,当然还要配合DMA,现在把5路数据分在两个ADC上,ADC1和ADC3,那么也要用两个DMA还传送数据。
+ L" b9 u- O: O$ W: @1 |$ _+ i4 v5 K/ {* P
CubeMX配置如下:+ j& g1 S9 o" U: P' k1 T4 V

! ]5 A! p) D( D- X3 L0 B配置时钟:
; w: O- u7 d) V% [
8 W5 W/ D& l0 F1 c6 ]先配置主时钟,我的是8M的,再配置系统频率480M,然后配置ADC时钟36M,分频后ADC的频率为18M,其它参数系统会自动配置,这个还是比较方便的,配置如下图:7 R3 G8 C7 B" s, U

! C5 f1 p; k2 e3 C1 t) H
20210603162553220.png
5 q$ u4 W6 R) z

" g8 }. J* j4 Q+ r' A2 g* k
20210603162652932.png

$ t- {" ^# _- T6 [( Q, [+ }6 |# g/ v2 ]
下面配置芯片管脚:4 @. S1 O1 h0 p; q) }' j1 R

4 g4 z1 b/ h; ]/ ^( f/ I' o! a+ @ADC1下面采3个通道:( i2 j) j2 B- A5 P6 j9 [

- t- i: g5 n* G* u
20210603162826402.png
! s( W/ L- U: ^5 w- o9 p8 y( X. o

4 l4 i% u" \% ]* c- c4 V; @7 b
20210603163005774.png

0 O2 W7 U- K; N& g" n- I
# O4 M% I; x1 d. z" o8 nDMA配置:, [# U2 D4 H9 w; W% y. w' \

" L& ]- J' o+ A8 N
20210603163044509.png

# }' ~* T/ F9 G" R1 @: z5 O% U- m+ ?4 n# F
GPIO配置:' t) h6 e0 ]- j" D8 r2 V
6 [6 Z, ^+ J- f' R9 V$ J- V
20210603163123541.png

: A: c, x! N" v) z2 R, ~) \3 |
2 L5 F+ s7 R( X- l; M/ {ADC3下面挂2个通道:
$ x" f9 ]7 B6 @# q. j& n8 r! Z, l% H( G5 r: q
主要是DMA,避免冲突,用了另一个DMA,其它配置都一样。9 O6 X1 r, W7 c% ?/ V  s

3 [. k/ \, T0 d4 A7 P! C
2021060316330787.png
; |# N' a# u4 w
. L7 X" E0 S4 A4 |& c
中断配置:
" y: Y- {, P7 e" v4 }
7 [) k! e) }# _- n) v  q" [因为在使用HAL库时,函数调用太繁杂,也没有那么多时间细细研究,所以,把调用HAL句柄的选项点掉了:
6 x; w1 b- C$ q4 w
( r) N$ L% `# A7 R0 z8 }9 q
20210603163555900.png

0 a! ^$ `9 E0 A/ ~! P7 P: K! E3 z6 I
然后就可以生成代码了。
' I# [# g7 A& g6 h3 J/ X8 o- B! ?5 R1 O0 I" I8 ?, C" V, d& h
在生成后的代码中,要启用采样时调用函数:
  1.             HAL_ADC_Start_DMA(&hadc3, (uint32_t *)adcData.array2, 6000);) j- ^4 D9 S8 u. ~/ ?0 d# ~1 m
  2.             HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adcData.array1, 9000);
复制代码

0 y) L4 H3 Z' V! s. r在文件stm32h7xx_it.cvoid 中的中断函数:
4 B8 z1 [9 H3 t) X& e2 y$ I
! b( g9 B/ y1 u0 S" avoid DMA2_Stream0_IRQHandler(void)( [  n. Y1 i1 g* o2 C+ ~

: A8 u; f% V1 u; t- B. ?void DMA1_Stream0_IRQHandler(void) 中,要清中断标志位和停止采集:
' I: u$ i8 t' ?3 c8 K) }7 P( o4 ~8 h7 z2 y$ x  M8 l' L3 r
  1.         MODIFY_REG(DMA1->LIFCR, DMA_LIFCR_CTCIF0, DMA_LIFCR_CTCIF0);  // 清除中断
    8 N9 b& m0 s6 b
  2.         HAL_ADC_Stop_DMA(&hadc3);
复制代码
( R; c3 W, ~: R( F  E

( v! X2 e: J2 f6 ~0 J( }
4 d9 f3 o6 V+ r: b2 L- R- H, [, U; z) h! q7 D0 T. B8 a
收藏 评论0 发布时间:2021-12-30 13:13

举报

0个回答

所属标签

相似分享

官网相关资源

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