yxys_1988 发表于 2025-7-7 10:10

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]
查看完整版本: TIM4->CH3输入捕获的初始化配置