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

【经验分享】STM32F7实现ADC等周期采集(定时器触发+DMA传输)采集完成后的中断设置

[复制链接]
STMCU小助手 发布时间:2021-12-15 11:00
虽然可以使用DMA对数据进行传输, 但是采集传输完成,其他外设或者主线程是需要知道是否采集完成,才能使用这个数据的。
9 r6 f2 D8 ~, |- p如果我们设置好了传输完成中断,就可以实现了。
$ f; @6 Z! X( ^3 b" h在STM32F7中文参考手册中,有关于EOC的介绍:
5 n5 o6 \" B* F
20200421211806557.png

9 i9 b' `' C- ~: K8 I4 v9 N2 Y. R( ~9 T+ h
EOC有以下取值:1 }- Q7 F" `( i% x& s3 s
  1. /**
    3 K8 a. ]' b, R6 [& p/ i
  2.   * @}
    : L8 l5 V1 y) t
  3.   */ 0 {3 R, y0 l9 t- ?/ K
  4. # ~! Q) E6 F* i* _! |; e' z2 \
  5.   /** @defgroup ADC_EOCSelection ADC EOC Selection
    . W. Q& \- H2 J6 o7 A
  6.   * @{: P& _( E3 e8 p& C: P
  7.   */ 6 @; z+ S! `# ]% V; ^
  8. #define ADC_EOC_SEQ_CONV              ((uint32_t)0x00000000U)
    ) }# R# N$ H# D7 R( j+ |
  9. #define ADC_EOC_SINGLE_CONV           ((uint32_t)0x00000001U)5 p) J  r9 }/ P7 n
  10. #define ADC_EOC_SINGLE_SEQ_CONV       ((uint32_t)0x00000002U)  /*!< reserved for future use */
复制代码

- l' f7 X3 o% n1 z对于我们的单个ADC通道采样,使用ADC_EOC_SEQ_CONV就可以了;
0 a: H, S0 f: ^对于一组多个进行采样,可以选择单通道转换完成就进入中断ADC_EOC_SEQ_CONV,也可以选择多通道转换完成进入中断ADC_EOC_SINGLE_CONV ;/ `9 E' ]( Q- F# c
至于最后一个保留值……不小心设置了一下采集出来的数据我直呼看不懂,大家就不用去试了……
# ?5 t: Y7 S% ^0 A/ G* Z+ U! e* x5 B3 Y! [( t; Y& b
在我们的STM32F7实现ADC等周期采集(定时器触发+DMA传输)上进行修改:
6 `! d0 J! W/ ?$ w' ?; P) R2 j3 ^4 C( @$ V8 K9 o) Z9 y
NVIC配置

2 @& y# ^1 x" w! v% }+ \不配置是没办法进行中断向量跳转的,这个不用解释。/ h, X% v. U! E/ }0 Q8 W0 L

, d5 q# W2 e- ?; ?! U, a
  1.      HAL_NVIC_SetPriority(ADC_IRQn, 1, 0);
      M: m3 Z, u" C' s
  2.      HAL_NVIC_EnableIRQ(ADC_IRQn);
复制代码

5 }" r( T- T, W! d! d# S  [配置EOC类型
, _! p) d: r1 q选择转换结束引发中断的源,就前面讲的两个参数根据自己的需求设置就行了。
& I9 [* _, n1 d' U7 o0 ?
6 u5 i% u; N! N; |) j
  1.         ADC1_Handler.Init.EOCSelection = ADC_EOC_SEQ_CONV;
复制代码
# i9 ?5 g! S, G
使能EOC中断
1 l7 m& U$ J* Z  T* V: `在启动ADC之前,我们要打开EOC中断。
$ J0 g: k5 |8 R
2 k2 i* w' D. Y  o6 M2 B
  1.         __HAL_ADC_ENABLE_IT(&ADC1_Handler, ADC_IT_EOC );
复制代码
- M/ `1 C; ]# n  G( [
然后编写中断服务函数,一个是自己需要做的事情,另一个就是调用HAL库对应的函数HAL_ADC_IRQHandler清除中断标志等操作。1 a, f3 s9 r3 ~7 h7 B: @! _
; D" {4 i: g& a% |
  1. void ADC_IRQHandler(void)3 @/ @& R1 i; J4 w. K4 j
  2. {+ \- q* f/ P# h8 o: ^
  3.         printf("eoc\r\n");  z, `, w( f7 Q  l
  4.           HAL_ADC_IRQHandler(&ADC1_Handler);8 ~! w4 c' E% Q; M5 p
  5. }
复制代码
  U1 C& d6 J2 e* C
# F9 P' K3 b( e% Z& T
5 Q- ~% O: U( B
0 a) h2 Q7 N4 w4 E' h
收藏 评论0 发布时间:2021-12-15 11:00

举报

0个回答

所属标签

相似技术帖

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