用MSP430F5529为什么无法输出pwm

2019-03-24 09:15发布

#include <msp430.h>

#define TA01_SET         P2SEL |= BIT0; P2DIR |= BIT0                //P2.0
#define TA02_SET         P3SEL |= BIT0; P3DIR |= BIT0                //P3.0
#define TA01_OFF         P2SEL&= ~BIT0                                                         //P1.6
#define TA02_OFF         P3SEL &= ~BIT0                                                 //P3.0

char TAPwmInit(char Clk,char Div,char Mode1,char Mode2)
{
          TA0CTL =0;                                                                                                                                                // 清除以前设置

          switch(Mode1)                                                                                                                                        //为定时器选择计数模式
          {
          case 'F':case 'f':                                                                                                                                //普通PWM
                          TA0CTL |=MC_1; break;                                                                                        //主定时器为增计数
          case 'B':case 'b':
                            TA0CTL |=MC_1; break;                                                                                        //主定时器为增计数
          case 'D': case 'd':                                                                                                                                //死区PWM
                       TA0CTL |=MC_3; break;                                                                                        //主定时器为增减计数
          default : return(0);                                                                                                                        //其他情况都是设置参数有误,返回0
          }

          switch(Clk)                                                                                                                                                  //为定时器TA选择时钟源
          {
            case 'A': case 'a':          TA0CTL|=TASSEL_1; break;                           //ACLK
            case 'S': case 's':         TA0CTL|=TASSEL_2; break;                          //SMCLK
            case 'E':                    TA0CTL|=TASSEL_0; break;                          //外部输入(TACLK)
            case 'e':                          TA0CTL|=TASSEL_3; break;                           //外部输入(TACLK取反)
            default :  return(0);                                                                                                                  //设置参数有误,返回0
          }
          switch(Div)                                                                                                                                                 //为定时器TA选择分频系数
          {
            case 1:   TA0CTL|=ID_0; break;   //1
            case 2:   TA0CTL|=ID_1; break;   //2
            case 4:   TA0CTL|=ID_2; break;   //4
            case 8:   TA0CTL|=ID_3; break;   //8
            default :  return(0);                                                                                                                  //设置参数有误,返回0
          }
          switch(Mode1)                                                                                                                                         //设置PWM通道1的输出模式。
          {
             case 'F':        case 'f':
                      TA0CCTL1 = OUTMOD_7;
                      TA01_SET;
                      break;
             case 'B':        case 'b':
                      TA0CCTL1 = OUTMOD_3;
                      TA01_SET;
                      break;
             case 'D': case'd':
                         TA0CCTL1 = OUTMOD_6;
                         TA01_SET;
                         break;
              case '0':case 0:                                                                                                                           //如果设置为禁用
                     TA01_OFF;                                                                                                                           //TA0.1恢复为普通IO口
                      break;
             default :  return(0);                                                                                                                   //设置参数有误,返回0
          }
          switch(Mode2)                                                                                                                                 //设置PWM通道2的输出模式。
          {
              case 'F':         case 'f':
                      TA0CCTL2 = OUTMOD_7;
                      TA02_SET;  break;
               case 'B':        case 'b':
                      TA0CCTL2 = OUTMOD_3;
                      TA02_SET;
                        break;
               case 'D': case 'd':
                                  TA0CCTL2 = OUTMOD_2;
                                  TA02_SET;
                                  break;
               case '0':case 0:                                                                                                                   //如果设置为禁用
                                    TA02_OFF;                                                                                                            //TA0.1恢复为普通IO口
                                    break;
               default :  return(0);                                                                                                 //设置参数有误,返回0
            }
          return(1);
}

void TAPwmSetPeriod(unsigned int Period)
{
         TA0CCR0 = Period;
}

void TAPwmSetDuty(char Channel,unsigned int Duty)
{
        switch(Channel)
        {
        case 1:TA0CCR1=Duty;break;
        case 2:TA0CCR2=Duty;break;
        }
}

void TAPwmSetPermill(char Channel,unsigned int Percent)
{
  unsigned long int Period;
  unsigned int Duty;
  Period=TA0CCR0;
  Duty=Period*Percent/1000;
  TAPwmSetDuty(Channel,Duty);
}

void main()
{
     WDTCTL=WDTPW+WDTHOLD;
     TAPwmInit('A',1,'F',0);
     TAPwmSetPeriod(500);
     TAPwmSetDuty(1,500);
     LPM0;
}

这个程序无法输出PWM波形,一直都是低电平,求大神指教

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
happyhyq1010
2019-03-25 06:50
是将所有TA0改成TA1不  例如TA01_SET; 改成TA11_SET;这样子的不

一周热门 更多>

相关问题

    相关文章