救命啊!!!msp5529 pwm函数 无法输出pwm波形!请各位大侠帮我看看啊。。。

2019-03-23 22:24发布

救命啊!!!msp5529  pwm函数  无法输出pwm波形!请各位大侠帮我看看啊。。。
  1. #include "msp430f5529.h"
  2. #define TA01_SET         P1SEL |= BIT2; P1DIR |= BIT2                //P1.2
  3. #define TA02_SET         P1SEL |= BIT3; P1DIR |= BIT3                //P1.3
  4. #define TA03_SET         P1SEL |= BIT4; P1DIR |= BIT4        //P1.4
  5. #define TA04_SET         P1SEL |= BIT5; P1DIR |= BIT5                //P1.5
  6. #define TA01_OFF         P1SEL&= ~BIT2         //关P1.2
  7. #define TA02_OFF         P1SEL &= ~BIT3        //P1.3
  8. #define TA03_OFF         P1SEL &= ~BIT4        //P1.4
  9. #define TA04_OFF         P1SEL &= ~BIT5        //P1.5

  10. char TA0_PWM_Init(char Clk,char Div,char Mode1,char Mode2,char Mode3,char Mode4)
  11. {
  12.         TA0CTL =TACLR;
  13.          TA0CTL |=MC_1;
  14.         switch(Clk)  //时钟选择                                                                                                                                                //为定时器TA选择时钟源
  15.           {
  16.             case 'A': case 'a':          TA0CTL|=TASSEL_1; break;                           //ACLK
  17.             case 'S': case 's':         TA0CTL|=TASSEL_2; break;                          //SMCLK
  18.             case 'E':                            TA0CTL|=TASSEL_0; break;                          //外部输入(TACLK)
  19.             case 'e':                                  TA0CTL|=TASSEL_3; break;                           //外部输入(TACLK取反)
  20.             default :  return(0);                                                                                                                  //设置参数有误,返回0
  21.           }
  22.         switch(Div)         //时钟分频                                                                                                                                        //为定时器TA选择分频系数
  23.           {
  24.             case 1:   TA0CTL|=ID_0; break;   //1
  25.             case 2:   TA0CTL|=ID_1; break;   //2
  26.             case 4:   TA0CTL|=ID_2; break;   //4
  27.             case 8:   TA0CTL|=ID_3; break;   //8
  28.             default :  return(0);                                                                                                                  //设置参数有误,返回0
  29.           }
  30.         switch(Mode1)                                                                                                                                         //设置PWM通道1的输出模式。
  31.           {
  32.              case 'F':        case 'f':
  33.                       TA0CCTL1 = OUTMOD_7;
  34.                       TA01_SET;
  35.                       break;
  36.              case 'B':        case 'b':
  37.                       TA0CCTL1 = OUTMOD_3;
  38.                       TA01_SET;
  39.                       break;
  40.              case 'D': case'd':
  41.                      TA0CCTL1 = OUTMOD_6;
  42.                          TA01_SET;
  43.                          break;
  44.               case '0':case 0:                                                                                                                           //如果设置为禁用
  45.                      TA01_OFF;                                                                                                                           //TA0.1恢复为普通IO口
  46.                       break;
  47.              default :  return(0);                                                                                                                   //设置参数有误,返回0
  48.           }
  49.           switch(Mode2)                                                                                                                                 //设置PWM通道2的输出模式。
  50.           {
  51.               case 'F':         case 'f':
  52.                       TA0CCTL2 = OUTMOD_7;
  53.                       TA02_SET;  break;
  54.                case 'B':        case 'b':
  55.                       TA0CCTL2 = OUTMOD_3;
  56.                       TA02_SET;
  57.                         break;
  58.                case 'D': case 'd':
  59.                                   TA0CCTL2 = OUTMOD_2;
  60.                                   TA02_SET;
  61.                                   break;
  62.                case '0':case 0:                                                                                                                   //如果设置为禁用
  63.                                     TA02_OFF;                                                                                                            //TA0.1恢复为普通IO口
  64.                                     break;
  65.                default :  return(0);                                                                                                 //设置参数有误,返回0
  66.             }
  67.           switch(Mode3)                                                                                                                                 //设置PWM通道2的输出模式。
  68.                     {
  69.                         case 'F':         case 'f':
  70.                                 TA0CCTL3 = OUTMOD_7;
  71.                                 TA03_SET;  break;
  72.                          case 'B':        case 'b':
  73.                                 TA0CCTL3 = OUTMOD_3;
  74.                                 TA03_SET;
  75.                                   break;
  76.                          case 'D': case 'd':
  77.                                             TA0CCTL3 = OUTMOD_2;
  78.                                             TA03_SET;
  79.                                             break;
  80.                          case '0':case 0:                                                                                                                   //如果设置为禁用
  81.                                               TA03_OFF;                                                                                                            //TA0.1恢复为普通IO口
  82.                                               break;
  83.                          default :  return(0);                                                                                                 //设置参数有误,返回0
  84.                       }switch(Mode4)                                                                                                                                 //设置PWM通道2的输出模式。
  85.                     {
  86.                         case 'F':         case 'f':
  87.                                 TA0CCTL4 = OUTMOD_7;
  88.                                 TA04_SET;
  89.                               P4OUT ^=BIT7;break;
  90.                          case 'B':        case 'b':
  91.                                 TA0CCTL4 = OUTMOD_3;
  92.                                 TA04_SET;
  93.                                   break;
  94.                          case 'D': case 'd':
  95.                                             TA0CCTL4 = OUTMOD_2;
  96.                                             TA04_SET;
  97.                                             break;
  98.                          case '0':case 0:                                                                                                                   //如果设置为禁用
  99.                                               TA04_OFF;                                                                                                            //TA0.1恢复为普通IO口
  100.                                               break;
  101.                          default :  return(0);                                                                                                 //设置参数有误,返回0
  102.                       }
  103.                       return(1);
  104.         }
  105. char TA0_PWM_SetPeriod(unsigned int Period)
  106. {
  107.         if (Period>65535)        return(0);
  108.         TA0CCR0 = Period;
  109.         return(1);
  110. }

  111. char TA0_PWM_SetPermill(char Channel,unsigned int Percent)
  112.                 {
  113.                         switch (Channel)

  114.                         {
  115.                                         case 1 :
  116.                                                                 {
  117.                                                                                 if(Percent>1000)        Percent=1000;
  118.                                                                                 if(Channel==1)
  119.                                                                                         TA0CCR1=Percent* TA0CCR0/1000;
  120.                                                                                 break;
  121.                                                                 }
  122.                                         case 2 :
  123.                                                                 {
  124.                                                                                 if(Percent>1000)        Percent=1000;
  125.                                                                                 if(Channel==2)
  126.                                                                                         TA0CCR2=Percent* TA0CCR0/1000;
  127.                                                                                 break;
  128.                                                                 }

  129.                                         case 3 :
  130.                                                                 {
  131.                                                                                 if(Percent>1000)        Percent=1000;
  132.                                                                                 if(Channel==3)
  133.                                                                                         TA0CCR3=Percent* TA0CCR0/1000;
  134.                                                                                 break;
  135.                                                                 }

  136.                                         case 4 :
  137.                                                                 {
  138.                                                                                 if(Percent>1000)        Percent=1000;
  139.                                                                                 if(Channel==4)
  140.                                                                                         TA0CCR4=Percent* TA0CCR0/1000;
  141.                                                                                 break;
  142.                                                                 }

  143.                                         default:
  144.                                                 return (0);

  145.                                 }
  146.                         return (1);
  147.                 }

复制代码

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
646536114
2019-03-24 01:40
< TA0_PWM_SetPeriod(500);//设置PWM周期
    TA0_PWM_Init('s','1','F','F','F','F');//设置pwm时钟源、分频、输出模式
TA0_PWM_SetPermill(1,500);

然后主函数是以上三句话。。。

一周热门 更多>

相关问题

    相关文章