stm32f407定时器9不运行。。。为什么?

2019-07-14 19:36发布

tiM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9,ENABLE);  ///
        
  TIM_TimeBaseInitStructure.TIM_Period = arr;         //
        TIM_TimeBaseInitStructure.TIM_Prescaler=psc;  //
        TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //
        TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
        
        TIM_TimeBaseInit(TIM9,&TIM_TimeBaseInitStructure);//
        TIM_ITConfig(TIM9,TIM_IT_Update,ENABLE); //
        TIM_Cmd(TIM9,ENABLE); //ʹÄܶ¨Ê±4
        NVIC_InitStructure.NVIC_IRQChannel=TIM1_BRK_TIM9_IRQn; //
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; //
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=2; //
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);        

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
lyelecfans
2019-07-15 09:58
检查2个地方:中断源及中断服务是否配置对了。
以下为hal库初始化,
  1. void TIM9_Init(void)
  2. {  
  3.     TIM9_Handler.Instance=TIM9;        //TIM9中断 配置                    
  4.     TIM9_Handler.Init.Prescaler=psc;  //时钟/8400 分频                  
  5.     TIM9_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;   
  6.     TIM9_Handler.Init.Period=arr;                        
  7.     TIM9_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
  8.     HAL_TIM_Base_Init(&TIM9_Handler);
  9.     HAL_TIM_Base_Start_IT(&TIM9_Handler); //TIM_IT_UPDATE   
  10. }

  11. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
  12. {
  13.   if(htim->Instance==TIM9)
  14.         {
  15.                 __HAL_RCC_TIM9_CLK_ENABLE();            
  16.                 HAL_NVIC_SetPriority(TIM1_BRK_TIM9_IRQn,1,4);   
  17.                 HAL_NVIC_EnableIRQ(TIM1_BRK_TIM9_IRQn);   //中断源为“TIM1_BRK_TIM9_IRQn”
  18.         }
  19.        
  20. }
复制代码
以上初始化与那标准库基本意思差不多,但是没见你附上中断服务函数,若没有正确的中断入口也是不行的:
  1. void TIM1_BRK_TIM9_IRQHandler(void)// “TIM1_BRK_TIM9_IRQHandler”为其中断入口
  2. {
  3.         if(TIM9->SR&0x0001)  //判断是否为溢出中断
  4.         {
  5.         GPIOF->ODR ^= GPIO_PIN_10; //PF10 端口变化
  6.         }
  7.         TIM9->SR &= 0xFFFE; //清除中断标志
  8. }
复制代码

一周热门 更多>