可以解决电赛练习里面的第四题
输入捕获模式
当相应的引脚检测到跳变沿之后,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 的频率和占空比
操作二、
生成代码后的步骤同一
强强哒