打印

STM32定时器捕获

[复制链接]
1471|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuluyiyi|  楼主 | 2012-7-18 11:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yuluyiyi 于 2012-7-20 10:10 编辑

想用1个普通定时器实现3路PWM信号检测可行么?
void  TIM4_Config(void)
{
  TIM_ICInitTypeDef  TIM_ICInitStructure;
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_TimeBaseStructure.TIM_Prescaler = 999;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseStructure.TIM_Period = 0xffff;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;

  TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
  TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  TIM_ICInitStructure.TIM_ICFilter = 0x0;
  TIM_ICInit(TIM4, &TIM_ICInitStructure);
  TIM_ICInitStructure.TIM_Channel = TIM_Channel_3;
  TIM_ICInit(TIM4, &TIM_ICInitStructure);
  TIM_ICInitStructure.TIM_Channel = TIM_Channel_4;
  TIM_ICInit(TIM4, &TIM_ICInitStructure);
  
  /* TIM enable counter */
  TIM_Cmd(TIM4, ENABLE);
  /* Enable the CC2 Interrupt Request */
  TIM_ITConfig(TIM4, TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4, ENABLE);
}
沙发
zh5202| | 2012-7-18 14:12 | 只看该作者
应该不行

使用特权

评论回复
板凳
yuluyiyi|  楼主 | 2012-7-18 14:51 | 只看该作者
那可以用普通的I/O模拟么 2# zh5202

使用特权

评论回复
地板
figo20042005| | 2012-7-18 15:50 | 只看该作者
普通口可以模拟,就是精度不高

使用特权

评论回复
5
yuluyiyi|  楼主 | 2012-7-18 16:00 | 只看该作者
用输入捕获加中断的形式应该可以实现,就是不知道如何实现捕获上升沿到下降沿的切换…… 4# figo20042005

使用特权

评论回复
6
figo20042005| | 2012-7-18 16:08 | 只看该作者
用外部中断处理,上升沿时进中断置标志捕获,再改变外部中断方式为下降沿,下次外部中断捕获就结束。如果够快,也可以查询

使用特权

评论回复
7
yuluyiyi|  楼主 | 2012-7-18 16:31 | 只看该作者
本帖最后由 yuluyiyi 于 2012-7-18 16:45 编辑

是在捕获中断中将上升沿改为下降沿么,有点迷糊……:L
void TIM4_IRQHandler(void)
{
  if(TIM_GetITStatus(TIM4, TIM_IT_CC2) == SET)
  {
    /* Clear TIM3 Capture compare interrupt pending bit */
    TIM_ClearITPendingBit(TIM4, TIM_IT_CC2);
    if(CaptureNumber == 0)
    {
      /* Get the Input Capture value */
      IC3ReadValue1 = TIM_GetCapture2(TIM4);
      CaptureNumber = 1;
    }
    else if(CaptureNumber == 1)
    {
      /* Get the Input Capture value */
      IC3ReadValue2 = TIM_GetCapture2(TIM4);
      
      /* Capture computation */
      if (IC3ReadValue2 > IC3ReadValue1)
      {
        Capture = (IC3ReadValue2 - IC3ReadValue1);
      }
      else
      {
        Capture = ((0xFFFF - IC3ReadValue1) + IC3ReadValue2);
      }
      /* Frequency computation */
      TIM3Freq = (uint32_t) 72000/ Capture;
      CaptureNumber = 0;
    }
  }在这个中断里如何改才能把上升沿捕获改成下降沿呢
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

72

帖子

0

粉丝