本人初用TM4系列微处理器,拿TM4C123GE6PZ芯片做32路PWM输出时,有5路工作异常(没有输出),分别是PD7、PF0、PG3、PJ0和PJ1。
现在我知道了PD0和PF7不能用是因为他们具备NMI中断功能,设置他们需要开锁。但是PG3、PJ0和PJ1呢,他们也需要开锁吗?也有很特殊的功能吗?实际上我把PG0、PG1、PG2、PG3都用了,只有PG3工作异常,它与另外三个引脚相比哪里特殊了?
非常感谢!
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.
本人初用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
这程序写得比较长,因为相同的配置要写好多遍,但是也正因为如此,看起来不太费力。
辛苦你们啦!