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

stm32f103 PWM捕获TIM_GetCapture1没有数据

[复制链接]
chowalan123 提问时间:2017-3-15 13:02 /
我用TIM2输入捕获,TIM3进行pwm输出,但是进入中断后TIM_GetCapture1接受到的数据为零


贴上我的驱动代码,希望有其他调试的方法可以推荐


#include "time.h"
#include "stm32f10x_tim.h"
#include "usart.h"
#include "delay.h"
TIM_ICInitTypeDef TIM_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
       
NVIC_InitTypeDef NVIC_InitStructure;
u8 DutyCycle = 0;
u8 Frequency = 0;
u8 IC2Value=0;
//定时器2GPIO配置
void TIM2_GPIO_INIT(void)
{
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        //GPIO_InitTypeDef GPIO_InitStructure;
//GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2,DISABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                               //GPIO
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//ÉèÖÃΪ¸¡¿ÕÊäÈ룬ÒÔÃâ¸ÉÈÅ
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}


//定时器2输入捕获配置
void TIM2_ICMODE_INIT(void)
{
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
       
TIM_TimeBaseStructure.TIM_Period=65535;
  TIM_TimeBaseStructure.TIM_Prescaler=3;
  TIM_TimeBaseStructure.TIM_ClockDivision= TIM_CKD_DIV1;
  TIM_TimeBaseStructure.TIM_CounterMode= TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
       
       
       
        //TIM_InitStructure.TIM_ICMode=TIM_ICMode_PWMI;//
        //TIM2->CCER|=0x1;
        //TIM2->CCMR1|=0X0011;
        TIM_ICStructInit(&TIM_InitStructure);
        TIM_InitStructure.TIM_Channel=TIM_Channel_1;
        TIM_InitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;//
        TIM_InitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;//
        TIM_InitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV4;//
        TIM_InitStructure.TIM_ICFilter = 0x0;
        //½á¹¹³õʼ»¯
        TIM_ICInit(TIM2,&TIM_InitStructure);
       
        TIM_SelectInputTrigger(TIM2,TIM_TS_TI2FP2);//
        TIM_SelectSlaveMode(TIM2,TIM_SlaveMode_Reset);
        TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);
        //¸´Î»Ä£Ê½£¬Ñ¡ÖеĴ¥·¢ÊäÈëÉÏÉýÑسõʼ»¯¼ÆÊýÆ÷
        //TIM_SelectInputTrigger(TIM2,TIM_TS_TI2FP2);                    //

   // TIM_SelectSlaveMode(TIM2,TIM_SlaveMode_Reset);
        //ʹÄÜ´Óģʽ
  TIM_Cmd(TIM2, ENABLE);
       
       
        //定时器2中断使能
  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;                     //NVIC
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
       
                                       //??TIM2

  /* Enable the CC2 Interrupt Request */         
  TIM_ITConfig(TIM2,TIM_IT_CC2|TIM_IT_Update,ENABLE);//
}

//定时器2中断函数,占空比,频率计数
void TIM2_IRQHandler(void)
{
        TIM_ClearFlag(TIM2,TIM_FLAG_CC2);
        TIM_ClearITPendingBit(TIM2,TIM_IT_CC2|TIM_IT_Update);
        //|TIM_IT_Update
        //TIM_ClearFlag(TIM2,TIM_FLAG_Update);
        delay_ms(2);

   IC2Value = TIM_GetCapture2(TIM2);
       
        if (IC2Value != 0)
  {
   //DutyCycle = (TIM_GetCapture2(TIM2))*100 / IC2Value;
                //printf("tim2:%d",TIM_GetCapture2(TIM2));
    Frequency = 72000000 / IC2Value;
                DutyCycle = (TIM_GetCapture1(TIM2))*100 / IC2Value;
                delay_ms(2);

   }
  else
   {
   DutyCycle = 0;
   Frequency = 0;
   }
         
}

//定时器3GPIO配置
void TIM3_GPIO_Config(void)
{
       

         //
  //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//| RCC_APB2Periph_GPIOB
        GPIO_InitStructure.GPIO_Pin=  GPIO_Pin_7 ;//|GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;      
  GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
  GPIO_Init(GPIOA,&GPIO_InitStructure);//
}

//定时器3PWM输出配置
void TIM3_OCMODE_INIT(void)
{
       
u16 CCR1_Val= 200;
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
       
        TIM_TimeBaseStructure.TIM_Period= 1000-1;
  TIM_TimeBaseStructure.TIM_Prescaler=7199;//
  TIM_TimeBaseStructure.TIM_ClockDivision=0;// TIM_CKD_DIV1
  TIM_TimeBaseStructure.TIM_CounterMode= TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
       
        //FREQRENCY=int_CLK/((TIM_Period+1)*(TIM_Prescaler+1))
        TIM_OCStructInit(&TIM_OCInitStructure);
        TIM_OCInitStructure.TIM_OCMode= TIM_OCMode_PWM1;
        //TIM_OCInitStructure.TIM_Channel= TIM_Channel_1;
        TIM_OCInitStructure.TIM_Pulse=CCR1_Val;//
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//TIM_OCPolarity_High
        TIM_OC2Init(TIM3,&TIM_OCInitStructure);
       
        //TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
       
        //TIM_ARRPreloadConfig(TIM3, ENABLE);
       
        TIM_Cmd(TIM3,ENABLE);
}


TEST _2.rar

下载

5 MB, 下载次数: 10, 下载积分: ST金币 -1

收藏 1 评论0 发布时间:2017-3-15 13:02

举报

0个回答

所属标签

相似问题

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