C 在上行模式下使用TimerA生成3个PWM信号,频率为2 kHz,占空比P1.4为10%,P1.3为30%,P1.2为60%;OUTMOD_7信号

C 在上行模式下使用TimerA生成3个PWM信号,频率为2 kHz,占空比P1.4为10%,P1.3为30%,P1.2为60%;OUTMOD_7信号,c,embedded,C,Embedded,我正在使用和MSP430F5529开发板,一个创建的PCB和CCS来编程。我的代码如下: #include <msp430.h> int main(void) { WDTCTL = WDTPW | WDTHOLD; //stop watchdog timer P1SEL |= BIT2; //configure P1.2 as TA0.2 P1DIR |= BIT2;

我正在使用和MSP430F5529开发板,一个创建的PCB和CCS来编程。我的代码如下:

#include <msp430.h>


int main(void)
{
   
    WDTCTL = WDTPW | WDTHOLD;       //stop watchdog timer
    
    P1SEL |= BIT2;                  //configure P1.2 as TA0.2
    P1DIR |= BIT2;                  //P1.2 is output (compare mode)
    P1SEL |= BIT3;                  //configure P1.3 as TA0.3
    P1DIR |= BIT3;                  //P1.3 is output (compare mode)
    P1SEL |= BIT4;                  //configure P1.4 as TA0.4
    P1DIR |= BIT4;                  //P1.4 is output (compare mode)

    TA0CCR0 = 999;                  //CCR0 is used to generate the desired period
    TA0CCR2 = 599;                  //CCR2 is used to generate 0.60 duty cycle
    TA0CCR3 = 299;                  //CCR3 is used to generate 0.30 duty cycle
    TA0CCR4 = 99;                   //CCR4 is used to generate 0.10 duty cycle


    TA0CCTL2 = OUTMOD_7;            //PWM 2
    TA0CCTL3 = OUTMOD_7;            //PWM 3
    TA0CCTL4 = OUTMOD_7;            //PWM 4

    TA0CTL = MC_1 + TASSEL_2 + TACLR|ID_2;
    _BIS_SR(LPM0_bits+GIE);
}
#包括
内部主(空)
{
WDTCTL=WDTPW | WDTHOLD;//停止看门狗定时器
P1SEL |=位2;//将P1.2配置为TA0.2
P1DIR |=BIT2;//P1.2为输出(比较模式)
P1SEL |=位3;//将P1.3配置为TA0.3
P1DIR |=BIT3;//P1.3为输出(比较模式)
P1SEL |=位4;//将P1.4配置为TA0.4
P1DIR |=BIT4;//P1.4为输出(比较模式)
TA0CCR0=999;//CCR0用于生成所需的周期
TA0CCR2=599;//CCR2用于产生0.60占空比
TA0CCR3=299;//CCR3用于产生0.30占空比
TA0CCR4=99;//CCR4用于产生0.10占空比
TA0CCTL2=OUTMOD_7;//脉宽调制2
TA0CCTL3=OUTMOD_7;//脉宽调制3
TA0CCTL4=OUTMOD_7;//脉宽调制4
TA0CTL=MC_1+TASSEL_2+TACLR | ID_2;
_BIS_SR(LPM0_位+GIE);
}
没有一个LED使用此代码打开,我不确定如何修复它。

您在裸机MCU程序中从main()返回,因此它将在有机会执行任何有意义的操作之前崩溃并烧坏

在独立程序中编写main()最常见的方法是:

void main (void)
{
   ...

   for(;;)
   { 
     // kick watchdog here
     ...
   }
}
值得注意的是,这永远不会从main()返回,而是停留在“永远”循环中

voidmain(void)
是每个嵌入式系统编译器都支持的一种实现定义的形式。(要在gcc上使用此表单,您必须使用
-ffreestanding
编译)

阅读整个文档