关于stm32f103c6通用定时器得提问

你好,在网上看了您设置通用定时器,我也借用了一下不懂为什么还是无法设置成功,可以帮我指正一下吗?以下是我的代码Space 2022/4/1 16:39:13


 //定时器方案2
 void TimerBase_Config(void)
{
    //开时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    //定义结构体变量
    TIM_TimeBaseInitTypeDef TimerBaseInitStructure;
    NVIC_InitTypeDef NVICInitStructure;
    //配置定时器结构体
    TimerBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TimerBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TimerBaseInitStructure.TIM_Period = 10000;
    TimerBaseInitStructure.TIM_Prescaler = 7200;
    TIM_TimeBaseInit(TIM2, &TimerBaseInitStructure);
    //清空标志位
    TIM_ClearFlag(TIM2,TIM_FLAG_Update);
    //开启定时器中断
    TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
    //使能定时器
    TIM_Cmd(TIM2,ENABLE);
    //配置NVIC结构体
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    NVICInitStructure.NVIC_IRQChannel = TIM2_IRQn;
    NVICInitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVICInitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVICInitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_Init(&NVICInitStructure);
}

void TIM2_IRQHandler(void)
{
    static uint16_t temp;
    
    if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET)
    {
        if(temp ++ %2 == 1)
        {
            LED1(0);
        }
        else 
        {
LED1(1);        }
    }
    TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
    
    
}






//  * @brief  主函数
//  * @param  无  
//  * @retval 无
//  */
extern uint8_t voice_cmd;

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  
    TimerBase_Config();
TIM2_IRQHandler();
    uint32_t i = 0;
    
    /* 端口初始化 */
    GPIO_Config();   
    //LED1:红灯控制;LED2:绿灯控制;LED3:蓝灯控制

    /* 配置SysTick 为1us中断一次 */
    SysTick_Init();
    /*初始化USART 配置模式为 115200 8-N-1,中断接收*/
  USART_Config();
    USART_VOICE_Config();
    
    vl53l0x_init();
    
      //si4463_mainloop();
  while(1)
    {

      if(vl53l0x_status == VL53L0X_ERROR_NONE)
            {
        switch(voice_cmd)
                {
                    case 1:
                        printf("开始测量");
                    break;
                    case 2:
                        printf("循环测距");
                    break;
                    case 3:
                        printf("距离报警");
                    break;
                    case 4:
                        printf("结束测试");
                    break;
                
                }        
voice_cmd=0;                
                vl53l0x_start_single_test(&vl53l0x_dev, &vl53l0x_data);
                    //printf("hello world\n");
            }
    }
    

}


Space 2022/4/1 16:39:19
这个是我的代码,目前是想通过闪烁一个LED灯来检测通用定时器是否配置妥当,但是灯没有任何反应

感觉是TIM2中断里IF语句判断条件中的temp值有问题,并且在主程序中不要有TIM2_IRQHandler();函数,中断函数是在库文件里定义好了,达到中断允许的条件会自动进入中断