| STM32做PWMI的输入捕获模式,测量20-20Khz的方波,20-1098hz时就不准确,发现时TIM3-CCR2的16位计满溢出了,请问怎么把它的溢出挂在中断上,查询的方式计算,越详细越好。 void Timer3(void)/
 {
 TIM_ICMode=TIM_PWMI,输入PWM模式
 TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;//通道选择,共四个通道
 TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;//输入活动沿(下降沿,上升沿)
 TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//管脚与寄存器对应关系 TIM2选择对应和IC1 或 IC2 或 IC3 或 IC4 相连
 TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;//分频器 ,在捕获输入每检测到一个边沿执行一次,DIV2,3,4每捕获2,3,4个事件执行一次
 TIM_ICInitStructure.TIM_ICFilter = 0x4;//选择输入比较滤波器,滤波设置,经历几个周期跳变认定波形稳定0x0~0xF
 TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);
 TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);//选择时钟输入触发源 ,经过滤波定时器输入2
 TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);//TIM2复位模式为从模式,选择触发信号(TRGI)的上升沿重初始化计数器并触发寄存器的更新
 TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable); //选择主从模式,主从模式使能,启动定时器的被动触发
 
 TIM_ITConfig(TIM3, TIM_IT_CC2 , ENABLE); //使能捕获/比较4中断源
 TIM_Cmd(TIM3, ENABLE);  //启动TIM2
 }
 
 void TIM3_IRQHandler(void)
 {
 TIM_ClearITPendingBit(TIM3,TIM_IT_CC2);//清除中断挂起位
 if(IC3Value!=0)
 {
 DutyCycle = (TIM_GetCapture1(TIM3) * 100) / IC3Value;
 Frequency=72000000/IC3Value;//捕获时从输入波形的上升沿开始,对主时钟沿进行计数,得到的是主时钟的个数,即为输入脉冲的周期
 }
 else
 {
 Frequency=0;
 DutyCycle = 0;
 }
 
 
 }
 
 SYSTICK是72Mhz,其他配置没问题
 |