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

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

[复制链接]
STMCU小助手 发布时间:2021-12-30 13:13
stm32H743的ADC支持的最大频率为36MHz,有相关资料上说是可以超频,具体技术细节不多讨论。$ J" R) Q4 ?8 K5 X  i; L

! I( W- P( V) N3 J& C9 i需求:
6 k. @- ?9 R# o  f% A1 D( i, S6 Y2 J9 T" \2 X# ?
使用stm32H743的ADC采集5路数据,当然还要配合DMA,现在把5路数据分在两个ADC上,ADC1和ADC3,那么也要用两个DMA还传送数据。
& E) k7 @6 z5 x1 n" Q, e" f/ L8 K  G" {# k7 {
CubeMX配置如下:! s. s( U4 k( E5 s
6 }; M4 e! X; d
配置时钟:
9 ]8 A. q. \% W: ~" W, @8 G4 f5 x6 p0 Q) y
先配置主时钟,我的是8M的,再配置系统频率480M,然后配置ADC时钟36M,分频后ADC的频率为18M,其它参数系统会自动配置,这个还是比较方便的,配置如下图:
+ p% o% p8 V/ ]8 h, q
" t+ y; c% s6 G7 L0 R
20210603162553220.png
% z8 y! `# `. d2 Z5 I
0 \8 m% A- D( o( W8 t7 Y
20210603162652932.png
4 H9 a+ w, K/ k
' }6 e  {/ _/ M) s
下面配置芯片管脚:1 k. P' Q! Z% }9 q2 b$ R
' u( c( Y! q7 r+ J9 c7 I! |9 R0 d
ADC1下面采3个通道:
6 ^$ }- k: u. r& C! o9 G- W5 ^8 ]2 Z1 p6 h, T4 ]) x
20210603162826402.png
- D. u( Z+ a8 R6 s6 [  O! e" L  o
" N5 L# m/ k, ?/ ?+ F
20210603163005774.png

$ k& g+ h3 r. s* F/ ]- i: j0 W  m0 r# r% f" [
DMA配置:
* t* X, l+ ^/ c- z: R/ r$ W) s$ x- D3 R+ ], J
20210603163044509.png

# U8 L; X: X4 D
  W& G' D8 ], h. _  \/ DGPIO配置:
  n& `' |; Z- S  E) B  f# n
' E" c2 a2 [  p3 z1 ^: d1 }
20210603163123541.png

0 ?9 x  ^; T2 E+ ]9 Q2 ]: D# b- ^  T" X7 t& t+ d1 ]) K& R
ADC3下面挂2个通道:* y& _/ |  ~$ V7 R) {

( K( z: O* p1 {. i, w( A' d+ H主要是DMA,避免冲突,用了另一个DMA,其它配置都一样。
8 W1 }1 l; ^$ M3 t4 `# }; b' {: Z* T0 P% A. H* ]: i
2021060316330787.png
8 i) V2 Y+ B- R/ C* |

5 Y# W& z( }& k# }  [中断配置:: V/ `* d; E. \# P" d2 A0 q
* c/ v* l) z2 l
因为在使用HAL库时,函数调用太繁杂,也没有那么多时间细细研究,所以,把调用HAL句柄的选项点掉了:* l9 V6 r5 x6 L4 p( ^

& \( D9 ^: i) h7 M
20210603163555900.png
! K* l' o+ c# t
% D+ X( S5 ?! ~  ~, z; O6 u
然后就可以生成代码了。
3 C9 G6 X3 A. l5 K) ?+ M+ P  V9 e
3 N$ \5 f- e5 P( u6 Z5 T# a/ {在生成后的代码中,要启用采样时调用函数:
  1.             HAL_ADC_Start_DMA(&hadc3, (uint32_t *)adcData.array2, 6000);
    * p7 x! `; `# ^0 P% C
  2.             HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adcData.array1, 9000);
复制代码

6 f6 h7 S5 A. r, t% a: i8 F在文件stm32h7xx_it.cvoid 中的中断函数:
4 e5 M- @9 P0 V
! j& D/ y) H0 _5 _  C/ `void DMA2_Stream0_IRQHandler(void)
7 p: I$ O( Y' H" x1 [
4 ?& [7 B- U% s/ {6 Vvoid DMA1_Stream0_IRQHandler(void) 中,要清中断标志位和停止采集:
! t7 t( |( J% Y; f* x0 w
0 I/ g7 G4 ?% w1 p
  1.         MODIFY_REG(DMA1->LIFCR, DMA_LIFCR_CTCIF0, DMA_LIFCR_CTCIF0);  // 清除中断  d, V5 ~& `* R: r
  2.         HAL_ADC_Stop_DMA(&hadc3);
复制代码
2 f. {1 O. T2 d" @: Y  S
  s6 I- F6 _. N! T' \, ^( h8 u
) _7 c* \: f8 W% H" \' ^
# l$ F$ S, X( ~9 l2 S; K5 {
收藏 评论0 发布时间:2021-12-30 13:13

举报

0个回答

所属标签

相似分享

官网相关资源

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