可以解决电赛练习里面的第四题
输入捕获模式
当相应的引脚检测到跳变沿之后,TIMx_CCR储存CNT的值
PWM输入模式
从TIx检测输入波的跳变沿,遇到上升沿的时候,IC1捕获、IC2捕获、CNT写入CCR1,复位计数器重新开始数,下降沿时候IC2捕获脉冲宽度CNT写入CCR2(即high),下一次的上升沿IC1捕获测量周期T
所以此时,我们已经得到周期T,那么通过 f=1/T=84M/CCR1 就可以得到频率,通过 duty=high/T*100%=CCR2/CCR1*100% 就可以得到占空比了。
基于CUBEMX操作
操作一、
新建工程并做好基本配置(调整时钟频率等)
在这里笔者使用TIM2,并配置
还有重要的一点是要打开中断,因为捕获到了之后要中断一下计算频率的频率和占空比,然后再回去
然后生成代码,打开工程。
在USER CODE BEGIN 2 的位置写
HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1); HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);
作为IC1和IC2开始捕获得到的PWM波,那么按照上面说的,我们开始计算波的频率和占空比
在USER CODE BEGIN PFP 的位置写
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim){ static float freq=0,duty=0; freq=84000000.0/TIM2->CCR1; duty=TIM2->CCR2/TIM2->CCR1; }
得到的freq和duty即为PWM的频率和占空比
操作二、
生成代码后的步骤同一