- GPIO_InitTypeDef GPIO_InitStructure;//IO口配置结构体
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);//Open TIM4 clock
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//open gpioB clock
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//GPIO 7
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
- TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
- TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM向上计数模式
- TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
- NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- TIM4_ICInitStructure.TIM_Channel = TIM_Channel_2;
- TIM4_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
- TIM4_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
- TIM4_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_div1;
- TIM4_ICInitStructure.TIM_ICFilter = 0x3;//Filter:过滤
- TIM_PWMIConfig(TIM4, &TIM4_ICInitStructure);//PWM输入配置
- TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2);//选择有效输入端
- TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset);//配置为主从复位模式
- TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable);//启动定时器的被动触发
- TIM_ITConfig(TIM4, TIM_IT_CC2|TIM_IT_Update, ENABLE);//中断配置
- TIM_ClearITPendingBit(TIM4, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位
- TIM_Cmd(TIM4, ENABLE);
- }
- void TIM4_IRQHandler(void)
- {
- if (TIM_GetITStatus(TIM4, TIM_IT_CC2) != RESET)//捕获1发生捕获事件
- {
- duty_TIM4=TIM_GetCapture1(TIM4); //采集占空比
- if(TIM_GetCapture2(TIM4)>600)period_TIM4=TIM_GetCapture2(TIM4);//简单的处理
- CollectFlag_TIM4 = 0;
- }
- TIM_ClearITPendingBit(TIM4, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位
- }
- void TIM1_PWMINPUT_INIT(u16 arr,u16 psc)
- {
- TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;//TIM的初始化结构体
- NVIC_InitTypeDef NVIC_InitStructure;//中断配置
- TIM_ICInitTypeDefTIM1_ICInitStructure;//PWM配置结构体
- GPIO_InitTypeDef GPIO_InitStructure;//IO口配置结构体
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//Open TIM1 clock
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);//open gpioE clock
- GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE); //Timer1完全重映射TIM1_CH2->PE11
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//GPIO 11
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOE, &GPIO_InitStructure);
- TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
- TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
- TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM向上计数模式
- TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
- NVIC_InitStructure.NVIC_IRQChannel =TIM1_CC_IRQn;//TIM1捕获中断
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- TIM1_ICInitStructure.TIM_Channel = TIM_Channel_2;
- TIM1_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
- TIM1_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
- TIM1_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_div1;