STM32
直播中

张明

7年用户 1024经验值
私信 关注
[问答]

STM8S207定时器分频后定时不准的原因?

我用定时器作为红外发码脉宽控制用,STM8S207定时器分频后定时不准,定时器1或2都不行。下面是我的红外发码程序;搞了好久了都不行。
tiM2- gt;SR1 amp;=0xF8;
       TIM2- gt;IER=0X01;
       TIM2- gt;CCER1=0x00;
       TIM2- gt;CCER2=0x00;
      TIM2- gt;CCMR2=0x00;
      
    //TIM2- gtSCR = 0X00;
    //TIM2- gt;EGR=0x01;
                          sentf=1;            
      for(i=0;i gt;8);
       TEMPL=(unsigned char)(dumm[i] amp;0x00ff);
   
       TIM2- gt;CNTRH=TEMPH;
      TIM2- gt;CNTRL=TEMPL;
       if(ir_sentf)
    {
     ////TIM3- gt;EGR=0x01;
    //TIM3- gt;CCER1=0x00;
    IR_OUT=1;
     ir_sentf=0;
     
           }
   
       else
   {
          //TIM3- gt;EGR=0x01;
    //TIM3- gt;CCER1=0x30;
    IR_OUT=0;
      ir_sentf=1;
     }  
   
   TIM2- gt;SR1=0;
   enableInterrupts();
   TIM2- gt;CR1=0X09;
    IWDG- gt;KR = 0xAA;
     nop();
   
    sentf1=0;
    while(!sentf1)
     {
     nop();
     }
    TIM2- gt;SR1 amp;=0xFE;
    disableInterrupts();
    //TIM2- gt;CR1=0x08;
   }

下面这个是定时器2的更新中断处理
@near @interrupt void TIM2_UPD_OVF_BRK_IRQHandler (void)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */

    if(TIM2- gt;SR1 amp;0x01)
   {  TIM2- gt;SR1 amp;=0xfe;
      
         if(sentf)
    {
   sentf1=1;
   
   }
      
   }
   //enableInterrupts(); return;  
}




回帖(1)

张虎豹

2024-5-16 17:52:01
STM8S207定时器分频后定时不准的原因可能有以下几点:

1. 定时器配置问题:请确保您正确配置了定时器的时钟源、预分频器和自动重载寄存器。这些参数将直接影响定时器的计数频率和定时精度。

2. 中断优先级设置:您提到了TIM2->SR1 &= 0xF8,这可能是在清除中断标志。请确保您正确设置了中断优先级,以便在定时器溢出时能够及时响应中断。

3. 中断使能:您设置了TIM2->IER = 0x01,这将使能定时器溢出中断。请确保在定时器配置完成后,使能了定时器的全局中断和定时器中断。

4. 定时器模式:请检查您是否使用了正确的定时器模式,例如向上计数、向下计数或中心对齐模式。不同的模式可能会影响到定时精度。

5. 软件延时:在红外发码程序中,您可能使用了软件延时来控制脉宽。软件延时的精度受到CPU时钟频率和编译器优化的影响,可能导致定时不准确。您可以尝试使用定时器硬件延时来提高精度。

6. 红外发射模块特性:请确保您的红外发射模块能够正确响应定时器产生的脉宽信号。某些红外模块可能对脉宽精度有较高的要求。

7. 外部干扰:电磁干扰、电源波动等因素可能影响到定时器的计数精度。请检查您的电路设计,确保有足够的去耦电容和屏蔽措施。

针对您的红外发码程序,我建议您:

1. 检查定时器配置,确保时钟源、预分频器和自动重载寄存器设置正确。

2. 使能定时器全局中断和定时器中断。

3. 在定时器溢出中断服务程序中,添加对定时器溢出标志的清除操作。

4. 考虑使用定时器硬件延时替代软件延时,以提高脉宽控制精度。

5. 检查红外发射模块的特性,确保其能够正确响应定时器产生的脉宽信号。

6. 检查电路设计,确保有足够的去耦电容和屏蔽措施,以减少外部干扰。

希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更详细的代码和硬件设计信息,以便进一步分析。
举报

更多回帖

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