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

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

[复制链接]
STMCU小助手 发布时间:2021-12-2 15:45
STM32F2定时器1通道1输入捕获
4 B7 d0 S- [. j. w' Z" j' H2 S6 A一、中文手册上的配置步骤
! f# @$ H6 v6 G" R3 A( l
20190123153207748.png

, [+ ^. Y1 U1 g- f' T4 ~
1 t& u$ X; h9 O5 J0 [0 j0 {  [# ~1.1初始化通道对应的IO口
; o4 u) M2 N  B9 CGPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//选择通道对应的IO口$ B% v* @$ C% d( A& W  Z

7 ]+ N7 A7 p! a" c: i
20190123155706930.png
6 z, q1 Q  A+ k2 a

) h! a4 R; n) ^; p1.2选择输入捕获的通道
7 ^* T6 z( [3 y* f7 X8 i; O: GInitStructure.TIM_Channel = TIM_Channel_1;
2 V; I( N* f- @) o2 b1.3选择有效输入端
* F( t3 s% X- {; t选择有效输入端:TIMx_CCR1必须连接到TI1输入,所以写入TIMx_CCR1寄存器中的- T3 d& L2 f3 h1 w
CC1S=01,只要CC1S不为’00’,通道被配置为输入,并且TIMx_CCR1寄存器变为只读
8 i5 ^$ k1 d; F0 F3 S5 r6 h0 |# z注意 CC1S仅在通道关闭时(TIMx_CCER寄存器的CC1E=0)才是可写的,配置之前调用
5 Z* ]2 h% o5 o4 R' Zvoid TIM_DeInit(TIM_TypeDef* TIMx)即可8 h( R$ f! V9 d* v' l  \4 F# F' K0 b
8 h* M4 s' |" c& S/ v/ p* Z  i
20190123154658921.png

1 h, z7 X0 M" L% u3 {( Q
# |  u$ f: k7 t. o/ I% s# s' [1.3配置滤波器为所需带宽–TIM_ICInitStructure.TIM_ICFilter = 0x00;5 |7 m7 _# l( r. u
根据输入信号的特点,配置输入滤波器为所需的带宽(即输入为TIx时,输入滤波器控制位是
+ g" O3 G: t" T7 W7 m$ ~% ^) @TIMx_CCMRx寄存器中的ICxF位)。假设输入信号在最多5个内部时钟周期的时间内抖动,7 T) m5 K( S( n2 i1 g6 [' g9 A
我们须配置滤波器的带宽长于5个时钟周期;因此我们可以(以f DTS 频率)连续采样8次,以确3 @3 N& u. I) D- q1 n
认在TI1上一次真实的边沿变换,即在TIMx_CCMR1寄存器中写入IC1F=0011。* R. t& g% ~" H/ R$ G
1.4选择有效转换边沿–TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
" G* s0 c2 o0 u& c4 b% @选择TI1通道的有效转换边沿,在TIMx_CCER寄存器中写入CC1P=0(上升沿)。" u) s% S5 Q+ F  d
8 n8 R- p9 N, Z6 W* ]
20190123160231456.png
0 N2 R$ N) Z! u/ E9 y
: _# \8 ?% L5 f2 `, n. Y, u
1.5配置输入预分频器–TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;. z5 D$ K: M+ U2 w+ B  O9 x
在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预* S/ }  K# X. i* d2 r3 o
分频器被禁止(写TIMx_CCMR1寄存器的IC1PS=00)。
6 V# J& k3 O0 k: j8 L) w0 U1.6 TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
3 J* s5 v$ ~: j& V" WTIM_ICSelection_DirectTI -->TI1,TI2,TI3,TI4 对应IC1,IC2,IC3,IC4;
0 d% {; U2 ?$ l/ G' e* {+ o2 tTIM_ICSelection_IndirectTI–>TI1,TI2,TI3,TI4 对应IC2,IC1,IC4,IC3;% L' r5 j( I9 w! U! l6 k( {
$ |& \5 j2 d3 @+ l# x, |

* f' D/ z' [" N+ w; q$ A
20190123160654637.png

) Z5 e7 m" p+ y/ }+ \: t+ s- q* ]7 ]+ C3 r7 S  @  J  b1 w* @5 b) M; m  i
2.1完整代码
9 M! q  O+ o( v+ j2 {
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
    8 k/ V9 ^% J# e- s
  2. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
    ) o4 d4 I5 V% S# X& N
  3. GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_10;//根据通道所对应的IO口修改
    $ A7 q( p4 w- B7 A
  4. GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;) Q( z( T. r5 ^; W( A; P  t) C6 j+ F
  5. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;. v# a6 [6 ]% q( }1 U) o/ K* w
  6. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    - P1 {' }0 z1 T# _1 |+ w( ~! K
  7. GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP ;
    + O' c' ^$ K3 o' D+ O
  8. GPIO_Init(GPIOA, &GPIO_InitStructure);  2 V. M4 H8 y& L4 `
  9. GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_TIM1);
    ) Z& P6 c+ ?: `5 V5 c: ~. b9 p. N: W

  10.   }  }$ P+ q0 D8 [) Q
  11. TIM_ICInitStructure.TIM_Channel = TIM_Channel_3;
    2 O% r. z) ^8 v7 f: }
  12. TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;//TIM_Input_Capture_Polarity 6 A3 A/ t6 `& Q: e- p
  13. TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//TIM_Input_Capture_Selection" i( T  P. t" ^
  14. TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;( f, v( M0 `) b/ Y
  15. TIM_ICInitStructure.TIM_ICFilter = 0x00;
    . g9 K) _9 T, {
  16. TIM_ICInit(TIM1, &TIM_ICInitStructure);
    8 j! I7 O" `. p* }! s

  17. $ N+ u) M7 G3 N8 ~
  18. NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;3 W: L4 K* V0 `, ?
  19. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    : P4 O; r: `4 N0 P, B
  20. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;7 r( A9 J9 q8 r2 v" l
  21. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    - E. f. Z5 z$ a9 h
  22. NVIC_Init(&NVIC_InitStructure);
复制代码

+ @* @8 B% D- z  n3 Y, T3.1输入捕获启动DMA传输配置
  1.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 , ENABLE);$ A# {" H0 h2 T# I$ z
  2.         DMA_DeInit(DMA2_Stream6);2 W; @. t4 j5 r4 I# N* s1 Y% e
  3.         DMA_InitStructure.DMA_Channel = DMA_Channel_6;  : k: r1 \4 F  @) c& g/ }/ Z  E6 s
  4.         DMA_InitStructure.DMA_PeripheralBaseAddr =(uint32_t) GPIOD->IDR;
    & n" r2 B( B+ I2 C' `' X
  5.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)DEF_Buffer;$ E% Q. u( n7 g6 u
  6.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
    % ?7 k9 A3 G) o# c! G/ h
  7.         DMA_InitStructure.DMA_BufferSize = 40000;/ u$ `. X( m; |" S* {! f
  8.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;! K8 I0 h! V) Q9 Z  g. j
  9.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;* x7 `8 Q/ J4 H' h
  10.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    ; O3 X) h0 A- R( K+ `% e1 X' u
  11.         DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Byte;, o/ ~; ~; O( y6 \" ?- S
  12.         DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;; r; Q3 [! z  L0 \! ?: o5 J$ }
  13.         DMA_InitStructure.DMA_Priority = DMA_Priority_High;% u/ e6 j- q* H/ S% N' W# `6 J1 H1 [
  14.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;3 \7 `: D8 h9 A7 u: f% l  ^* s, ~
  15.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
    # {7 l. L) s( T! P6 e
  16.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;$ [9 M% Z# `3 B* D- d
  17.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;, I$ s, P( A; A8 ]9 E3 E& A0 j
  18.         DMA_Init(DMA2_Stream6, &DMA_InitStructure);
复制代码

! J, c- v1 T5 t2 }5 i, e# ^# [3.2启动传输! T! ?5 ~5 V* `; ^; t
  1.         TIM_DMAConfig(TIM1, TIM_DMABase_CCR1, TIM_DMABurstLength_1Transfer);8 ]. q3 F5 f0 a3 ]* T1 L' N
  2.         TIM_DMACmd(TIM1, TIM_DMA_CC1, ENABLE);" f. l" j/ \! o9 b# g& H
  3.         ( m$ i7 T  j4 V$ O' f0 f& P
  4.         /* Enable the CC2 Interrupt Request */
    7 Y+ C+ r) T/ w+ X% U3 G$ N) U
  5.         TIM_ITConfig(TIM1, TIM_IT_CC1, ENABLE);
    . Z. P" l' R& x5 _
  6.         /* TIM enable counter */& c+ j5 t& H$ Y
  7.         TIM_Cmd(TIM1, ENABLE);
    3 S0 n6 u2 {- j7 D6 o" _6 i
  8.         DMA_Cmd(DMA2_Stream6, ENABLE);+ \) q' P7 y9 v6 O/ r
复制代码
5 n1 ^% e" B2 r7 O$ T) ?+ y

- T/ y7 b, ^; N
8 Z) I# g( B* j3 p
收藏 评论0 发布时间:2021-12-2 15:45

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版