STM32小白必看!一招教你定时器捕获PWM脉冲频率 |
您所在的位置:网站首页 › stm32pwm输入捕获 › STM32小白必看!一招教你定时器捕获PWM脉冲频率 |
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //NVIC配置 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); 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; //输入预分频。意思是控制在多少个输入周期做一次捕获,如果 //输入的信号频率没有变,测得的周期也不会变。比如选择4分频,则每四个输入周期才做一次捕获,这样在输入信号变化不频繁的情况下, //可以减少软件被不断中断的次数。 TIM_ICInitStructure.TIM_ICFilter = 0x0; //滤波设置,经历几个周期跳变认定波形稳定0x0~0xF TIM_PWMIConfig(TIM3, &TIM_ICInitStructure); //根据参数配置TIM外设信息 TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2); //选择IC2为始终触发源 TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);//TIM从模式:触发信号的上升沿重新初始化计数器和触发寄存器的更新事件 TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable); //启动定时器的被动触发 TIM_Cmd(TIM3, ENABLE); //启动TIM2 TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE); //打开中断 中断处理函数 void TIM3_IRQHandler(void) { TIM_ClearITPendingBit(TIM3, TIM_IT_CC2); //清楚TIM的中断待处理位 IC2Value = TIM_GetCapture2(TIM3); //读取IC2捕获寄存器的值,即为PWM周期的计数值 if (IC2Value != 0) { DutyCycle = (TIM_GetCapture1(TIM3) * 100) / IC2Value; //读取IC1捕获寄存器的值,并计算占空比 Frequency = 72000000 / IC2Value; //计算PWM频率。 } else { DutyCycle = 0; Frequency = 0; } } 注(一):若想改变测量的PWM频率范围,可将TIM时钟频率做分频处理 TIM_TimeBaseStructure.TIM_Period = 0xFFFF; //周期0~FFFF TIM_TimeBaseStructure.TIM_Prescaler = 5; //时钟分频,分频数为5+1即6分频 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//模式 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//基本初始化 注注(二):定时器TIM的倍频器X1或X2。在APB分频为1时,倍频值为1,否则为2。 笔记:之前调试的时候,想检测低频,按照上面方法进行分频处理时,怎么都不行,后来才搞明白,由于检测时要进行计数,印记预装载值TIM_Period还是要设置成0xffff,而TIM_Prescaler是进行分频用的,也就是说,如果定时器时钟为72M,则将TIM_Prescaler设置成5后,TIM的时钟为14.4M,此时可以检测的最小频率=14.4M/0xffff,也就是说最小检测频率= 14.4M/TIM_Period。返回搜狐,查看更多 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |