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

【经验分享】STM32F2定时器1通道1输入捕获

[复制链接]
STMCU小助手 发布时间:2021-12-2 15:45
STM32F2定时器1通道1输入捕获! J/ P" F6 j# b
一、中文手册上的配置步骤
7 S% Y' o1 `3 N6 I& @8 y
20190123153207748.png
+ k2 a/ q! Y$ ^; |% E) E
; {, A0 k, E0 v. x) A
1.1初始化通道对应的IO口
& ]$ E) M8 w, I# N: N, B' y# CGPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//选择通道对应的IO口
0 b! {( ~. u5 K6 H. {5 I' e9 ~; R) d; d
20190123155706930.png
  ]. |' Z* P# q; J  p3 h

, {  c: d7 K$ X: ~( V' P1.2选择输入捕获的通道; b$ z8 |1 Z; Q# ^3 @
InitStructure.TIM_Channel = TIM_Channel_1;" ]- u  i6 g2 O3 t, B
1.3选择有效输入端
' [& Y4 E5 R2 e( i) Q) Y选择有效输入端:TIMx_CCR1必须连接到TI1输入,所以写入TIMx_CCR1寄存器中的4 }) E, O$ e- m  @: T# s
CC1S=01,只要CC1S不为’00’,通道被配置为输入,并且TIMx_CCR1寄存器变为只读7 v' N& a) m2 G' N+ {( \, k; w
注意 CC1S仅在通道关闭时(TIMx_CCER寄存器的CC1E=0)才是可写的,配置之前调用
: \7 V- n5 }, \+ E  T  r$ nvoid TIM_DeInit(TIM_TypeDef* TIMx)即可' S5 C2 Y6 B& a; g3 [. t; V

/ ?1 J6 O, [$ s7 p; S
20190123154658921.png

2 w- X( _2 G1 T/ R) j, r: o5 F. E' S! y
1.3配置滤波器为所需带宽–TIM_ICInitStructure.TIM_ICFilter = 0x00;
# d  ?' ]4 D* k' m9 y0 B根据输入信号的特点,配置输入滤波器为所需的带宽(即输入为TIx时,输入滤波器控制位是4 I. {+ u( p; _+ c  G$ v0 P2 t
TIMx_CCMRx寄存器中的ICxF位)。假设输入信号在最多5个内部时钟周期的时间内抖动,
5 c4 y' M4 x# B1 c4 h% u我们须配置滤波器的带宽长于5个时钟周期;因此我们可以(以f DTS 频率)连续采样8次,以确
: T, b# s* W6 j' B+ G认在TI1上一次真实的边沿变换,即在TIMx_CCMR1寄存器中写入IC1F=0011。& V. v& F! {# i: H$ W7 P
1.4选择有效转换边沿–TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;. `5 L* p& I7 D* C$ C
选择TI1通道的有效转换边沿,在TIMx_CCER寄存器中写入CC1P=0(上升沿)。
& @& ?! l+ E  ^* k9 q/ j1 k% G4 N" f9 [0 A5 i1 ^) r
20190123160231456.png
# ], o$ z- M! v' h3 Z. t5 w  p5 P
; {" }  d0 N- C8 L, g
1.5配置输入预分频器–TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;& X0 h/ U/ Q* y' r; i+ p9 x
在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预# U3 V) A- `% P- x4 H: L
分频器被禁止(写TIMx_CCMR1寄存器的IC1PS=00)。  e0 b/ I5 c8 w. v0 G, f
1.6 TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;2 W& @, _" X2 j. S6 K
TIM_ICSelection_DirectTI -->TI1,TI2,TI3,TI4 对应IC1,IC2,IC3,IC4;) S6 S1 I# M0 L$ ^4 A
TIM_ICSelection_IndirectTI–>TI1,TI2,TI3,TI4 对应IC2,IC1,IC4,IC3;& m& B1 D5 |5 J% T) t. K2 l' X

: n5 @( z  E# o" y
! f! F1 L% E. p7 K6 }) p8 h
20190123160654637.png
' H% {" ]. H" k2 S3 k/ d2 v
# t9 W) S3 @; B$ p5 i! v4 n
2.1完整代码( d( W6 ^5 O9 T; c; |0 a2 O; R
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);( D3 X( I* s( I' E, _1 q8 Z
  2. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); 5 M$ `+ K1 ?7 g& S! u) E% K
  3. GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_10;//根据通道所对应的IO口修改' {% x, e. t! V: i. g8 O5 [, O
  4. GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
    ! ~/ o% w, O6 I7 R) `1 M
  5. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    - n# w( N) C9 Z
  6. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;0 B) I+ W* X3 k* B% B1 k/ p1 i% |$ c# y
  7. GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP ;9 L* U$ w+ [! C2 @* a) v! q1 C
  8. GPIO_Init(GPIOA, &GPIO_InitStructure);  
    ! e/ P# P: p/ A0 a3 H. m5 ]! O- \, ~
  9. GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_TIM1);( z6 \5 _: H7 \$ A
  10. 3 h! ?8 }& s/ @
  11. TIM_ICInitStructure.TIM_Channel = TIM_Channel_3;3 B8 J3 U3 n, L9 {( f
  12. TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;//TIM_Input_Capture_Polarity
    : T* f) Z- Q% ]1 r. _- W0 o
  13. TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//TIM_Input_Capture_Selection
    ( `2 ?1 j" Z# j; C2 j1 F- t8 _( \
  14. TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
    + K* z, S7 t2 Y+ n
  15. TIM_ICInitStructure.TIM_ICFilter = 0x00;
    ' d3 @( B' O: c' w+ g" B
  16. TIM_ICInit(TIM1, &TIM_ICInitStructure);
    / }  Z& M" ^0 n1 Q3 W1 q9 s; z

  17. 4 d+ W4 k2 y9 E0 N9 O
  18. NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;
    6 i% u( _/ y) k4 y
  19. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;; u4 V7 U! g" @. T/ r# v0 @
  20. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    7 Q0 s% I$ Y/ i2 d
  21. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;( }! W& c0 g5 t4 N/ R4 L  d0 \
  22. NVIC_Init(&NVIC_InitStructure);
复制代码
# {" U! D6 [( c& d$ h5 i5 g
3.1输入捕获启动DMA传输配置
  1.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 , ENABLE);, R, L" V2 f( n2 ~' x7 G. t
  2.         DMA_DeInit(DMA2_Stream6);
    * D0 [4 v9 u1 \0 d, Q' S& D
  3.         DMA_InitStructure.DMA_Channel = DMA_Channel_6;  % q) S% Z9 [$ N3 l" D( J
  4.         DMA_InitStructure.DMA_PeripheralBaseAddr =(uint32_t) GPIOD->IDR;
    " E. I- m% M2 [) k7 P
  5.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)DEF_Buffer;* J* p' k& W4 f: z! d! C8 r) y
  6.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;0 Q+ x: J4 L6 v5 G' Y+ m+ w
  7.         DMA_InitStructure.DMA_BufferSize = 40000;
    0 k  P  c( O4 o' L, p0 v9 F' u! t& G+ J
  8.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;2 e' L9 t$ X. g- M! l9 @* E
  9.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;% X1 D/ A+ W! c7 a3 {" H
  10.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    : ?0 O! U1 C# _  f8 n1 n
  11.         DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Byte;: D2 I2 Y! F6 C6 T
  12.         DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
    , Q" {8 f# M; @
  13.         DMA_InitStructure.DMA_Priority = DMA_Priority_High;
    # L  ]% f6 p& r9 V& w# j7 o
  14.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;$ b2 l, b/ O2 q6 T9 E* z. m
  15.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
    " [6 e0 L5 w3 J  D# p+ H: e& R
  16.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    # V) b/ Y+ \; v' y
  17.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;. u7 i- C7 J# F2 H* v% y( I
  18.         DMA_Init(DMA2_Stream6, &DMA_InitStructure);
复制代码

* _, `, ^( ^; |4 @' `6 A6 a3.2启动传输
7 E1 f; K0 x8 h8 y) w
  1.         TIM_DMAConfig(TIM1, TIM_DMABase_CCR1, TIM_DMABurstLength_1Transfer);/ g$ |8 J8 z. ]5 i2 y' S  ]
  2.         TIM_DMACmd(TIM1, TIM_DMA_CC1, ENABLE);* |$ _. j/ w  c) c6 B8 ~
  3.         
    ; ^4 L5 W+ K. \: U3 n  q
  4.         /* Enable the CC2 Interrupt Request */
    4 M% j$ d/ E9 @2 u
  5.         TIM_ITConfig(TIM1, TIM_IT_CC1, ENABLE);
    9 V! T% {3 o( \
  6.         /* TIM enable counter */- F3 w7 R3 I! i. Z
  7.         TIM_Cmd(TIM1, ENABLE);- h- Z/ m9 c3 a6 a; d" ?
  8.         DMA_Cmd(DMA2_Stream6, ENABLE);
    ( k$ S1 Q( M8 \) Y, x2 Y
复制代码

5 C3 h& F1 n# Z  p; T, W  s1 |( s& b! w1 J
: O6 C, |) b# Y5 r. R8 S
赞 收藏 评论0 发布时间:2021-12-2 15:45

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版