最近在調(diào)試一款產(chǎn)品,需要同時輸出3路不同占空比的PWM,看了很多資料和例程,發(fā)現(xiàn)很多都是單路的,也有很多多路的,經(jīng)過測試后發(fā)現(xiàn)只能同時輸出3路不同占空比的PWM,將程序公布如下,經(jīng)過測試了,需要改變CCR0可以改變頻率,改變CCR1和 CCR2可以改變占空比; void tapwm(void) { //引腳設(shè)置(暫時使用P1.2輸出一路PWM)TA0定時器只有P1.2/P1.6/P2.6 可以輸出PWM,而TA1定時器則有P2.1\P2.2\P2.4\P2.5輸出一共可以輸出3路不同占空比的PWM,2個頻率的 // TA0支持的引腳有P1.1、P1.2、P1.5、P1.6、P2.6(P2.6一般不用,因為要接晶振哦)只有P1.2、P1.6、P2.6輸出CCR1 /* TA0CTL = TASSEL_2 + TACLR; // 設(shè)置定時器A控制寄存器,// TACLR=0x0004,清除定時器A計數(shù)器// TASSEL2=0x1000,Timer A clock source select: 2 - SMCLK TA0CCR0 =400; //始終為 8MHz,設(shè)置中斷頻率為10K TA0CCTL1 = OUTMOD_7; // CCR1 reset/set模式7.當(dāng)計數(shù)器計至CCTL1時TA0清零,至CCR0時TA0置1 TA0CCR1 = 100; // CCR1 PWM 任務(wù)周期 TA0CCTL2 = OUTMOD_7; // CCR2 reset/set模式7.當(dāng)計數(shù)器計至CCTL2時TA1清零,至CCR0時TA1置1 TA0CCR2 = 300; // CCR2 PWM 任務(wù)周期 P2DIR |= BIT6 ; // P2.6 P2.0 輸出 P2SEL |= BIT6 ; // P2.6 TA0模式 輸出CCR1 P1DIR |= BIT2 + BIT6; // P1.2 P1.6 TA0模式 輸出CCR1 P1SEL |= BIT2 + BIT6; // P1.2 P1.6 TA0模式 輸出CCR1 TA0CTL |= MC_1; // 增模式啟動Timer_A */ // TA1支持的引腳有P2.1 P2.2 P2.4 P2.5 可以輸出2路不同占空比的PWM(CCR1/CCR2) TA1CTL = TASSEL_2 + TACLR; // 設(shè)置定時器A控制寄存器,// TACLR=0x0004,清除定時器A計數(shù)器// TASSEL2=0x1000,Timer A clock source select: 2 - SMCLK TA1CCR0 =400; //始終為 8MHz,設(shè)置中斷頻率為10K TA1CCTL1 = OUTMOD_7; // CCR1 reset/set模式7.當(dāng)計數(shù)器計至CCTL1時TA0清零,至CCR0時TA0置1 TA1CCR1 = 100; // CCR1 PWM 任務(wù)周期 TA1CCTL2 = OUTMOD_7; // CCR2 reset/set模式7.當(dāng)計數(shù)器計至CCTL2時TA1清零,至CCR0時TA1置1 TA1CCR2 = 300; // CCR2 PWM 任務(wù)周期 P2DIR |= BIT1 + BIT2 + BIT4 + BIT5; // P2.1 P2.2 P2.4 P2.5 輸出 P2SEL |= BIT1 + BIT2 + BIT4 + BIT5; // P2.1 P2.2 TA1模式 輸出CCR1 P2.4 P2.5 TA1模式 輸出CCR2 TA1CTL |= MC_1; }