我是靠谱客的博主 忧虑战斗机,最近开发中收集的这篇文章主要介绍STM32定时器----TIMx->SR寄存器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在研究stm32定时器时发现,当进入定时器的中断时,定时器计数器以及中断接收时正常运行的,并没有因为进入中断而停止

具体看以下分析:

定时器初始化代码:

//TIM捕获通道开启宏定义,1:开启 0:关闭  
#define  TIM_ICCH1        1      
#define  TIM_ICCH2        1  
#define  TIM_ICCH3        1  
#define  TIM_ICCH4        1  
  
//最小捕获频率:72000000/(120*60000)=10Hz  
#define  TIM_ICARR        60000             //重装载寄存器填充值  
#define  TIM_ICPSC        720               //分频系数    
#define  TIM_ICFIT        0x00              //定时器捕获滤波系数    
#define  TIM_OverF        (10-1)            //最大ARR溢出次数  
  
#define  TIM_ICSR         (u16 *)&TIM3->SR   //选择定时器的SR寄存器地址  
#define  TIM_ICCCR        (u16 *)&TIM3->CCR1 //选择定时器的CCR寄存器地址  

void TIM3_PWMICInit(void)  
{  
    u8 i=0;  
      
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct;  
    TIM_ICInitTypeDef  TIM_ICInitStruct;  
    NVIC_InitTypeDef  NVIC_InitStruct;  
    GPIO_InitTypeDef  GPIO_InitStruct;  
      
    /***********************NVIC配置*****************************/  
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);  
      
    NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn;  
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;  
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;  
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;  
      
    NVIC_Init(&NVIC_InitStruct);  
      
    /**********************TIM3 GPIO配置*****************************/  
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA, ENABLE);  
      
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;  
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  
  
    /**********************初始化TIM3*******************************/  
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);  
      
    TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;  
    TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;  
    TIM_TimeBaseInitStruct.TIM_Period = TIM_ICARR-1;        
    TIM_TimeBaseInitStruct.TIM_Prescaler = TIM_ICPSC-1;       
  
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);  
      
    /**********************初始化TIM3 IC*******************************/  
    TIM_ICInitStruct.TIM_ICFilter = TIM_ICFIT;  
    TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Falling;  
    TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;  
    TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_DirectTI ;  
  
    if(TIM_ICCH1==1)  
    {  
      GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;  
      GPIO_Init(GPIOA,&GPIO_InitStruct);  
      TIM_ICInitStruct.TIM_Channel = TIM_Channel_1;  
      TIM_ICInit(TIM3, &TIM_ICInitStruct);  
    }  
      
    if(TIM_ICCH2==1)  
    {  
      GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7;  
      GPIO_Init(GPIOA,&GPIO_InitStruct);  
      TIM_ICInitStruct.TIM_Channel = TIM_Channel_2;  
      TIM_ICInit(TIM3, &TIM_ICInitStruct);  
    }  
      
     if(TIM_ICCH3==1)  
       {  
      GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;  
      GPIO_Init(GPIOB,&GPIO_InitStruct);  
      TIM_ICInitStruct.TIM_Channel = TIM_Channel_3;  
      TIM_ICInit(TIM3, &TIM_ICInitStruct);    
    }  
      
    if(TIM_ICCH4==1)  
    {  
      GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;  
      GPIO_Init(GPIOB,&GPIO_InitStruct);  
      TIM_ICInitStruct.TIM_Channel = TIM_Channel_4;  
      TIM_ICInit(TIM3, &TIM_ICInitStruct);  
    }  
  
    TIM_ITConfig(TIM3, TIM_IcChannel,ENABLE);  
    TIM_Cmd(TIM3, ENABLE);  
    TIM_Ic.Ccr1=0;
}  

中断代码:

void TIM3_IRQHandler(void)  
{  
    u8  j = 0;  
    u16 i = 0, *pTimFre, *pTimCcrT, *pTimOver, *pTimSR, *pTimCCR;  
   
	  TIM_Ic.Ccr1++;
	  TIM3->SR = 0;
	  if(TIM_Ic.Ccr1>100) 
		{
		        while( (TIM3->SR&0x001f) != 0x001f){}
			 LCD_ClearPart(Clear_ALL,RED);
			while(1);
		}
	  else return;
	 
     ...........(省略)
}  
仿真图中,CC1F中断状态位是为0的,其他为1,。这是引文CH1的PWM被断开了,而其他的则是连接。具体看图中黄色与红色

的线:




然后,连接CH1与PWM,再次仿真运行,结果如下图:



可见CC1F标志位已经被置1了,说明在中断函数中,定时器时正常运行的,并没有因为进入中断而停止。



最后

以上就是忧虑战斗机为你收集整理的STM32定时器----TIMx->SR寄存器的全部内容,希望文章能够帮你解决STM32定时器----TIMx->SR寄存器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部