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

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

[复制链接]
STMCU小助手 发布时间:2021-12-30 13:13
stm32H743的ADC支持的最大频率为36MHz,有相关资料上说是可以超频,具体技术细节不多讨论。: {3 s1 L& L: m' `

0 X& Q1 E, f- x4 K  d- H% t$ K需求:! m) P/ s1 v8 y, q, O
  Z" N4 f% o% I( u3 [. n, W
使用stm32H743的ADC采集5路数据,当然还要配合DMA,现在把5路数据分在两个ADC上,ADC1和ADC3,那么也要用两个DMA还传送数据。3 O3 ^1 O. I5 L; a  J
; k' L% Q; c0 t! ^& y  h
CubeMX配置如下:3 V0 F) A2 ]/ F7 N
( h; H* q- P, P" s2 q# e  \1 r+ j
配置时钟:
* L, F* \# I9 h. z( e( k" k0 e8 R! ]: i- ?8 k% ~
先配置主时钟,我的是8M的,再配置系统频率480M,然后配置ADC时钟36M,分频后ADC的频率为18M,其它参数系统会自动配置,这个还是比较方便的,配置如下图:  V6 q* i3 P% \" {
% {, j1 ?( f( _' P, s
20210603162553220.png
- W6 B+ g  B8 f3 e! u1 V
1 _% }, d0 j* q7 e* |4 x
20210603162652932.png
- C) E* }! {8 p/ f7 u4 Y& ?$ w: N
  S) y7 r+ a8 v7 M% R. R9 r9 O
下面配置芯片管脚:* b" K; M! w0 l5 t3 X) n( S
1 S1 B' ^) e3 A/ d
ADC1下面采3个通道:. h3 u! E. A. }! K) `

+ p" Z+ `/ z0 s+ M
20210603162826402.png
. Z2 k% v1 ~; u' X
- S7 j; C0 N8 l% t
20210603163005774.png

  {4 F# k2 H- D
9 W9 @% e5 Q5 L4 iDMA配置:
( l2 d% z& g* @+ |+ G( m- g( ?, `1 N( s
20210603163044509.png

; {; M" z" [$ _8 q) e1 |4 l; s* A8 B! h3 }8 X
GPIO配置:& ^& z! _" X5 x' ?: S

. V8 {! f% q$ I/ I* o; A
20210603163123541.png
* P5 X* g: X8 \9 o% g
1 C/ _% y! N- Q1 \( G
ADC3下面挂2个通道:1 a; O8 _8 P: n
) c3 K6 |& |3 |+ W( E- g: [
主要是DMA,避免冲突,用了另一个DMA,其它配置都一样。) i4 e, k$ D. k6 m9 F, b6 @

9 [# w' C' f) J/ X0 h
2021060316330787.png
/ Q1 ]& @  C/ m+ @; H' q/ {' o5 N9 r
6 n, s$ ]+ w0 m9 n- [8 e
中断配置:
6 I$ }, V% V+ f: o$ m2 y* u4 s. {
- G. q4 Z3 k  B+ _0 P. F因为在使用HAL库时,函数调用太繁杂,也没有那么多时间细细研究,所以,把调用HAL句柄的选项点掉了:# b+ G  l/ N# G+ Q' r

; S/ t6 p4 w5 q0 K0 [3 b
20210603163555900.png
4 g6 a$ D4 q8 w, D! D) ~
1 }( ~5 C. p# ?0 d, t: A& b* `
然后就可以生成代码了。8 @/ m6 M( ~6 l$ j7 O" |: Y

6 E# i/ }: W! e  k& n3 ~$ m在生成后的代码中,要启用采样时调用函数:
  1.             HAL_ADC_Start_DMA(&hadc3, (uint32_t *)adcData.array2, 6000);
    & _9 |' z' p+ \& @8 X) o
  2.             HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adcData.array1, 9000);
复制代码
4 p( Z: \1 _0 j' u; X( _
在文件stm32h7xx_it.cvoid 中的中断函数:
, w4 u7 C7 h' m3 b8 L3 g, Q& c8 z0 M, M' T' `" Z
void DMA2_Stream0_IRQHandler(void)
  K" T  {9 ~! _) Z
# K8 a3 q4 r  e! b, S$ [void DMA1_Stream0_IRQHandler(void) 中,要清中断标志位和停止采集:
' H5 Q# T9 P1 r0 Y5 ~# {' P5 z. ?& A8 F, J7 T
  1.         MODIFY_REG(DMA1->LIFCR, DMA_LIFCR_CTCIF0, DMA_LIFCR_CTCIF0);  // 清除中断4 h/ z$ \% }3 G9 B* Y9 {7 S; i
  2.         HAL_ADC_Stop_DMA(&hadc3);
复制代码
& N1 `) W: z4 u8 g) ]& R
- i4 b% u! K4 W0 L% Y4 U7 w' B! J
$ E6 B% N; e2 ]

( \% T+ X5 Q/ N7 j( d% [, B
收藏 评论0 发布时间:2021-12-30 13:13

举报

0个回答

所属标签

相似分享

官网相关资源

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