本帖最后由 wangpengcheng 于 2014-2-27 22:02 编辑
实验板:FRDM-KE02Z
编译环境:KEIL4.72a
实验过程:
KE02库文件Demo中,在KE02_Config.h中,配置时钟为 :
#define USE_FBE_OSC
#define EXT_CLK_FREQ_KHZ 10000 /* in KHz */
然后编译执行,结果程序运行到ICS.c文件中的void FEI_to_FBE_OSC(ICS_ConfigType *pConfig)函数里面的while(((ICS->S & ICS_S_CLKST_MASK) >> ICS_S_CLKST_SHIFT) !=2);语句,开始死循环。
问题原因:在ICS.c文件中的void ICS_Init(ICS_ConfigType *pConfig)函数中
else if (pConfig->u8ClkMode == ICS_CLK_MODE_FBE_OSC)
{
pConfig->oscConfig.bIsCryst = 0; /* is clock */
FEI_to_FBE_OSC(pConfig); /* switch to FBE mode with active oscillator input */
}
其中红 {MOD}的语句代表关掉外部晶振,应该是
else if (pConfig->u8ClkMode == ICS_CLK_MODE_FBE_OSC)
{
pConfig->oscConfig.bIsCryst = 1; /* is clock */
FEI_to_FBE_OSC(pConfig); /* switch to FBE mode with active oscillator input */
}
才对。
另外这样配置出来的BUS时钟是5M,默认除2了,所以在KE02_Config.h中应该将Bus时钟设置为下面的值
#define BUS_CLK_HZ 5000000L
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
内部电容是匹配好的,就是Murata的内置电容的陶振。 换过几个都是振不起来。 换8M的就能很稳定的振起来。看来还是不要用20M的了。
一周热门 更多>