我的外设频率是12mhz,pwm计数为1200,为什么示波器出来的频率是6.667khz

2019-03-24 10:01发布

我的外设频率是12mhz,pwm计数为1200,为什么示波器出来的频率是6.667khz
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
sunduoze
1楼-- · 2019-03-24 11:22
程序晒出来,用的什么板子
qiushenghua
2楼-- · 2019-03-24 13:31
 精彩回答 2  元偷偷看……
sing146
3楼-- · 2019-03-24 15:35
sunduoze 发表于 2015-7-17 15:45
程序晒出来,用的什么板子

void Clk_Init(void)
{
  volatile unsigned int i;
  BCSCTL1 &= ~XT2OFF;                       //打开高频外部晶振XT振荡器
  BCSCTL2 |= SELM_1 + SELS + DIVS_3;        // SELM_2:选择为XT2作为MCLK的时钟源,
                                            //SELS:选择为XT2作为SMCLK的时钟源.
                                            //DIVS_3:8分频
  do
  {
  IFG1 &= ~OFIFG;                           // Clear OSCFault flag:清除振荡错误标志
  for (i = 0xFF; i > 0; i--);               // Time for flag to set
  _NOP();                                   //延时等待
  }
  while ((IFG1 & OFIFG));                   // OSCFault flag still set?:如果标志为1,则继续循环等待
  IFG1 &= ~OFIFG;

}

/*************************************************************************
*                      MSP430内部看门狗初始化
*************************************************************************/
void WDT_Init()
{
   WDTCTL = WDTPW + WDTHOLD;                      //关闭看门狗
}

/**************************************************************************
* 主函数:三相SPWM,精度8,采样数250
* 时钟频率计算:smclk/65536/2
*************************************************************************/
void main( void )
{
  WDT_Init();                 //看门狗设置
  Clk_Init();                 //系统时钟设置.暂时不能使用,对ad有影响

  //p w m
  P4DIR |= 0XFF;              // P4.1~6使用TB1~TB6,六路输出
  P4SEL |= 0xFF;


  TBCCTL0=CCIE;               //开启定时器中断
  TBCCR0 =1024;               //定时器计数250
                              //例如:周期为512*(1/8000000)s=64us 占空比为x/512

  TBCCTL1 = OUTMOD_7;
  TBCCR1  = spwm_0[n];//31khz
  TBCCTL2 = OUTMOD_3;
  TBCCR2  = spwm_0[n];

  TBCCTL3 = OUTMOD_7;
  TBCCR3  = spwm_120[n];
  TBCCTL4 = OUTMOD_3;
  TBCCR4  = spwm_120[n];

  TBCCTL5 = OUTMOD_7;
  TBCCR5  = spwm_240[n];
  TBCCTL6 = OUTMOD_3;
  TBCCR6  = spwm_240[n];


  TBCTL = TBSSEL_2 + MC_1;    //TASSEL_1是ACLK,TASSEL_2是SMCLK MC_1 增计数模式,从零计数到ccr0
  _EINT();
  _BIS_SR(LPM0_bits+ GIE);    //进入LPM0低功耗模式
}

#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B(void)
{
  t++;
  if( t < 256 )
   {
         n++;
     TBCCR1 = spwm_0[n];
     TBCCR2 = spwm_0[n];
     TBCCR3 = spwm_120[n];
     TBCCR4 = spwm_120[n];
     TBCCR5 = spwm_240[n];
     TBCCR6 = spwm_240[n];
   }
  else
   {
       t=0;n=0;
   }
}


用的MSP430f149
sing146
4楼-- · 2019-03-24 18:47
qiushenghua 发表于 2015-7-17 15:57
无从下手,外设频率不等于时钟频率,pwm可以选择不同时钟源,可以有不同的工作模式
再说了,pwm输出又不一 ...

选择的是SMCLK的时钟源,这个时钟是选的XT2是12m。增计数模式。示波器的输入为什么不是pwm的输出
sunduoze
5楼-- · 2019-03-24 20:35
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章