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

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

[复制链接]
STMCU小助手 发布时间:2021-12-2 15:45
STM32F2定时器1通道1输入捕获& b/ [' X1 Y# K8 V3 b6 w8 e
一、中文手册上的配置步骤
+ O+ I* [# y/ `2 W+ H9 f
20190123153207748.png
- m6 e# P; u: @( z3 `& o1 ^1 i4 }
) [. g2 s: ^' I+ X
1.1初始化通道对应的IO口
. `  |' u& u1 g7 {GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//选择通道对应的IO口) r2 z% c6 F7 c. D1 j1 C

8 J7 t, M# G9 i  s3 S9 _
20190123155706930.png
, x( n) b$ B$ T$ V1 {2 W$ g/ K

! R* \0 r2 i$ n% y1.2选择输入捕获的通道" @: D! [8 h2 i6 E
InitStructure.TIM_Channel = TIM_Channel_1;2 H. G" G& O& W! o7 o: r1 h
1.3选择有效输入端
9 n- S0 o8 O( L6 d% ]选择有效输入端:TIMx_CCR1必须连接到TI1输入,所以写入TIMx_CCR1寄存器中的, {9 w8 P# l+ _0 B
CC1S=01,只要CC1S不为’00’,通道被配置为输入,并且TIMx_CCR1寄存器变为只读
( k0 @1 S9 g5 y2 \+ Y! R注意 CC1S仅在通道关闭时(TIMx_CCER寄存器的CC1E=0)才是可写的,配置之前调用3 F% ]/ q% O3 T  m5 \
void TIM_DeInit(TIM_TypeDef* TIMx)即可
! X! C3 K9 @! ~; g. t9 m) ]  n4 T+ l% M' a5 F7 |0 m1 v
20190123154658921.png

; F- M' _9 P# j8 o
! k# Q- d9 Q4 Z8 ]* ^* C1 V1.3配置滤波器为所需带宽–TIM_ICInitStructure.TIM_ICFilter = 0x00;
; @. Z% Y1 O' m5 s9 p根据输入信号的特点,配置输入滤波器为所需的带宽(即输入为TIx时,输入滤波器控制位是% o2 a# U5 U5 E8 z9 T7 @2 K
TIMx_CCMRx寄存器中的ICxF位)。假设输入信号在最多5个内部时钟周期的时间内抖动,
  e' p' k! @) A* ^0 Q4 S- X7 B# Q我们须配置滤波器的带宽长于5个时钟周期;因此我们可以(以f DTS 频率)连续采样8次,以确
- Y  ?. q: O, a: o6 }认在TI1上一次真实的边沿变换,即在TIMx_CCMR1寄存器中写入IC1F=0011。6 m: B7 k1 @' s1 q" s, T( L/ e
1.4选择有效转换边沿–TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
/ e% _8 p  p# b9 n. o1 E/ a* s选择TI1通道的有效转换边沿,在TIMx_CCER寄存器中写入CC1P=0(上升沿)。; A. x4 D! b+ ?4 P  K
, _: I8 c, q7 j7 T. ~1 Q( K
20190123160231456.png

  R" e3 }: }/ l
; f1 d* _! f  B6 Y* P: d1.5配置输入预分频器–TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
8 q* D/ B5 D8 \. a" u在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预
( z; L& g. {' v! g4 L& [6 n分频器被禁止(写TIMx_CCMR1寄存器的IC1PS=00)。# m% m1 _6 r: Q& D% v) i" d
1.6 TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
8 j. Z# {6 G" v( l+ CTIM_ICSelection_DirectTI -->TI1,TI2,TI3,TI4 对应IC1,IC2,IC3,IC4;
. w9 V( i; J# X1 g" k7 j7 M. VTIM_ICSelection_IndirectTI–>TI1,TI2,TI3,TI4 对应IC2,IC1,IC4,IC3;
+ S6 _2 A7 d, r. g  Q; u+ R8 I: {4 e& K1 U
  e+ l) \6 u& K1 S1 H
20190123160654637.png
  e8 ^. ~" F0 ]

% l  E+ e9 }9 p* K1 \5 ?2.1完整代码
2 ~2 ~0 p& N6 m1 [
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
    + P  s$ h8 ]0 w3 R% k
  2. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); , y* s7 {0 L; z% S
  3. GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_10;//根据通道所对应的IO口修改
    & U0 g+ u4 M' U3 o; C8 P
  4. GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;; z) |7 B4 |6 F- a5 Z
  5. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;6 r3 U5 n( r' p2 v( [
  6. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;; A# g; |: E' w: {& O0 v! X) V
  7. GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP ;! w2 Q$ Y* }) Q0 F3 J1 n$ B: y
  8. GPIO_Init(GPIOA, &GPIO_InitStructure);  
    # ~& i8 ?1 ~9 H
  9. GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_TIM1);2 T# H$ l+ V- @) E2 E: h5 c5 e

  10. - E) _6 t6 }% B+ u% ?8 O8 B
  11. TIM_ICInitStructure.TIM_Channel = TIM_Channel_3;
    / M( E. y; n# B0 u6 f+ ]' o
  12. TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;//TIM_Input_Capture_Polarity
    + V0 q" W! U! I0 Y; \% ?
  13. TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//TIM_Input_Capture_Selection
    3 y( R0 A& N* j! j/ y
  14. TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;5 K1 \* j' Z5 f' f9 Y
  15. TIM_ICInitStructure.TIM_ICFilter = 0x00;
    " D/ I4 Z8 k9 n( b; Y) c+ a
  16. TIM_ICInit(TIM1, &TIM_ICInitStructure);
    * v$ \. Z3 K6 z" t1 g' H0 y
  17. ( L3 g+ K7 K: ]" ~$ o
  18. NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;& q& ]) m& S4 J9 p, C7 H! s
  19. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;% g& [+ u" O/ S! m/ w+ C" c
  20. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;3 k3 T9 M- x2 d) N' f& E6 H( @* Q
  21. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;9 T) z6 \/ L: H- E$ s1 x
  22. NVIC_Init(&NVIC_InitStructure);
复制代码

3 A; P4 U: x& A' _  B. n' r$ E' w3.1输入捕获启动DMA传输配置
  1.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 , ENABLE);: W( i+ R1 R4 w9 n  U/ }( {2 A
  2.         DMA_DeInit(DMA2_Stream6);
    3 G5 E1 f- P* h7 Z# y
  3.         DMA_InitStructure.DMA_Channel = DMA_Channel_6;  ) R, K8 K. W1 v) [3 o4 J/ ~. z
  4.         DMA_InitStructure.DMA_PeripheralBaseAddr =(uint32_t) GPIOD->IDR;
    & v' L, |+ r2 ?; H4 @5 [' ~1 Q
  5.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)DEF_Buffer;
    ) w, i, D/ e7 m) t
  6.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
    : k: S$ S2 F( j2 u" n
  7.         DMA_InitStructure.DMA_BufferSize = 40000;4 J# P! Q2 X( T
  8.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    ( W) L9 X: h0 H4 v5 ~$ F4 \
  9.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;/ q) L  J7 s, h1 v9 y
  10.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    8 H' e! k' N  w/ C: E0 o  p
  11.         DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Byte;3 o% ^* x) G% U& |1 Y
  12.         DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;+ f+ s  V* d7 Y3 I6 S
  13.         DMA_InitStructure.DMA_Priority = DMA_Priority_High;) m% U2 }: e9 E3 K  B4 n
  14.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;* M9 g8 v9 }) L8 l1 B
  15.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;1 y1 b3 W$ i. \( O- {& {) u
  16.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;; [& M, I9 c6 S5 ~$ |
  17.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;. m5 v# S: A7 c6 j& |( K; F6 k# V
  18.         DMA_Init(DMA2_Stream6, &DMA_InitStructure);
复制代码
  I+ ]8 Y* S$ |3 _
3.2启动传输
( c5 k3 l, F0 v9 Y; {7 U' z
  1.         TIM_DMAConfig(TIM1, TIM_DMABase_CCR1, TIM_DMABurstLength_1Transfer);
    & Z4 T6 S" @0 ?
  2.         TIM_DMACmd(TIM1, TIM_DMA_CC1, ENABLE);2 G% f+ ?6 V' i8 y. @) A
  3.         
    " {0 K' Y0 Z7 W& k8 f/ \8 i
  4.         /* Enable the CC2 Interrupt Request */
    8 I: ^: N# l1 l
  5.         TIM_ITConfig(TIM1, TIM_IT_CC1, ENABLE);
    : N3 W& L4 c' N; D5 L
  6.         /* TIM enable counter */, ^$ f. f& J4 k  R+ x% d
  7.         TIM_Cmd(TIM1, ENABLE);3 V/ f8 H9 Q+ m! O
  8.         DMA_Cmd(DMA2_Stream6, ENABLE);
    4 q: A& x! e4 G- R9 ^
复制代码
) Q1 Q1 `$ N" j+ Q. i* {" J( x& l

: h. x2 ]4 b2 K) `5 F3 r
# S: F0 @$ Z* k+ j  g- y
赞 收藏 评论0 发布时间:2021-12-2 15:45

举报

0个回答

所属标签

相似技术帖

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