MSP430 F5529 7路pwm输出


//                MSP430F552x
//            -------------------
//        /|\|                   |

//         | |                   |

//           |         P2.0/TA1.1|--> CCR1 - 25% PWM

//         | |                   |
//           |         P2.5/TA2.2|--> CCR3 - 25% PWM
//           |         P2.4/TA2.1|--> CCR1 - 6.25% PWM
//           |         P1.5/TA0.4|--> CCR4 - 12.5% PWM
//           |         P1.4/TA0.3|--> CCR3 - 6.25% PWM
//           |         P1.2/TA0.1|--> CCR1 - 75% PWM
//           |         P1.3/TA0.2|--> CCR2 - 25% PWM

以上7路pwm输出可以用示波器检测,也可以用led来检测。

#include <msp430.h>

int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1DIR |= BIT2+BIT3+BIT5+BIT4;                       
  P1SEL |= BIT2+BIT3+BIT5+BIT4;             //这里的pwm硬件外设需要选择外部设备                      
  TA0CCR0 = 512-1;                          // PWM Period这个是pwm周期这里不可以改变
  //这TA0四路pwm只用设置一个CCR0
  TA0CCTL1 = OUTMOD_7;                      // CCR1 reset/set
  TA0CCR1 = 384;                            // CCR1 PWM duty cycle
  TA0CCTL2 = OUTMOD_7;                      // CCR2 reset/set
  TA0CCR2 = 128;                            // CCR2 PWM duty cycle
  TA0CCTL4 = OUTMOD_7;
  TA0CCR4=64;
  TA0CCTL3 = OUTMOD_7;
  TA0CCR3=32;
  TA0CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK, up mode, clear TAR
  //这里pwm输出是硬件外设需要时钟的驱动 
  //以上是P1.2至P~1.5的4路pwm输出 这个是用定时器TA0输出的 TA0CCR0 = 512-1这个是周期的最大值
  //在输出模式7 (OUTMOD_7)下TA0CCR1 = 384 代表P1.2引脚输出384/512=0.75占空比的pwm
  //0.75占空比的pwm指的是在一个最小周期内高电平占75%的比例
  //写在一开始上有每个pwm输出引脚对应的CCRx
  //在CCR0固定下改变CCRx可以改变那个引脚的占空比
  P2DIR|=BIT0+BIT5+BIT4;
  P2SEL|=BIT0+BIT5+BIT4;
  TA1CCR0=512-1;  //    P2.0的pwm由TA1.1驱动
  TA1CCTL1=OUTMOD_7;
  TA1CCR1=128;
  TA1CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK, up mode, clear TAR


  TA2CCR0=512-1;                    //看只写了一个 
  TA2CCTL1=OUTMOD_7;                //这是P2.5andP2.4的pwm,最开始有对应啊
  TA2CCR1=64;
  TA2CCTL2=OUTMOD_7;
  TA2CCR2=128;

  TA2CTL = TASSEL_2+  MC_1+  TACLR; // SMCLK, up mode, clear TAR
   // SMCLK, up mode, clear TAR
  __bis_SR_register(LPM0_bits);             // Enter LPM0
  __no_operation();                         // For debugger
}

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在MSP430F5529微控制器上输出PWM波,您可以按照以下步骤进行操作: 1. 配置计时器(Timer):选择一个可用的计时器作为PWM的源,并根据需要设置其计数模式和定时器计数值。例如,您可以选择TimerA0。 2. 配置计时器模块(Timer Module):选择一个可用的计时器模块,并配置其相关寄存器以设置PWM的工作模式。例如,您可以选择TimerA0模块。 3. 设置PWM周期:根据需要设置PWM的周期。这决定了PWM波形的频率。您可以使用CCR0寄存器来设置计时器的最大计数值,从而确定PWM周期。 4. 设置占空比(Duty Cycle):根据需要设置PWM波形的占空比。这决定了PWM信号的高电平时间与周期的比例。您可以使用CCRx寄存器来设置计时器中断发生的时间点,从而确定占空比。 5. 配置IO引脚:选择一个可用的IO引脚,并配置其为PWM输出模式。例如,您可以选择P1.2引脚。 下面是一个简单的示例代码,用于在MSP430F5529上输出PWM波: ```c #include <msp430.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; // 停用看门狗定时器 P1DIR |= BIT2; // 将P1.2引脚配置为输出模式 TA0CCR0 = 1000; // 设置PWM周期为1000个计数值 TA0CCTL1 = OUTMOD_7; // 设置PWM输出模式为Reset/Set模式 TA0CCR1 = 500; // 设置PWM占空比为50% TA0CTL = TASSEL_2 + MC_1 + TACLR; // 设置计时器时钟源为SMCLK,启用计数器,在设置后清除计数器 __bis_SR_register(LPM0_bits); // 进入低功耗模式0,等待中断 } #pragma vector = TIMER0_A0_VECTOR __interrupt void Timer_A(void) { // 中断处理程序 } ``` 上述示例代码配置了TimerA0模块作为PWM源,将P1.2引脚配置为PWM输出模式。通过设置TA0CCR0和TA0CCR1寄存器来设置PWM周期和占空比。在Timer_A中断处理程序中可以添加自定义的中断处理代码。 请注意,以上示例代码仅为参考,具体的配置和操作可能因您的需求和硬件环境而有所不同。您可能需要进一步查阅MSP430F5529的技术手册和用户指南以获取更详细的信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值