一、原理图
PA6 PA7
二、CubeMX配置
选用引脚开启定时器通道
开启内部时钟,开启输入捕获,预分频选择80-1,这里通道1为直接所以选TI1FP1
开启中断
间接通道开启下降沿
注意:配置完成后,将MX_TIM3_Init();函数找到,移植到我们的主函数改名字void MX_TIM3_PA6_Init(void)。然后注释//MX_TIM3_Init();
再次回到CubeMX取消PA6的配置,开始按上示步骤配置PA7。
三、代码
查找PA7,在tim.h里面
void pwm_pro()
{
MX_TIM3_PA6_Init();
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);
HAL_Delay(50);
HAL_TIM_IC_Stop_IT(&htim3,TIM_CHANNEL_1);
HAL_TIM_IC_Stop_IT(&htim3,TIM_CHANNEL_2);
duty1=cnt2*1.0/cnt1;
frq1=1000000/cnt1;
MX_TIM3_PA7_Init();
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);
HAL_Delay(50);
HAL_TIM_IC_Stop_IT(&htim3,TIM_CHANNEL_1);
HAL_TIM_IC_Stop_IT(&htim3,TIM_CHANNEL_2);
duty2=cnt1*1.0/cnt2;
frq2=1000000/cnt2;
}
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM3)
{
if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_1)
cnt1=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_1);
else if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_2)
cnt2=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_2);
}
}