你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 7950|回复: 2

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

[复制链接]

1

主题

4

回帖

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; //开计数器 

}
 
回复

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-11-23 21:00:48 | 显示全部楼层

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

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

使用道具 举报

1

主题

4

回帖

0

蝴蝶豆

新手上路

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

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

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

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版