|
刚入手了lm4f120,调PWM波的时候遇到了总是跑死在莫名其妙的地方
[复制链接]
开发环境是keil realview mdk,源代码附在后面。主要问题有两个:
1.配置GPIO时使用GPIOPinConfigure函数,而GPIO_PXX_M0PWM0在Pin_map.h里LM4F120部分没有找到。故使用自己查到的地址,但下载后无方波输出。
2.debug时发现跑死在PWMGenConfigure()一句,追踪发现跑死在其中的- //
- HWREG(ulGen + PWM_O_X_CTL) = ((HWREG(ulGen + PWM_O_X_CTL) &
- ~(PWM_X_CTL_MODE | PWM_X_CTL_DEBUG |
- PWM_X_CTL_LATCH | PWM_X_CTL_MINFLTPER |
- PWM_X_CTL_FLTSRC | PWM_X_CTL_DBFALLUPD_M |
- PWM_X_CTL_DBRISEUPD_M |
- PWM_X_CTL_DBCTLUPD_M |
- PWM_X_CTL_GENBUPD_M |
- PWM_X_CTL_GENAUPD_M |
- PWM_X_CTL_LOADUPD | PWM_X_CTL_CMPAUPD |
- PWM_X_CTL_CMPBUPD)) | ulConfig);
复制代码 处,进入FaultISR中断。不知何故,虚心求教。
- int main (void)
- {
- //设置系统时钟为80MHz
- SysCtlClockSet(SYSCTL_SYSDIV_2_5 |SYSCTL_USE_PLL|SYSCTL_OSC_MAIN |SYSCTL_XTAL_16MHZ);
- SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);//使能PWM0模块
- SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);//使能PWM0和PWM1输出所在GPIO
- GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_6);
- GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_7);//配置PWM功能
- GPIOPinConfigure(GPIO_PB6_M0PWM0);
- GPIOPinConfigure(GPIO_PB7_M0PWM1);
- SysCtlPWMClockSet(SYSCTL_PWMDIV_1); // PWM时钟配置:不分频
- //配置PWM发生器0:加减计数,不同步
- PWMGenConfigure(PWM0_BASE,PWM_GEN_0,PWM_GEN_MODE_UP_DOWN| PWM_GEN_MODE_NO_SYNC);
- //设置PWM发生器1的频率,时钟频率/PWM分频数/n,80M/1/800=100KHZ
- PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0, 800);
- //设置PWM0/PWM1输出的脉冲宽度
- PWMPulseWidthSet(PWM0_BASE, PWM_OUT_0, 400);//50%占空比
- PWMPulseWidthSet(PWM0_BASE, PWM_OUT_1, 200);//25%占空比
- //使能PWM0和PWM1的输出
- PWMOutputState(PWM0_BASE, (PWM_OUT_0_BIT |PWM_OUT_1_BIT), true);
- //使能PWM发生器
- PWMGenEnable(PWM0_BASE, PWM_GEN_0);
- while(1)
- {
- };
- }
复制代码
|
|