TI中文支持网
TI专业的中文技术问题搜集分享网站

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

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

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

    非常感谢!

Wellin Zhang:

Nick

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

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

Ken Wang:

回复 Wellin Zhang:

楼主,

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

谢谢

ken

Nick Wu:

回复 Wellin Zhang:

#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"

//*****************************************************************************voidInitConsole(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);}

//*****************************************************************************intmain(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      B7PinNo.           1        2        3       4        16       17      18      19      22      23      34      35       40      41      42      43PinName    PD0  PD1   PD2   PD3  PH0   PH1   PH2   PH3  PC7   PC6   PA6   PA7    PF0    PF1    PF2   PF3HardWare   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      D7Pin                  58      59      60       61       62      68       69      72       74       75       76       77       87      88      99      100PinName      PF7  PG3     PG2   PG1    PG0   PJ0    PJ1    PB2    PG4    PG5   PH7    PH6    PG6   PG7  PD6    PD7HardWare     T31   M11    M10    T41    T40     T10    T11    T30    M04    M05    W41    W40    M06   M07   W50   W51

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

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

辛苦你们啦!

赞(0)
未经允许不得转载:TI中文支持网 » TM4C123GE6PZ芯片 PG3、PJ0、PJ1的PWM输出问题
分享到: 更多 (0)