首先我们确认好的输出PWM引脚是
PA1 TIM2 CH2 作为输出1
PA2 TIM2 CH3 作为输出2
PA2 TIM2 CH4 作为输出2
我们要用的固件库是路径是
\STM32固件库v3.5\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\TIM\PWM_Input\main.c
然后我们找到这一串代码
【很好找的 因为名字上写了pwm input】
输入捕获的一些知识储备
首先两个输入捕获会用的寄存器配置
TIM_GetCapture1(TIM2);
得到高电平 也就是上升沿触发的次数
TIM_GetCapture2(TIM2);
得到低电平 也就是下升沿触发的次数
然后 周期就是主频频率除以上升沿触发的次数(中间注意类型转换)
采集频率 = (float)(72000/TIM_GetCapture1(TIM2)));
占空比就是 高电平 除以低电平的次数 (中间注意类型转换)
Channerl_2," Channerl(2):%.3fKHZ ",(float)(72000/DutyCycle_2)
占空比= (float)(TIM_GetCapture1(TIM2);*100/TIM_GetCapture2(TIM2);));
/* TIM3 configuration: PWM Input mode ------------------------
The external signal is connected to TIM3 CH2 pin (PA.01),
The Rising edge is used as active edge,
The TIM3 CCR2 is used to compute the frequency value
The TIM3 CCR1 is used to compute the duty cycle value
------------------------------------------------------------ */
TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0x0;
TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);
/* Select the TIM3 Input Trigger: TI2FP2 */
TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);
/* Select the slave Mode: Reset Mode */
TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);
/* Enable the Master/Slave Mode */
TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable);
/* TIM enable counter */
TIM_Cmd(TIM3, ENABLE);
/* Enable the CC2 Interrupt Request */
TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);
最后把结构体加上去就好了
TIM_ICInitTypeDef TIM_ICInitStructure;
接下来把时钟 和GPIO配置加上去 都不用改的直接复制粘贴加上去就好了
/* TIM3 channel 2 pin (PA.07) configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* TIM3 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE)