1,基础的时钟参数配置参考 文章PWM输出部分
2,定时器配置
通道1配置为直接模式,通道2配置为间接模式,复位,通道1采集的是PWM的周期,通道2采集的是PWM的高电平的时间,通过这两个通道的参数可以计算出周期以及占空比。
3,启动定时器2
HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);
4,在中断中调用回调函数
uint16_t PWM_RisingCount=65535;
uint16_t PWM_FallingCount;
float duty;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
//注意这里为HAL_TIM_ACTIVE_CHANNEL_1而不是TIM_CHANNEL_1
{
PWM_RisingCount = HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1);
duty = (float)PWM_FallingCount / PWM_RisingCount;
}
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)
{
PWM_FallingCount = HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_2);
}
}