搜索
查看: 8261|回复: 2

请教 一个STM8 定时器TIM1 PWM 输出的问题(TIM1 ARR被异常赋0)

[复制链接]

该用户从未签到

1

主题

5

帖子

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-11-23 15:51:50 | 显示全部楼层 |阅读模式

  各位高手,最近遇到一个STM8 PWM输出的怪问题, 我在初始化里配置TIM1 为PWM 输出模式, 输出的脉冲是用来供给步进电机细分驱动器的,每次TIM1更新中断时重新对ARR,CCR 赋初值。 但是系统经常是过一段时间,ARR就变成0了,查了好久也不知道是什么原因造成的,请大家帮忙看一下,下面是初始化程序 ,和中断处理程序
void InitTime1(void)
{
  /******************************************
  ***********************************************/
  TIM1->CCMR1 |= 0x78;      /* Output mode PWM2.TIM_CNT>TIM_CCR时,输出有效电平,使能预装载                      */
    //TIM1->CCMR1 |= 0x70;      /* Output mode PWM2.TIM_CNT>TIM_CCR时,输出有效电平,使能预装载                      */  
   TIM1->CCER1 |= 0x03;      /* CC polarity high,enable PWM output      */
  TIM1->ARRH    = 0x07;         /* Freq control register: ARR             */
    TIM1->ARRL    = 0xD0;         /* Freq control register: ARR             */
 
  TIM1->CCR1H   = 0x03;         /* Dutycycle control register: CCR        */
    TIM1->CCR1L  = 0XE8;      /* Dutycycle control register: CCR        */
  TIM1->BKR    |=0X80;    //MOE =1;主输出使能
  //TIM1->RCR=200;
  TIM1->RCR=10;
  TIM1-&gtSCRH = 00;
  //TIM1-&gtSCRL = 0x1F;      ///32分频=16M/32=500KHZ
    TIM1-&gtSCRL = 0x07;//8分频=16M/8=2000KHZ 
  TIM1->CR1   |= 0x81;      /* Enable TIM3.   TIM3->ARR通 过预装载寄存器缓冲      */
    //TIM1->CR1   |= 0x01;      /* Enable TIM1.   TIM3->ARR立 即写入影子寄存器    */
    TIM1->IER |= 0x01; //充许更新中断  UIE
 }
 
#ifdef _COSMIC_
@far @interrupt void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void)
#else /* _RAISONANCE_ */
void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void) interrupt 11
#endif /* _COSMIC_ */
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
 //-----共100 cycle 共6.25us
   unsigned int waittabletemp;
   unsigned int ccrtemp;
//--------------------------------------------------//
//----------------------------------------------//  
 
//-------------------------------------
  TIM1->CR1   &= (~0x01); //关闭计数器
#if  ACC_CELE_EN==1
if(ArrTemp!=0) //==0时不执行
{
switch(AccCeleState)
 {
  case 0 :{
         TIM1->ARRH = (u8)(ArrTemp>>8);
          TIM1->ARRL = (u8)ArrTemp;
          ccrtemp=ArrTemp>>1;
     TIM1->CCR1H   =(u8)(ccrtemp>>8);         //Dutycycle control register: CCR
     TIM1->CCR1L  = (u8)(ccrtemp);   
     break;
     }
 
  case 1 :{              //加速
     waittabletemp=WaitTable[ArrLastI+ArrLastI2];
        TIM1->ARRH = (u8)(waittabletemp>>8);
          TIM1->ARRL = (u8)waittabletemp;
     ccrtemp=waittabletemp>>1;
          TIM1->CCR1H   =(u8)(ccrtemp>>8);         //Dutycycle control register: CCR
     TIM1->CCR1L  = (u8)(ccrtemp);  
      if((ArrLastI+ArrLastI2++)==ArrI)
       {
      ArrLastI2=0; //复位
      AccCeleState=0; //转为匀速
      ArrTempLast=ArrTemp;
      }
      break;
     } 
 case 2 :{     //减速
        waittabletemp=WaitTable[ArrLastI-ArrLastI3];
        TIM1->ARRH = (u8)(waittabletemp>>8);
          TIM1->ARRL = (u8)waittabletemp;
         ccrtemp=waittabletemp>>1;
          TIM1->CCR1H   =(u8)(ccrtemp>>8);         //Dutycycle control register: CCR
     TIM1->CCR1L  = (u8)(ccrtemp);    
      if((ArrLastI-ArrLastI3++)==ArrI)
       {
      ArrLastI3=0; //复位
      AccCeleState=0; //转为匀速
      ArrTempLast=ArrTemp;
      }
     break;
      }
 }
 
}

#endif
//----------------------------------------------------

  TestRcr++;

   TIM1->SR1 &= ~0x01;
  
  TIM1->CR1   |= 0x01; //开计数器 

}
 
回复

使用道具 举报

该用户从未签到

133

主题

4688

帖子

239

蝴蝶豆

版主

最后登录
2021-4-10
发表于 2011-11-23 21:00:48 | 显示全部楼层

RE:请教 一个STM8 定时器TIM1 PWM 输出的问题(TIM1 ARR被异常赋0)

waittabletemp=WaitTable[ArrLastI+ArrLastI2];
这个你有考虑过吗?会不会为0?
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

5

帖子

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-11-25 13:33:37 | 显示全部楼层

回复:请教 一个STM8 定时器TIM1 PWM 输出的问题(TIM1 ARR被异常赋0)

找到原因了,问题在于waittabletemp=WaitTable[ArrLastI+ArrLastI2] 这个变量所指向的查找表有时会越界,造成waittabletemp变0,ARR也就为0了,,是我的大意造成的,还以为是硬件的问题的。
    多谢楼上的提醒!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-5-7 07:31 , Processed in 1.148525 second(s), 31 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表