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

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

[复制链接]
STMCU小助手 发布时间:2021-12-2 15:45
STM32F2定时器1通道1输入捕获
- Q1 @1 j/ a) @5 i一、中文手册上的配置步骤
9 p/ i5 Q- }  f; d+ y5 F) _
20190123153207748.png
4 a0 i; S; ?6 O* l
+ y- g9 o  o* E6 g9 U; j' L
1.1初始化通道对应的IO口
4 {: I) @2 D% K0 qGPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//选择通道对应的IO口/ H9 K  i3 u( e6 z" n

+ D  P+ ?/ @0 K5 i& p' \
20190123155706930.png

2 ], `3 C/ F" A9 I- L2 f$ t1 o0 H
1.2选择输入捕获的通道" ?* D. w* X$ I2 Y& r/ ^4 m
InitStructure.TIM_Channel = TIM_Channel_1;
/ r) A' b$ l, h" J$ Q# K& R1.3选择有效输入端* _3 G7 f% b' a* S" ~4 d( R7 [
选择有效输入端:TIMx_CCR1必须连接到TI1输入,所以写入TIMx_CCR1寄存器中的
) r  z0 \! A% v" dCC1S=01,只要CC1S不为’00’,通道被配置为输入,并且TIMx_CCR1寄存器变为只读
* i! F9 }/ o( @4 C注意 CC1S仅在通道关闭时(TIMx_CCER寄存器的CC1E=0)才是可写的,配置之前调用
1 a9 m0 v3 m5 D/ p4 N+ ]void TIM_DeInit(TIM_TypeDef* TIMx)即可7 Q9 V6 R# @5 z  g! L, O* J
% N9 z* o1 f) g+ {
20190123154658921.png

& h5 C8 e, q6 J
' ]. A! {1 G0 V! T1.3配置滤波器为所需带宽–TIM_ICInitStructure.TIM_ICFilter = 0x00;
  u9 A  i. M2 Q8 M  o; l根据输入信号的特点,配置输入滤波器为所需的带宽(即输入为TIx时,输入滤波器控制位是, o6 j6 i+ [* ]' Q. a
TIMx_CCMRx寄存器中的ICxF位)。假设输入信号在最多5个内部时钟周期的时间内抖动,
5 M9 w; j$ V& t% e" Z% l8 I我们须配置滤波器的带宽长于5个时钟周期;因此我们可以(以f DTS 频率)连续采样8次,以确3 @2 f. ~; b1 |: L- y* S: T
认在TI1上一次真实的边沿变换,即在TIMx_CCMR1寄存器中写入IC1F=0011。5 E3 ?0 j  P4 Y& u) r5 ?/ \
1.4选择有效转换边沿–TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;2 y! N- X! b4 x( ~4 F9 K- Q
选择TI1通道的有效转换边沿,在TIMx_CCER寄存器中写入CC1P=0(上升沿)。. [& C7 h" h: p$ w

3 I3 Z: N6 f; q, i; g# \  U* N
20190123160231456.png

. H9 `7 X% r7 S: e( l
* x3 b9 _9 ^6 m; l- K/ D2 o3 ]1.5配置输入预分频器–TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  F) k9 _, m& C" f& Y在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预, j  |7 }  W/ ?
分频器被禁止(写TIMx_CCMR1寄存器的IC1PS=00)。$ g- j& y# F! p
1.6 TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
- B1 x9 a) R0 _( P; CTIM_ICSelection_DirectTI -->TI1,TI2,TI3,TI4 对应IC1,IC2,IC3,IC4;
: F6 m8 W( E7 B. m8 DTIM_ICSelection_IndirectTI–>TI1,TI2,TI3,TI4 对应IC2,IC1,IC4,IC3;
2 S* ^& L* Q. N$ `3 {: A
6 J: J0 X  R, K/ F. v/ k1 I
6 n: \  A7 {7 g$ L; A0 f
20190123160654637.png
$ ?- I' |, M0 p: K& e

1 X' c9 N: i, J  Q$ D& C, l5 ^4 w2.1完整代码
9 d& ]6 }: I- h& ^; o
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
    6 M8 w- x+ ?6 |: ?6 Z. Q
  2. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); ( s& a& w  l9 g' f
  3. GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_10;//根据通道所对应的IO口修改' q5 L8 V' I9 x7 u8 w
  4. GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;4 s8 E( I. N+ K" c# D2 l- L
  5. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    7 n9 q/ \0 ?6 X% S7 |
  6. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;& x, {& x  e" t$ P
  7. GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP ;
    # R) t9 R+ H5 O" e
  8. GPIO_Init(GPIOA, &GPIO_InitStructure);  
    ! D2 w% X# z9 K% p' t' \, v8 d
  9. GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_TIM1);4 v( B1 a& z7 b
  10.   w; _1 A6 A% I% h$ C% C; H
  11. TIM_ICInitStructure.TIM_Channel = TIM_Channel_3;. z; M% Z% I* R% D5 `3 @8 N' x. _: n
  12. TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;//TIM_Input_Capture_Polarity
    : u1 t- v3 I: {' L$ O! d
  13. TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//TIM_Input_Capture_Selection
    ' q2 g% M) A4 e- @+ F9 h
  14. TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
    4 D( \! s7 F) w  E0 ^7 H3 a% q
  15. TIM_ICInitStructure.TIM_ICFilter = 0x00;
    ! j5 H: v$ n" R) D8 l9 f
  16. TIM_ICInit(TIM1, &TIM_ICInitStructure);. e, a. K$ v# y+ v
  17. ! I  T0 O: q0 x& S& ~! H
  18. NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;4 P; R. L, _+ z* U" Q/ ]  }! {
  19. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;& ]* t, i; i) ]3 e
  20. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;: N" K' I, K9 ~; C. W
  21. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;1 e0 h2 n+ h* r8 E% [
  22. NVIC_Init(&NVIC_InitStructure);
复制代码
' ]8 w4 _, o8 ~6 E# m3 {
3.1输入捕获启动DMA传输配置
  1.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 , ENABLE);
    : u( r( _" ^1 ]8 F, G$ C
  2.         DMA_DeInit(DMA2_Stream6);
    ) D) g' x+ Y% ]2 A
  3.         DMA_InitStructure.DMA_Channel = DMA_Channel_6;  
    7 N5 u# ]0 `, Z1 C$ ]( _
  4.         DMA_InitStructure.DMA_PeripheralBaseAddr =(uint32_t) GPIOD->IDR;. `5 |. F+ t% v3 m' l/ D. O5 }
  5.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)DEF_Buffer;
    6 ?4 m5 O  G' t; ?% B  V0 D$ h
  6.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
    7 A* o4 v: M. m4 r- Q
  7.         DMA_InitStructure.DMA_BufferSize = 40000;; |( q# }# n, V& i& W0 S  K
  8.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    8 s1 A  T' [, P
  9.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;/ _) z7 l& L. k& t" A0 S
  10.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;5 O4 |( S* A/ @1 K8 n) D
  11.         DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Byte;" X2 B7 _# H  _( V! D) }; u0 n
  12.         DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
    " ?4 f3 q5 J( z$ @
  13.         DMA_InitStructure.DMA_Priority = DMA_Priority_High;
    ) l( c8 L! Z# h+ C+ m! m: H
  14.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;1 S# }% @; W2 d
  15.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
    ( B& z* p. {9 H- k
  16.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;% n+ k2 z, F: b' X! r
  17.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;4 w4 j5 K) Z* u1 ]) |7 Q$ \
  18.         DMA_Init(DMA2_Stream6, &DMA_InitStructure);
复制代码

- d! u3 A9 c' O9 \9 r) M; e3 ]3.2启动传输3 R; f( J! W" `8 h
  1.         TIM_DMAConfig(TIM1, TIM_DMABase_CCR1, TIM_DMABurstLength_1Transfer);
    7 ]1 S- A" F( F/ L! H
  2.         TIM_DMACmd(TIM1, TIM_DMA_CC1, ENABLE);
    1 t# c9 Q6 n3 t) r
  3.         
    5 _$ E2 S( X+ B
  4.         /* Enable the CC2 Interrupt Request */
    : D: A! e. o1 ]$ t8 F
  5.         TIM_ITConfig(TIM1, TIM_IT_CC1, ENABLE);( K9 R9 q8 F" j/ w8 @
  6.         /* TIM enable counter */
    3 k4 c3 f% d! ]5 G6 J+ t9 x4 [
  7.         TIM_Cmd(TIM1, ENABLE);
    7 R8 {4 |1 b& c  p$ d
  8.         DMA_Cmd(DMA2_Stream6, ENABLE);
    % ~1 l2 O6 \8 r' [
复制代码
3 U+ O% q& e4 Q% a

% q1 b# j: S" R) G' y; O) Q) b' H$ n0 F
收藏 评论0 发布时间:2021-12-2 15:45

举报

0个回答

所属标签

相似技术帖

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