// 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
}