本人初用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
这程序写得比较长,因为相同的配置要写好多遍,但是也正因为如此,看起来不太费力。
辛苦你们啦!
TI中文支持网
