如何在STM32上启动和停止计时器?

San*_*ius 5 c timer stm32

我有一个大问题.我不知道如何用按钮停止计时器并用另一个按钮重新启动计时器.

这是我到目前为止的代码:


此代码是启动计时器的按钮的中断处理程序.我认为通过启用到目前为止工作的计时器是可能的.

void EXTI0_1_IRQHandler(void)
{
    if ((EXTI->PR & EXTI_PR_PR1) == EXTI_PR_PR1)  /* Check line 1 has triggered the IT */
    {
        EXTI->PR = EXTI_PR_PR1; /* Clear the pending bit */
        NVIC_EnableIRQ(TIM7_IRQn);

    }
}
Run Code Online (Sandbox Code Playgroud)

此代码是停止计时器的按钮的中断处理程序.这段代码不起作用,计时器保持打开状态.

void EXTI4_15_IRQHandler(void)
{
    if ((EXTI->PR & EXTI_PR_PR4) == EXTI_PR_PR4)  /* Check line 1 has triggered the IT */
    {
        EXTI->PR = EXTI_PR_PR4; /* Clear the pending bit */
        NVIC_DisableIRQ(TIM7_IRQn);
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有人有一些提示或知道它必须如何?

小智 9

我认为"NVIC_DisableIRQ(TIM7_IRQn);"只是禁用定时器的中断但不停止定时器.您可能需要:"TIM_Cmd(TIM7,DISABLE);" 而不是"NVIC_DisableIRQ(TIM7_IRQn);"


Pol*_*lot 9

使用[HAL][1],启动:

HAL_TIM_Base_Start(&htim);
HAL_TIM_Base_Start_IT(&htim);
Run Code Online (Sandbox Code Playgroud)

停止:

HAL_TIM_Base_Stop(&htim);
HAL_TIM_Base_Stop_IT(&htim);
Run Code Online (Sandbox Code Playgroud)

其中_IT为定时器中断模式。并且您可以在停止计时器后重新配置计时器。[1]:http ://www.disca.upv.es/aperles/arm_cortex_m3/llibre/st/STM32F439xx_User_Manual/stm32f4xx__hal__tim_8c.html