本帖最后由 ligongxiaobie 于 2015-9-20 17:01 编辑 chifen 发表于 2015-9-20 13:12 前辈 不如咱们换个角度去想这个问题, // RCC_PLLConfig(RCC_PREDIV1_Div2, RCC_PLLMul_6); // RCC_PLLCmd(ENABLE); // while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) ; // RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK ); // while(RCC_GetSYSCLKSource() != 0x08); RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE); 如果我这样注释掉这几段代码 即为不适用PLL,然后直接应用HSE为主频时钟,这个时候主频确实是24MHZ, 即为应用了外部晶振。 但是这个时候串口发送数据就不对了!! 高四位在几个固定数据上有乱码。 这个 时候如果换成16MHZ的外部晶振,则主频即为16MHZ。但是串口依然有部分乱码!! 我修改了这个HSE_VALUE宏定义的值,在24MHZ的晶振下改为24000000,串口就正确了。 同样,在16MHZ的晶振下改为16000000,就也正确了。 但是这是在我直接应用HSE为系统时钟的时候这样可以,但是如果我还是想用PLL,则还是出现应用内部8MHZ的HSI,这个时候如果我更改#define HSI_VALUE ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz*/ 比如改为24,那么串口就不好使了,而且系统时钟也紊乱了。。。 不过还是很开心,起码终于用上了外部时钟,而且一切正常了。 但是最开始的问题还是没解决,比如用外部时钟倍频到24MHZ,因为这次我用的是外部晶振24MHZ, 那么以后如果我用其他频率的改怎么办呢?? |
|