您现在的位置是:首页 >学无止境 >GD32(STM32)因为中断问题,导致不能进行程序 正常运行网站首页学无止境

GD32(STM32)因为中断问题,导致不能进行程序 正常运行

Richard888888888 2024-07-18 00:01:01
简介GD32(STM32)因为中断问题,导致不能进行程序 正常运行

项目中,之前定时器中断就用了个TIM2,但后来程序优化需要再加一个计数定时器TIM6,

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;        
    
        // 开启定时器时钟,即内部时钟CK_INT=72M
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);    
        // 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断
    TIM_TimeBaseStructure.TIM_Period=(1000-1);   //GENERAL_TIM_Period   (1000-1)  设置为5ms一次中断
      // 时钟预分频数
    TIM_TimeBaseStructure.TIM_Prescaler= 71;    
        // 时钟分频因子 ,没用到不用管
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;        
        // 计数器计数模式,设置为向上计数
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;         
        // 重复计数器的值,没用到不用管
        TIM_TimeBaseStructure.TIM_RepetitionCounter=0;    
      // 初始化定时器
    TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);
        //    NVIC_TIM6_Configuration();
    
        // 清除计数器中断标志位
    TIM_ClearFlag(TIM6, TIM_FLAG_Update);
      
        // 开启计数器中断
    TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);
        
        // 使能计数器
    TIM_Cmd(TIM6, ENABLE);
            NVIC_TIM6_Configuration();

常规配置,不可能会有出错。但是发现初始化上面的代码后,程序连main主函数都进不了。

因为我的程序 是STM32移值到GD32的,所以一直认为是配置上有差异,但结果并不是这样。

而是我在置置void TIM6_IRQHandler(void){//定时器1ms 中断函数的时候,没有加

        if(TIM_GetFlagStatus(TIM6, TIM_FLAG_Update)==SET)

和        TIM_ClearITPendingBit(TIM6 , TIM_FLAG_Update);  

中断并不是说进入主函数才触 发,单片机一旦运行,配置完成就开始工作。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。