7092|11

21

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

用MSP430F5529为什么无法输出pwm [复制链接]

#include

#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波形,一直都是低电平,求大神指教

最新回复

问题都解决了。。。。  详情 回复 发表于 2017-10-12 11:53
 
点赞 关注(1)

回复
举报

21

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
ok问题解决了    把TA0换成TA1就行了
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
tei333 发表于 2015-7-24 18:09
ok问题解决了    把TA0换成TA1就行了

TA1比TA0多个比较锁存器     其他不都一样吗     这是什么原因?   我学的169是因为不一样吗
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

4
 
主要是我选的端口的原因,MSP430F5529的PWM输出端口P2^0是由TA1控制的,并不是说TA0和TA1其他有什么不一样,没注意看芯片手册
 
 
 

回复

28

帖子

0

TA的资源

一粒金砂(初级)

5
 
大神啊。感觉都看不懂     
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

6
 
别叫大神,我也是才入手学
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

7
 
是将所有TA0改成TA1不  例如TA01_SET; 改成TA11_SET;这样子的不
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

8
 
happyhyq1010 发表于 2015-8-4 10:27
是将所有TA0改成TA1不  例如TA01_SET; 改成TA11_SET;这样子的不

对   但是这样改是基于我的PWM输出端口是MSP430F5529的P2^0端口
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

9
 
tei333 发表于 2015-8-4 14:46
对   但是这样改是基于我的PWM输出端口是MSP430F5529的P2^0端口

哈哈  我的刚好也是F5529 由TA1控制    你有做pwm控制电机不
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

10
 
happyhyq1010 发表于 2015-8-5 17:26
哈哈  我的刚好也是F5529 由TA1控制    你有做pwm控制电机不

没有  我的外设板子没有电机    我做的是通过控制PWM的占空比来控制一个LED灯的亮度     但是原理应该都差不多吧  都是通过PWM的占空比来控制吧
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

11
 
大神5529还有哪几个IO可以输出PWM,我需要两个端口输出
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

12
 
问题都解决了。。。。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表