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

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

[复制链接]
STMCU小助手 发布时间:2021-12-15 11:00
虽然可以使用DMA对数据进行传输, 但是采集传输完成,其他外设或者主线程是需要知道是否采集完成,才能使用这个数据的。: b0 M( o6 W! ?8 H" h
如果我们设置好了传输完成中断,就可以实现了。
( O+ ]7 o0 l+ b在STM32F7中文参考手册中,有关于EOC的介绍:
& K2 W" O2 n# S# {
20200421211806557.png
- a7 `( v/ s% K5 D1 W$ b
0 \' h4 ?4 c/ W9 r* ?  Z
EOC有以下取值:5 v! I, A9 e" H/ }- ]% N
  1. /**) N2 t, Q7 U% |0 N- z& @
  2.   * @}8 D3 r$ y* e4 \
  3.   */ 6 T& h; K: N( ]6 {  r& {
  4. * q1 |, R9 f" K/ O% |1 w
  5.   /** @defgroup ADC_EOCSelection ADC EOC Selection
    5 Q# v8 v  o: u' t3 K' J
  6.   * @{
      A) E: D0 j" D+ p% ^, C- U
  7.   */   }! L9 N$ M3 C% N& x8 K+ Q
  8. #define ADC_EOC_SEQ_CONV              ((uint32_t)0x00000000U)) J. u8 X* i0 S2 i2 {# m* W
  9. #define ADC_EOC_SINGLE_CONV           ((uint32_t)0x00000001U), `1 @( G7 H( e' A1 q
  10. #define ADC_EOC_SINGLE_SEQ_CONV       ((uint32_t)0x00000002U)  /*!< reserved for future use */
复制代码

; D4 {& |# g; I& R# v对于我们的单个ADC通道采样,使用ADC_EOC_SEQ_CONV就可以了;
* q  ], k" N3 I! p4 H+ C4 [对于一组多个进行采样,可以选择单通道转换完成就进入中断ADC_EOC_SEQ_CONV,也可以选择多通道转换完成进入中断ADC_EOC_SINGLE_CONV ;0 p+ U0 u3 i2 G! r7 R; s4 U
至于最后一个保留值……不小心设置了一下采集出来的数据我直呼看不懂,大家就不用去试了……
6 D0 A/ H- t: V2 V3 g- g0 f1 B7 U2 K' N8 b
在我们的STM32F7实现ADC等周期采集(定时器触发+DMA传输)上进行修改:
) O+ k7 ]; b5 c" o0 i$ \0 {' f. b. _6 P% v/ ^# i, r
NVIC配置

! ]0 z9 Y$ R2 x  Y/ Q不配置是没办法进行中断向量跳转的,这个不用解释。% k* c6 C$ I) \. B$ P
" ]! Q7 I) G0 O
  1.      HAL_NVIC_SetPriority(ADC_IRQn, 1, 0);  C, H, E4 u! t
  2.      HAL_NVIC_EnableIRQ(ADC_IRQn);
复制代码
" U3 W8 ]% o, g' e2 V9 I; v
配置EOC类型! |0 [5 q3 n) W0 v5 S
选择转换结束引发中断的源,就前面讲的两个参数根据自己的需求设置就行了。
3 }( k9 _, X6 o8 a- }. p+ `- n; K- e) P" ^
  1.         ADC1_Handler.Init.EOCSelection = ADC_EOC_SEQ_CONV;
复制代码
) {8 Q! Y; D0 a7 A  B
使能EOC中断
( P9 J, y/ W( K( |- H( \在启动ADC之前,我们要打开EOC中断。# D( d+ T6 ]3 X1 K. V

+ {/ {0 M& @& z( u/ T
  1.         __HAL_ADC_ENABLE_IT(&ADC1_Handler, ADC_IT_EOC );
复制代码

* A: T8 N' R) a" A& S/ i然后编写中断服务函数,一个是自己需要做的事情,另一个就是调用HAL库对应的函数HAL_ADC_IRQHandler清除中断标志等操作。* d5 Z7 A1 f1 ~5 w, g; b
7 l  U1 ?) J6 b7 R
  1. void ADC_IRQHandler(void)
    ! y$ |8 D( t  A( J6 j6 T
  2. {
    2 `# @/ n* T' ~8 ^/ p2 L
  3.         printf("eoc\r\n");+ Y4 c8 H2 l) H. `% K
  4.           HAL_ADC_IRQHandler(&ADC1_Handler);* _+ T9 z- N" V' {
  5. }
复制代码

7 [+ n6 ]+ M! @, Y. l. q# P( h# P% |8 H$ w
+ ~0 D* G- R2 v  _! t, ~+ ]
3 a4 v+ k+ b5 R) W* t; @* i
收藏 评论0 发布时间:2021-12-15 11:00

举报

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