STM32
直播中

王秀兰

8年用户 1471经验值
私信 关注
[问答]

用STM32F103打开了定时器2开定时器中断,关闭就报错 ,定时器如何关闭呢?

最近用STM32F103  打开了定时器2 开定时器中断,   开启PA11的中断,   在PA11的中断里把定时器2关掉,  
void EXti15_10_IRQHandler(void)
{
        
    if (EXTI_GetITStatus(EXTI_Line11) != RESET)
    {
        EXTI_ClearITPendingBit(EXTI_Line11); //清除标志

                dis_time=TIM2_count;
                GPIO_ResetBits(GPIOB, GPIO_Pin_0);
//                RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,DISABLE);               
//                TIM_Cmd(TIM2,DISABLE);                                           //关定时器
//                TIM2->CR1=0x00;                                                 //关闭定时器
                TIM2_count=0;                                                        //完成一次后  计数清零               
                EXTI_11_flag=1;                                                        

    }

}


不关定时器2  程序正常运行,  关闭就出错.  

定时器如何关闭呢?

回帖(1)

肖耳朵

2024-5-14 16:58:17
在STM32F103中,要关闭定时器2并避免报错,可以按照以下步骤操作:

1. 首先,确保已经正确初始化了定时器2。这包括设置时钟源、预分频器、自动重载寄存器等。

2. 在PA11的中断服务程序中,清除EXTI_Line11的中断标志位,然后关闭定时器2。以下是修改后的代码:

```c
void EXTI15_10_IRQHandler(void)
{
    if (EXTI_GetITStatus(EXTI_Line11) != RESET)
    {
        EXTI_ClearITPendingBit(EXTI_Line11); // 清除标志位

        // 读取定时器2的计数值
        dis_time = TIM_GetCounter(TIM2);

        // 关闭定时器2
        TIM_Cmd(TIM2, DISABLE);
    }
}
```

3. 在关闭定时器2之后,如果需要重新开启定时器2,可以再次调用初始化定时器2的函数,或者手动设置相关寄存器。

4. 如果在关闭定时器2后仍然遇到错误,请检查其他可能影响定时器2的因素,例如其他中断服务程序、DMA配置等。

5. 确保在关闭定时器2之前,已经完成了所有必要的数据处理和存储,以避免数据丢失或不一致。

通过以上步骤,应该可以成功关闭STM32F103的定时器2并避免报错。如果仍然遇到问题,请检查代码逻辑和硬件连接,确保没有其他因素影响定时器2的正常工作。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分