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

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

[复制链接]
STMCU小助手 发布时间:2021-12-15 11:00
虽然可以使用DMA对数据进行传输, 但是采集传输完成,其他外设或者主线程是需要知道是否采集完成,才能使用这个数据的。( ?: {" e1 l6 S1 G1 L; K3 W8 o
如果我们设置好了传输完成中断,就可以实现了。! ?2 ~6 x3 \; [2 C0 I+ v
在STM32F7中文参考手册中,有关于EOC的介绍:
1 [8 J: \5 |+ j: w/ n
20200421211806557.png

( O4 H) D  s+ ^! ]& b, L
* G- D0 i3 i* x( B& ~EOC有以下取值:
/ L  K, l7 R+ f* ]! R% l
  1. /**1 p# [( R0 c+ K
  2.   * @}0 p: d% \: E/ y6 M6 i8 ^
  3.   */ . D: U0 W7 \" |* t$ ]' n$ J
  4. 6 w) W5 N8 h3 s' }9 l3 c* p
  5.   /** @defgroup ADC_EOCSelection ADC EOC Selection
    1 r# G. B: w- P1 E% h9 D) D
  6.   * @{
    ( S% Y3 h, X; h  E6 o4 B
  7.   */ 0 b8 M, v+ R6 x+ w9 [; L; E
  8. #define ADC_EOC_SEQ_CONV              ((uint32_t)0x00000000U)6 @5 b2 E3 o' D: i
  9. #define ADC_EOC_SINGLE_CONV           ((uint32_t)0x00000001U): x. m* n- j% n+ i! g
  10. #define ADC_EOC_SINGLE_SEQ_CONV       ((uint32_t)0x00000002U)  /*!< reserved for future use */
复制代码
' n* }7 D; X) b* _, F% K
对于我们的单个ADC通道采样,使用ADC_EOC_SEQ_CONV就可以了;
& b) d/ d% K! g; m( Q8 ]& {+ Q! [3 V$ m对于一组多个进行采样,可以选择单通道转换完成就进入中断ADC_EOC_SEQ_CONV,也可以选择多通道转换完成进入中断ADC_EOC_SINGLE_CONV ;
  E7 k3 p1 J7 U. ]至于最后一个保留值……不小心设置了一下采集出来的数据我直呼看不懂,大家就不用去试了……
6 y) q: ~- ]+ Y6 ]7 _8 w3 @- r& W( H/ U# W( S# Y
在我们的STM32F7实现ADC等周期采集(定时器触发+DMA传输)上进行修改:
& j( K' Q& {3 U; j, I# o
: o8 T) m1 p. W) }NVIC配置

/ d; Q5 Q3 s  w不配置是没办法进行中断向量跳转的,这个不用解释。6 A1 k1 U# ^$ S/ l; I" R- ~- {
) D! Y# z7 I" I6 E- ?
  1.      HAL_NVIC_SetPriority(ADC_IRQn, 1, 0);
    ' y' G( C: V  j7 N
  2.      HAL_NVIC_EnableIRQ(ADC_IRQn);
复制代码
3 o! i- l5 R4 Z8 }) r1 g8 l
配置EOC类型* a' W$ O" }0 {0 F$ `2 A
选择转换结束引发中断的源,就前面讲的两个参数根据自己的需求设置就行了。# `9 c  O) O% o7 _/ m; f. ~+ y  @
; w. g1 @" a, }
  1.         ADC1_Handler.Init.EOCSelection = ADC_EOC_SEQ_CONV;
复制代码
+ K, c1 v" a7 S
使能EOC中断6 r6 S* ~0 J% w5 r- b
在启动ADC之前,我们要打开EOC中断。: l( _0 I% L2 k1 s
6 |& u4 U  d' n  R8 ?
  1.         __HAL_ADC_ENABLE_IT(&ADC1_Handler, ADC_IT_EOC );
复制代码

$ ~4 X  D. R* ]然后编写中断服务函数,一个是自己需要做的事情,另一个就是调用HAL库对应的函数HAL_ADC_IRQHandler清除中断标志等操作。
. @0 `. \1 v4 q6 d$ l" J; O- M. k$ K8 W1 }
  1. void ADC_IRQHandler(void)
    2 q/ r- I0 V6 Z0 s
  2. {
    5 \& l: J4 t2 |! x, o% @
  3.         printf("eoc\r\n");6 h/ A" e, y4 A3 R( W
  4.           HAL_ADC_IRQHandler(&ADC1_Handler);
    , G! N! e7 `6 A* R. K
  5. }
复制代码
: I- i, `4 i5 S0 r, U0 \3 n

# @; ^3 f$ m3 B* S- `$ w. @' o9 y  O$ _& c
& t$ n4 H) t# v) S: }# M
收藏 评论0 发布时间:2021-12-15 11:00

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版