|
我用的芯片是LM3S2B93,Keil4工程,调试PWM时怎么也产生不了PWM,其他功能正常,大家帮忙看下是怎么回事啊~急急!!
unsigned long gSysClock = 12000000UL;
#define PWM_FREQ 6000 //PWM频率,单位HZ
//管脚复用情况
#define PJ0_PWM0 GPIO_PIN_0
#define PG3_PWM1 GPIO_PIN_3
#define PD2_PWM2 GPIO_PIN_2
#define PD3_PWM3 GPIO_PIN_3
#define PG0_PWM4 GPIO_PIN_0
#define PH7_PWM5 GPIO_PIN_7
/*********************************************************************************************************
** Function name: void PWMInit (void)
** Descriptions: PWM模块初始化
** input parameters: NONE
** output parameters: NONE
** Returned value: NONE
*********************************************************************************************************/
void PWMInit (void)
{
int32U Period = 0;
SysCtlPWMClockSet(SYSCTL_PWMDIV_1); // PWM时钟配置:不分频
SysCtlPeriEnable(SYSCTL_PERIPH_PWM); // 使能PWM模块 时钟
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOD); // 使能PWM2和PWM3输出所在GPIO
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOH); // 使能PWM5输出所在GPIO
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOG); // 使能PWM1和PWM4输出所在GPIO
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOJ); // 使能PWM0输出所在GPIO
GPIOPinTypePWM(GPIO_PORTJ_BASE, GPIO_PIN_0); // PJO配置为PWM0功能
GPIOPinTypePWM(GPIO_PORTG_BASE, GPIO_PIN_3); // PG3配置为PWM1功能
GPIOPinTypePWM(GPIO_PORTD_BASE, GPIO_PIN_2); // PD2配置为PWM2功能
GPIOPinTypePWM(GPIO_PORTD_BASE, GPIO_PIN_3); // PD3配置为PWM3功能
GPIOPinTypePWM(GPIO_PORTG_BASE, GPIO_PIN_0); // PG0配置为PWM4功能
GPIOPinTypePWM(GPIO_PORTH_BASE, GPIO_PIN_7); // PH7配置为pwm5功能
// 配置PWM发生器0:加减计数
PWMGenConfigure(PWM_BASE, PWM_GEN_0|PWM_GEN_1|PWM_GEN_2, PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);
Period = gSysClock / PWM_FREQ;
PWMGenPeriodSet(PWM_BASE, PWM_GEN_0|PWM_GEN_1|PWM_GEN_2, Period); // 设置PWM周期T = (1s/gSysClock)*Period
PWMPulseWidthSet(PWM_BASE, PWM_OUT_0|PWM_OUT_1|PWM_OUT_2|PWM_OUT_3
|PWM_OUT_4|PWM_OUT_5, Period / 2); //占空比50 %
PWMOutputState(PWM_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, true); //允许PWM输出
PWMGenEnable(PWM_BASE, PWM_GEN_0|PWM_GEN_1|PWM_GEN_2); // 在PWM0 PWM1 PWM2通道产生PWM波形
}
// 系统时钟初始化
void clockInit(void)
{
/*
SysCtlLDOSet(SYSCTL_LDO_2_50V); // 设置LDO输出电压
SysCtlClockSet(SYSCTL_USE_OSC | // 系统时钟设置
SYSCTL_OSC_MAIN | // 采用主振荡器
SYSCTL_XTAL_12MHZ | // 外接12MHz晶振
SYSCTL_SYSDIV_1); // 不分频
*/
SysCtlLDOSet(SYSCTL_LDO_2_75V); // 配置PLL前须将LDO设为2.75V
SysCtlClockSet(SYSCTL_USE_PLL | // 系统时钟设置,采用PLL
SYSCTL_OSC_MAIN | // 主振荡器
SYSCTL_XTAL_12MHZ | // 外接12MHz晶振
SYSCTL_SYSDIV_4); // 200MHz 分频结果为50MHz
gSysClock = SysCtlClockGet(); // 获取当前的系统时钟频率
}
// 主函数(程序入口)
int main (void)
{
clockInit(); // 时钟初始化:晶振,6MHz
PWMInit();
SysCtlPeriEnable(LED_PERIPH); // 使能LED所在的GPIO端口
GPIOPinTypeOut(LED_PORT, LED_PIN); // 设置LED所在管脚为输出
while(1)
{
GPIOPinWrite(LED_PORT,LED_PIN,~GPIOPinRead(LED_PORT,LED_PIN)); //PC4取反
SysCtlDelay(500* (gSysClock / 3000)); // 延时500ms
}
}
|
|