This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TM4C123GE6PZ芯片 PG3、PJ0、PJ1的PWM输出问题

Other Parts Discussed in Thread: TM4C123GE6PZ

    本人初用TM4系列微处理器,拿TM4C123GE6PZ芯片做32路PWM输出时,有5路工作异常(没有输出),分别是PD7、PF0、PG3、PJ0和PJ1。

    现在我知道了PD0和PF7不能用是因为他们具备NMI中断功能,设置他们需要开锁。但是PG3、PJ0和PJ1呢,他们也需要开锁吗?也有很特殊的功能吗?实际上我把PG0、PG1、PG2、PG3都用了,只有PG3工作异常,它与另外三个引脚相比哪里特殊了?

    非常感谢!

  • Nick

    PG3 PJ0 PJ1不需要进行特殊的配置。

    请问你是使用Timer输出的PWM么?能否将相关配置的代码贴出来。谢谢

  • 楼主,

      建议你把和这些管脚相关的配置代码上传一下,这样比较容易分析问题。

    谢谢

    ken


  • #include "inc/hw_memmap.h"
    #include "driverlib/pin_map.h"
    #include "inc/hw_types.h"
    #include "inc/hw_timer.h"
    #include "inc/hw_ints.h"
    #include "inc/hw_gpio.h"
    #include "driverlib/timer.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/pwm.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/gpio.h"
    #include "utils/uartstdio.h"
    #include "PWMDuty.h"

    //*****************************************************************************
    void
    InitConsole(void)
    {

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

    GPIOPinConfigure(GPIO_PA0_U0RX);
    GPIOPinConfigure(GPIO_PA1_U0TX);

    GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);

    UARTStdioInit(0);
    }

    //*****************************************************************************
    void SysSet()
    {
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
    SYSCTL_XTAL_16MHZ);
    }

    //*****************************************************************************
    void Peripherals_Enable()
    {
    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1); //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER3); //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER4); //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_WTIMER1); //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_WTIMER2); //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_WTIMER3); //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_WTIMER4); //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_WTIMER5); //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0); //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM1); //

    SysCtlPWMClockSet(SYSCTL_PWMDIV_1); //
    }

    //*****************************************************************************
    void PWMOutputPin_Init()
    {
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG); //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH); //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ); //

    HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
    HWREG(GPIO_PORTF_BASE + GPIO_O_CR) = 0xFF;
    HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
    HWREG(GPIO_PORTD_BASE + GPIO_O_CR) = 0xFF;
    HWREG(GPIO_PORTG_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
    HWREG(GPIO_PORTG_BASE + GPIO_O_CR) = 0xFF;
    HWREG(GPIO_PORTJ_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
    HWREG(GPIO_PORTJ_BASE + GPIO_O_CR) = 0xFF;

    GPIOPinConfigure(GPIO_PD0_WT2CCP0); //A0
    GPIOPinConfigure(GPIO_PD1_WT2CCP1); //A1
    GPIOPinConfigure(GPIO_PD2_WT3CCP0); //A2
    GPIOPinConfigure(GPIO_PD3_WT3CCP1); //A3
    GPIOPinConfigure(GPIO_PH0_M0PWM0); //A4
    GPIOPinConfigure(GPIO_PH1_M0PWM1); //A5
    GPIOPinConfigure(GPIO_PH2_M0PWM2); //A6
    GPIOPinConfigure(GPIO_PH3_M0PWM3); //A7

    GPIOPinConfigure(GPIO_PC7_WT1CCP1); //B0
    GPIOPinConfigure(GPIO_PC6_WT1CCP0); //B1
    GPIOPinConfigure(GPIO_PA6_M1PWM2); //B2
    GPIOPinConfigure(GPIO_PA7_M1PWM3); //B3
    GPIOPinConfigure(GPIO_PF0_M1PWM4); //B4
    GPIOPinConfigure(GPIO_PF1_M1PWM5); //B5
    GPIOPinConfigure(GPIO_PF2_M1PWM6); //B6
    GPIOPinConfigure(GPIO_PF3_M1PWM7); //B7

    GPIOPinConfigure(GPIO_PF7_T3CCP1); //C0
    GPIOPinConfigure(GPIO_PG3_M1PWM1); //C1
    GPIOPinConfigure(GPIO_PG2_M1PWM0); //C2
    GPIOPinConfigure(GPIO_PG1_T4CCP1); //C3
    GPIOPinConfigure(GPIO_PG0_T4CCP0); //C4
    GPIOPinConfigure(GPIO_PJ0_T1CCP0); //C5
    GPIOPinConfigure(GPIO_PJ1_T1CCP1); //C6
    GPIOPinConfigure(GPIO_PB2_T3CCP0); //C7

    GPIOPinConfigure(GPIO_PG4_M0PWM4); //D0
    GPIOPinConfigure(GPIO_PG5_M0PWM5); //D1
    GPIOPinConfigure(GPIO_PH7_WT4CCP1); //D2
    GPIOPinConfigure(GPIO_PH6_WT4CCP0); //D3
    GPIOPinConfigure(GPIO_PG6_M0PWM6); //D4
    GPIOPinConfigure(GPIO_PG7_M0PWM7); //D5
    GPIOPinConfigure(GPIO_PD6_WT5CCP0); //D6
    GPIOPinConfigure(GPIO_PD7_WT5CCP1); //D7


    //
    GPIOPinTypeTimer(GPIO_PORTD_BASE, GPIO_PIN_0); //A0
    GPIOPinTypeTimer(GPIO_PORTD_BASE, GPIO_PIN_1); //A1
    GPIOPinTypeTimer(GPIO_PORTD_BASE, GPIO_PIN_2); //A2
    GPIOPinTypeTimer(GPIO_PORTD_BASE, GPIO_PIN_3); //A3
    GPIOPinTypePWM(GPIO_PORTH_BASE, GPIO_PIN_0); //A4
    GPIOPinTypePWM(GPIO_PORTH_BASE, GPIO_PIN_1); //A5
    GPIOPinTypePWM(GPIO_PORTH_BASE, GPIO_PIN_2); //A6
    GPIOPinTypePWM(GPIO_PORTH_BASE, GPIO_PIN_3); //A7

    GPIOPinTypeTimer(GPIO_PORTC_BASE, GPIO_PIN_7); //B0
    GPIOPinTypeTimer(GPIO_PORTC_BASE, GPIO_PIN_6); //B1
    GPIOPinTypePWM(GPIO_PORTA_BASE, GPIO_PIN_6); //B2
    GPIOPinTypePWM(GPIO_PORTA_BASE, GPIO_PIN_7); //B3
    GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_0); //B4
    GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_1); //B5
    GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_2); //B6
    GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_3); //B7
    //
    GPIOPinTypeTimer(GPIO_PORTF_BASE, GPIO_PIN_7); //C0
    GPIOPinTypePWM(GPIO_PORTG_BASE, GPIO_PIN_3); //C1
    GPIOPinTypePWM(GPIO_PORTG_BASE, GPIO_PIN_2); //C2
    GPIOPinTypeTimer(GPIO_PORTG_BASE, GPIO_PIN_1); //C3
    GPIOPinTypeTimer(GPIO_PORTG_BASE, GPIO_PIN_0); //C4
    GPIOPinTypeTimer(GPIO_PORTJ_BASE, GPIO_PIN_0); //C5
    GPIOPinTypeTimer(GPIO_PORTJ_BASE, GPIO_PIN_1); //C6
    GPIOPinTypeTimer(GPIO_PORTB_BASE, GPIO_PIN_2); //C7

    GPIOPinTypePWM(GPIO_PORTG_BASE, GPIO_PIN_4); //D0
    GPIOPinTypePWM(GPIO_PORTG_BASE, GPIO_PIN_5); //D1
    GPIOPinTypeTimer(GPIO_PORTH_BASE, GPIO_PIN_7); //D2
    GPIOPinTypeTimer(GPIO_PORTH_BASE, GPIO_PIN_6); //D3
    GPIOPinTypePWM(GPIO_PORTG_BASE, GPIO_PIN_6); //D4
    GPIOPinTypePWM(GPIO_PORTG_BASE, GPIO_PIN_7); //D5
    GPIOPinTypeTimer(GPIO_PORTD_BASE, GPIO_PIN_6); //D6
    GPIOPinTypeTimer(GPIO_PORTD_BASE, GPIO_PIN_7); //D7
    }

    //*****************************************************************************
    void Timers_Init()
    {
    //
    TimerConfigure(TIMER1_BASE, TIMER_CFG_16_BIT_PAIR |
    TIMER_CFG_B_PWM | TIMER_CFG_A_PWM); //Timer1,2个16位计数器
    TimerConfigure(TIMER3_BASE, TIMER_CFG_16_BIT_PAIR |
    TIMER_CFG_B_PWM | TIMER_CFG_A_PWM); //Timer3,2个16位计数器
    TimerConfigure(TIMER4_BASE, TIMER_CFG_16_BIT_PAIR |
    TIMER_CFG_B_PWM | TIMER_CFG_A_PWM); //Timer4,2个16位计数器
    TimerConfigure(WTIMER1_BASE, TIMER_CFG_16_BIT_PAIR |
    TIMER_CFG_B_PWM | TIMER_CFG_A_PWM); //WTimer1,2个32位计数器
    TimerConfigure(WTIMER2_BASE, TIMER_CFG_16_BIT_PAIR |
    TIMER_CFG_B_PWM | TIMER_CFG_A_PWM); //WTimer2,2个32位计数器
    TimerConfigure(WTIMER3_BASE, TIMER_CFG_16_BIT_PAIR |
    TIMER_CFG_B_PWM | TIMER_CFG_A_PWM); //WTimer3,2个32位计数器
    TimerConfigure(WTIMER4_BASE, TIMER_CFG_16_BIT_PAIR |
    TIMER_CFG_B_PWM | TIMER_CFG_A_PWM); //WTimer4,2个32位计数器
    TimerConfigure(WTIMER5_BASE, TIMER_CFG_16_BIT_PAIR |
    TIMER_CFG_B_PWM | TIMER_CFG_A_PWM); //WTimer5,2个32位计数器
    PWMGenConfigure(PWM0_BASE, PWM_GEN_0, PWM_GEN_MODE_DOWN |
    PWM_GEN_MODE_NO_SYNC); //PWM0
    PWMGenConfigure(PWM0_BASE, PWM_GEN_1, PWM_GEN_MODE_DOWN |
    PWM_GEN_MODE_NO_SYNC); //PWM0
    PWMGenConfigure(PWM0_BASE, PWM_GEN_2, PWM_GEN_MODE_DOWN |
    PWM_GEN_MODE_NO_SYNC); //PWM0
    PWMGenConfigure(PWM0_BASE, PWM_GEN_3, PWM_GEN_MODE_DOWN |
    PWM_GEN_MODE_NO_SYNC); //PWM0
    PWMGenConfigure(PWM1_BASE, PWM_GEN_0, PWM_GEN_MODE_DOWN |
    PWM_GEN_MODE_NO_SYNC); //PWM1
    PWMGenConfigure(PWM1_BASE, PWM_GEN_1, PWM_GEN_MODE_DOWN |
    PWM_GEN_MODE_NO_SYNC); //PWM1
    PWMGenConfigure(PWM1_BASE, PWM_GEN_2, PWM_GEN_MODE_DOWN |
    PWM_GEN_MODE_NO_SYNC); //PWM1
    PWMGenConfigure(PWM1_BASE, PWM_GEN_3, PWM_GEN_MODE_DOWN |
    PWM_GEN_MODE_NO_SYNC); //PWM1

    //
    TimerControlLevel(TIMER1_BASE,TIMER_A,1);//改变PWM高低电平。
    TimerControlLevel(TIMER1_BASE,TIMER_B,1);//改变PWM高低电平。
    TimerControlLevel(TIMER3_BASE,TIMER_A,1);//改变PWM高低电平。
    TimerControlLevel(TIMER3_BASE,TIMER_B,1);//改变PWM高低电平。
    TimerControlLevel(TIMER4_BASE,TIMER_A,1);//改变PWM高低电平。
    TimerControlLevel(TIMER4_BASE,TIMER_B,1);//改变PWM高低电平。
    TimerControlLevel(WTIMER1_BASE,TIMER_A,1);//改变PWM高低电平。
    TimerControlLevel(WTIMER1_BASE,TIMER_B,1);//改变PWM高低电平。
    TimerControlLevel(WTIMER2_BASE,TIMER_A,1);//改变PWM高低电平。
    TimerControlLevel(WTIMER2_BASE,TIMER_B,1);//改变PWM高低电平。
    TimerControlLevel(WTIMER3_BASE,TIMER_A,1);//改变PWM高低电平。
    TimerControlLevel(WTIMER3_BASE,TIMER_B,1);//改变PWM高低电平。
    TimerControlLevel(WTIMER4_BASE,TIMER_A,1);//改变PWM高低电平。
    TimerControlLevel(WTIMER4_BASE,TIMER_B,1);//改变PWM高低电平。
    TimerControlLevel(WTIMER5_BASE,TIMER_A,1);//改变PWM高低电平。
    TimerControlLevel(WTIMER5_BASE,TIMER_B,1);//改变PWM高低电平。
    PWMOutputInvert(PWM0_BASE, PWM_OUT_0_BIT, 0);//改变PWM高低电平
    PWMOutputInvert(PWM0_BASE, PWM_OUT_1_BIT, 0);//改变PWM高低电平
    PWMOutputInvert(PWM0_BASE, PWM_OUT_2_BIT, 0);//改变PWM高低电平
    PWMOutputInvert(PWM0_BASE, PWM_OUT_3_BIT, 0);//改变PWM高低电平
    PWMOutputInvert(PWM0_BASE, PWM_OUT_4_BIT, 0);//改变PWM高低电平
    PWMOutputInvert(PWM0_BASE, PWM_OUT_5_BIT, 0);//改变PWM高低电平
    PWMOutputInvert(PWM0_BASE, PWM_OUT_6_BIT, 0);//改变PWM高低电平
    PWMOutputInvert(PWM0_BASE, PWM_OUT_7_BIT, 0);//改变PWM高低电平
    PWMOutputInvert(PWM1_BASE, PWM_OUT_0_BIT, 0);//改变PWM高低电平
    PWMOutputInvert(PWM1_BASE, PWM_OUT_1_BIT, 0);//改变PWM高低电平
    PWMOutputInvert(PWM1_BASE, PWM_OUT_2_BIT, 0);//改变PWM高低电平
    PWMOutputInvert(PWM1_BASE, PWM_OUT_3_BIT, 0);//改变PWM高低电平
    PWMOutputInvert(PWM1_BASE, PWM_OUT_4_BIT, 0);//改变PWM高低电平
    PWMOutputInvert(PWM1_BASE, PWM_OUT_5_BIT, 0);//改变PWM高低电平
    PWMOutputInvert(PWM1_BASE, PWM_OUT_6_BIT, 0);//改变PWM高低电平
    PWMOutputInvert(PWM1_BASE, PWM_OUT_7_BIT, 0);//改变PWM高低电平


    //注意:修改频率时,若用定时器,则n+1才是计数值;若用专用PWM输出,则n即是计数值
    TimerLoadSet(TIMER1_BASE, TIMER_B, 1999); //改PWM频率,
    TimerLoadSet(TIMER1_BASE, TIMER_A, 1999); //改PWM频率,
    TimerLoadSet(TIMER3_BASE, TIMER_B, 1999); //改PWM频率,
    TimerLoadSet(TIMER3_BASE, TIMER_A, 1999); //改PWM频率,
    TimerLoadSet(TIMER4_BASE, TIMER_B, 1999); //改PWM频率,
    TimerLoadSet(TIMER4_BASE, TIMER_A, 1999); //改PWM频率,
    TimerLoadSet(WTIMER1_BASE, TIMER_B, 1999); //改PWM频率,
    TimerLoadSet(WTIMER1_BASE, TIMER_A, 1999); //改PWM频率,
    TimerLoadSet(WTIMER2_BASE, TIMER_B, 1999); //改PWM频率,
    TimerLoadSet(WTIMER2_BASE, TIMER_A, 1999); //改PWM频率,
    TimerLoadSet(WTIMER3_BASE, TIMER_B, 1999); //改PWM频率,
    TimerLoadSet(WTIMER3_BASE, TIMER_A, 1999); //改PWM频率,
    TimerLoadSet(WTIMER4_BASE, TIMER_B, 1999); //改PWM频率,
    TimerLoadSet(WTIMER4_BASE, TIMER_A, 1999); //改PWM频率,
    TimerLoadSet(WTIMER5_BASE, TIMER_B, 1999); //改PWM频率,
    TimerLoadSet(WTIMER5_BASE, TIMER_A, 1999); //改PWM频率,
    PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0, 2000);//改PWM频率,
    PWMGenPeriodSet(PWM0_BASE, PWM_GEN_1, 2000);//改PWM频率,
    PWMGenPeriodSet(PWM0_BASE, PWM_GEN_2, 2000);//改PWM频率,
    PWMGenPeriodSet(PWM0_BASE, PWM_GEN_3, 2000);//改PWM频率,
    PWMGenPeriodSet(PWM1_BASE, PWM_GEN_0, 2000);//改PWM频率,
    PWMGenPeriodSet(PWM1_BASE, PWM_GEN_1, 2000);//改PWM频率,
    PWMGenPeriodSet(PWM1_BASE, PWM_GEN_2, 2000);//改PWM频率,
    PWMGenPeriodSet(PWM1_BASE, PWM_GEN_3, 2000);//改PWM频率,

    // Set Timers match value to load value / 3.
    //
    //注意:修改占空比时,若用定时器,则n+1才是计数值;若用专用PWM输出,则n即是计数值
    TimerMatchSet(TIMER1_BASE, TIMER_B,999); //改PWM占空比。n+1=脉宽计数值
    TimerMatchSet(TIMER1_BASE, TIMER_A,999); //改PWM占空比。n+1=脉宽计数值
    TimerMatchSet(TIMER3_BASE, TIMER_B,999); //改PWM占空比。n+1=脉宽计数值
    TimerMatchSet(TIMER3_BASE, TIMER_A,999); //改PWM占空比。n+1=脉宽计数值
    TimerMatchSet(TIMER4_BASE, TIMER_B,999); //改PWM占空比。n+1=脉宽计数值
    TimerMatchSet(TIMER4_BASE, TIMER_A,999); //改PWM占空比。n+1=脉宽计数值
    TimerMatchSet(WTIMER1_BASE, TIMER_B,999); //改PWM占空比。n+1=脉宽计数值
    TimerMatchSet(WTIMER1_BASE, TIMER_A,999); //改PWM占空比。n+1=脉宽计数值
    TimerMatchSet(WTIMER2_BASE, TIMER_B,999); //改PWM占空比。n+1=脉宽计数值
    TimerMatchSet(WTIMER2_BASE, TIMER_A,999); //改PWM占空比。n+1=脉宽计数值
    TimerMatchSet(WTIMER3_BASE, TIMER_B,999); //改PWM占空比。n+1=脉宽计数值
    TimerMatchSet(WTIMER3_BASE, TIMER_A,999); //改PWM占空比。n+1=脉宽计数值
    TimerMatchSet(WTIMER4_BASE, TIMER_B,999); //改PWM占空比。n+1=脉宽计数值
    TimerMatchSet(WTIMER4_BASE, TIMER_A,999); //改PWM占空比。n+1=脉宽计数值
    TimerMatchSet(WTIMER5_BASE, TIMER_B,999); //改PWM占空比。n+1=脉宽计数值
    TimerMatchSet(WTIMER5_BASE, TIMER_A,999); //改PWM占空比。n+1=脉宽计数值
    PWMPulseWidthSet(PWM0_BASE, PWM_OUT_0,1000); //改PWM占空比。n=脉宽计数值
    PWMPulseWidthSet(PWM0_BASE, PWM_OUT_1,1000); //改PWM占空比。n=脉宽计数值
    PWMPulseWidthSet(PWM0_BASE, PWM_OUT_2,1000); //改PWM占空比。n=脉宽计数值
    PWMPulseWidthSet(PWM0_BASE, PWM_OUT_3,1000); //改PWM占空比。n=脉宽计数值
    PWMPulseWidthSet(PWM0_BASE, PWM_OUT_4,1000); //改PWM占空比。n=脉宽计数值
    PWMPulseWidthSet(PWM0_BASE, PWM_OUT_5,1000); //改PWM占空比。n=脉宽计数值
    PWMPulseWidthSet(PWM0_BASE, PWM_OUT_6,1000); //改PWM占空比。n=脉宽计数值
    PWMPulseWidthSet(PWM0_BASE, PWM_OUT_7,1000); //改PWM占空比。n=脉宽计数值
    PWMPulseWidthSet(PWM1_BASE, PWM_OUT_0,1000); //改PWM占空比。n=脉宽计数值
    PWMPulseWidthSet(PWM1_BASE, PWM_OUT_1,1000); //改PWM占空比。n=脉宽计数值
    PWMPulseWidthSet(PWM1_BASE, PWM_OUT_2,1000); //改PWM占空比。n=脉宽计数值
    PWMPulseWidthSet(PWM1_BASE, PWM_OUT_3,1000); //改PWM占空比。n=脉宽计数值
    PWMPulseWidthSet(PWM1_BASE, PWM_OUT_4,1000); //改PWM占空比。n=脉宽计数值
    PWMPulseWidthSet(PWM1_BASE, PWM_OUT_5,1000); //改PWM占空比。n=脉宽计数值
    PWMPulseWidthSet(PWM1_BASE, PWM_OUT_6,1000); //改PWM占空比。n=脉宽计数值
    PWMPulseWidthSet(PWM1_BASE, PWM_OUT_7,1000); //改PWM占空比。n=脉宽计数值

    //
    // Enable Timers.
    //
    TimerEnable(TIMER1_BASE, TIMER_B); /////////////
    TimerEnable(TIMER1_BASE, TIMER_A); /////////////
    TimerEnable(TIMER3_BASE, TIMER_B); /////////////
    TimerEnable(TIMER3_BASE, TIMER_A); /////////////
    TimerEnable(TIMER4_BASE, TIMER_B); /////////////
    TimerEnable(TIMER4_BASE, TIMER_A); /////////////
    TimerEnable(WTIMER1_BASE, TIMER_B); /////////////
    TimerEnable(WTIMER1_BASE, TIMER_A); /////////////
    TimerEnable(WTIMER2_BASE, TIMER_B); /////////////
    TimerEnable(WTIMER2_BASE, TIMER_A); /////////////
    TimerEnable(WTIMER3_BASE, TIMER_B); /////////////
    TimerEnable(WTIMER3_BASE, TIMER_A); /////////////
    TimerEnable(WTIMER4_BASE, TIMER_B); /////////////
    TimerEnable(WTIMER4_BASE, TIMER_A); /////////////
    TimerEnable(WTIMER5_BASE, TIMER_B); /////////////
    TimerEnable(WTIMER5_BASE, TIMER_A); /////////////
    //
    PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT | PWM_OUT_1_BIT | PWM_OUT_2_BIT
    | PWM_OUT_3_BIT | PWM_OUT_4_BIT | PWM_OUT_5_BIT | PWM_OUT_6_BIT
    | PWM_OUT_7_BIT, true);//////////////
    PWMGenEnable(PWM0_BASE, PWM_GEN_0);
    PWMGenEnable(PWM0_BASE, PWM_GEN_1);
    PWMGenEnable(PWM0_BASE, PWM_GEN_2);
    PWMGenEnable(PWM0_BASE, PWM_GEN_3);
    PWMOutputState(PWM1_BASE, PWM_OUT_0_BIT | PWM_OUT_1_BIT | PWM_OUT_2_BIT
    | PWM_OUT_3_BIT | PWM_OUT_4_BIT | PWM_OUT_5_BIT | PWM_OUT_6_BIT
    | PWM_OUT_7_BIT, true);//////////////
    PWMGenEnable(PWM1_BASE, PWM_GEN_0);
    PWMGenEnable(PWM1_BASE, PWM_GEN_1);
    PWMGenEnable(PWM1_BASE, PWM_GEN_2);
    PWMGenEnable(PWM1_BASE, PWM_GEN_3);
    }

    //*****************************************************************************
    int
    main(void)
    {

    SysSet();
    Peripherals_Enable();
    InitConsole();
    PWMOutputPin_Init();
    Timers_Init();
    while(1);
    }

    以上是相关程序,下面是管脚分配图

    PWM 输出引脚图
    Port               A0      A1      A2     A3      A4       A5      A6      A7      B0      B1      B2      B3      B4      B5      B6      B7
    PinNo.           1        2        3       4        16       17      18      19      22      23      34      35       40      41      42      43
    PinName    PD0  PD1   PD2   PD3  PH0   PH1   PH2   PH3  PC7   PC6   PA6   PA7    PF0    PF1    PF2   PF3
    HardWare   W20 W21  W30  W31   M00    M01   M02   M03  W11   W10   M12   M13    M14   M15    M16  M17

    Port                C0      C1      C2      C3      C4      C5      C6      C7      D0      D1      D2      D3      D4      D5      D6      D7
    Pin                  58      59      60       61       62      68       69      72       74       75       76       77       87      88      99      100
    PinName      PF7  PG3     PG2   PG1    PG0   PJ0    PJ1    PB2    PG4    PG5   PH7    PH6    PG6   PG7  PD6    PD7
    HardWare     T31   M11    M10    T41    T40     T10    T11    T30    M04    M05    W41    W40    M06   M07   W50   W51

    W : Wide Timer
    M : Motion Control Module
    T : Timer
    末位的0与1,可能表示A与B。即T31表示TIMER3_BASE的TIMER_B。
    使用资源:T1 T3 T4 W1 W2 W3 W4 W5 M0 M1
    未使用资源:T0 T2 T5 W0

    这程序写得比较长,因为相同的配置要写好多遍,但是也正因为如此,看起来不太费力。

    辛苦你们啦!