OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3391|回复: 1

PWM输入捕捉为何一直没有数据

[复制链接]

20

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2019-1-3
在线时间
44 小时
发表于 2021-12-1 11:07:41 | 显示全部楼层 |阅读模式
我用TIM4的CH2去捕捉PWM波,但总是捕捉不到数据,初始化TIM4_PWMINPUT_INIT(0xffff,71);   //pwm输入初始化以1M的频率捕捉
请帮忙看看哪儿有问题呢

/*功能名称TIM4_PWMINPUT_INIT(u16 arr,u16 psc)
  描述      PWM输入初始化*/
void TIM4_PWMINPUT_INIT(u16 arr,u16 psc)
{

        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        TIM_ICInitTypeDef  TIM4_ICInitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);     //Open TIM4 clock
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //open gpioB clock

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;                               //GPIO??
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOB, &GPIO_InitStructure);

        TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值  
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

       
        /*配置中断优先级*/
        NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;                     
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

        TIM4_ICInitStructure.TIM_Channel = TIM_Channel_2;                  
  TIM4_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;      
  TIM4_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;   
  TIM4_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
        TIM4_ICInitStructure.TIM_ICFilter = 0x0;  
        TIM_PWMIConfig(TIM4, &TIM4_ICInitStructure);     //PWM输入配置   
       
  TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2);     //选择有效的输入端 ,这里TIM_TS_TI2FP2选择的PB7。注意:只有TI1FP1和TI2FP2连到了从模式控制器,所以PWM输入模式只能使用TIMx_CH1 /TIMx_CH2信号。      
  TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset);  //配置为主从复位模式          就是每次输入端有效电平变化的时候定时器计数器就会硬件上置0
  TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable);                                       
  TIM_ITConfig(TIM4, TIM_IT_CC2|TIM_IT_Update, ENABLE);          //中断配置
        TIM_ClearITPendingBit(TIM4, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位
       
        TIM_Cmd(TIM4, ENABLE);   
}

void TIM4_IRQHandler(void)                 //将捕捉到的周期和占空比记录下来
{
        if (TIM_GetITStatus(TIM4, TIM_IT_CC2) != RESET)//捕获1发生捕获事件
        {       
                        IC1Value = TIM_GetCapture1(TIM4);                                 //采集占空比               
                  IC2Value =TIM_GetCapture2(TIM4);               //采集周期
                        DutyCycle = (IC1Value * 100.0) / IC2Value;                //由硬件电路反向决定的

        }
               
        TIM_ClearITPendingBit(TIM4, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

465

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1734
金钱
1734
注册时间
2021-4-11
在线时间
320 小时
发表于 2021-12-1 11:12:13 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-15 04:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表