TIM4->CH3输入捕获的初始化配置
void gpio_init (void){
GPIO_InitType GPIO_InitStructure;
GPIO_Structure_Initialize(&GPIO_InitStructure);
GPIO_InitStructure.Pin = GPIO_PIN_4;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_INPUT;
GPIO_InitStructure.GPIO_Pull = GPIO_PULL_UP;
GPIO_InitStructure.GPIO_Current = GPIO_DS_4MA;
GPIO_InitStructure.GPIO_Alternate = GPIO_AF6_TIM4;
GPIO_Peripheral_Initialize(GPIOA, &GPIO_InitStructure);
}
void Time4(void) // 벶ʱTIM4->CH3
{
RCC_APB2_Peripheral_Clock_Enable(RCC_APB2_PERIPH_AFIO);
RCC_Pclk1_Config(RCC_HCLK_DIV1); //36M/1 = 36M
RCC_APB1_Peripheral_Clock_Enable(RCC_APB1_PERIPH_TIM4);
NVIC_InitType NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Initializes(&NVIC_InitStructure);
TIM_TimeBaseInitType TIM_TimeBaseStructure;
TIM_Base_Struct_Initialize(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 65535-1;
TIM_TimeBaseStructure.Prescaler = 720-1;//36M/720 = 50K
TIM_TimeBaseStructure.ClkDiv = 0;
TIM_TimeBaseStructure.CntMode = TIM_CNT_MODE_UP;
TIM_Base_Initialize(TIM4, &TIM_TimeBaseStructure);
TIM_Interrupt_Status_Clear(TIM4, TIM_INT_UPDATE);
TIM_Interrupt_Enable(TIM4, TIM_INT_UPDATE);
TIM_ICInitType TIM_ICInitStructure;
TIM_Input_Struct_Initialize(&TIM_ICInitStructure);
TIM_ICInitStructure.Channel = TIM_CH_3;
TIM_ICInitStructure.IcPolarity= TIM_IC_POLARITY_RISING;
TIM_ICInitStructure.IcSelection = TIM_IC_SELECTION_DIRECTTI;
TIM_ICInitStructure.IcPrescaler = TIM_IC_PSC_DIV1;
TIM_ICInitStructure.IcFilter = 0;
TIM_PWM_Input_Channel_Config(TIM4, &TIM_ICInitStructure);
TIM_Interrupt_Status_Clear(TIM4, TIM_INT_CC3);
TIM_Interrupt_Enable(TIM4, TIM_INT_CC3);
TIM_On(TIM4);
}
以下是中断函数
void TIM4_IRQHandler(void)
{
if(TIM_Interrupt_Status_Get(TIM4, TIM_INT_CC3) != RESET)
{
TIM_Interrupt_Status_Clear(TIM4, TIM_INT_CC3);
endvar = TIM4->CCDAT3;
SPD_loop = (SPD_loop + 1) % 10;
ulaCAPTURE = endvar;
speed_cnt = 0;
TIM4->CCDAT3 = 0;
TIM4->CNT = 0;
led_alarm = ~led_alarm;
GPIO_Pin_Toggle(GPIOA, GPIO_PIN_9);
}
}
现象是在未输入信号的时候PA9端口1.3S翻转一次,刚好是20us*65535=1.31S。请高手指导一下
页:
[1]