本帖最后由 一只耳朵怪 于 2018-6-8 10:37 编辑
本人使用的器件是LM3S811。因需要25M左右的方波输出,采用的是PWM模块是需要使用PLL对外部6MHz晶振进行倍频,系统时钟200MHz。使用的时钟设置代码如下:
SysCtlLDOSet(SYSCTL_LDO_2_75V);//设置LDO电压为2.75V
SysCtlDelay(3000);//LDO电压稳定
SysCtlClockSet(
SYSCTL_SYSDIV_1
|SYSCTL_USE_PLL
|SYSCTL_OSC_MAIN
|SYSCTL_XTAL_6MHZ
);//设置时钟
SysCtlDelay(3000);
//----分割线------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
然后我用配置了PWM输出
SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM);
GPIOPinTypePWM(GPIO_PORTD_BASE,GPIO_PIN_0);
PWMGenConfigure(PWM_BASE, PWM_GEN_0,
PWM_GEN_MODE_UP_DOWN |
PWM_GEN_MODE_NO_SYNC);
//!!!
PWMGenPeriodSet(PWM_BASE, PWM_GEN_0, 8);
//!!!
PWMPulseWidthSet(PWM_BASE, PWM_OUT_0,
PWMGenPeriodGet(PWM_BASE,PWM_OUT_0)/2+1);
PWMOutputState(PWM_BASE, PWM_OUT_0_BIT, true);
PWMGenEnable(PWM_BASE, PWM_GEN_0);
如果时钟正确配置,那么输出的频率应该是200M/8=25MHz
但是,最后得出的PWM频率大约1.5MHz,说明实际使用的时钟却是12MHz,时钟配置不正确。何故?(我已经实现设置了LDO电压)
2018-6-7 06:56:25
SysCtlClockSet(
SYSCTL_SYSDIV_1
|SYSCTL_USE_PLL
|SYSCTL_OSC_MAIN
|SYSCTL_XTAL_6MHZ
);
外部晶振: (4M,16M).
内部倍频到400M,经过内部分频到200M
最后系统频率: 200M/SYSDIV
按lz的用法肯定超过系统时钟,LM3S811最大工作频50M,故如下设置就是50M工作频率了。
SysCtlClockSet(
SYSCTL_SYSDIV_4
|SYSCTL_USE_PLL
|SYSCTL_OSC_MAIN
|SYSCTL_XTAL_6MHZ
);
SysCtlClockSet(
SYSCTL_SYSDIV_1
|SYSCTL_USE_PLL
|SYSCTL_OSC_MAIN
|SYSCTL_XTAL_6MHZ
);
外部晶振: (4M,16M).
内部倍频到400M,经过内部分频到200M
最后系统频率: 200M/SYSDIV
按lz的用法肯定超过系统时钟,LM3S811最大工作频50M,故如下设置就是50M工作频率了。
SysCtlClockSet(
SYSCTL_SYSDIV_4
|SYSCTL_USE_PLL
|SYSCTL_OSC_MAIN
|SYSCTL_XTAL_6MHZ
);
举报
2018-6-7 07:27:03
时钟设置请参考帖子
www.deyisupport.com/.../1893.aspx
时钟设置请参考帖子
www.deyisupport.com/.../1893.aspx
举报