K22F系列单片机 时钟问题(已解决)

2020-02-20 20:55发布

本帖最后由 FSL_TICS_Robin 于 2014-11-27 14:13 编辑

楼主小白,最近在用飞思卡尔的MK22FN512VLH12芯片做一个小的项目,开发时使用官方SDK中的代码搭建了程序的基本框架。在时钟上有个问题,希望能得到解答

进入main函数之后,我通过官方SDK的HAL函数,获取了几个关键的时钟信息如下:
MCG OUT Clock = 180MHz
Core Clock = 180Mhz
System Clock = 180Mhz
Bus Clock = 90MHz
FlexBus Clock = 90MHz
Flash Clock = 36MHz

当前的运行模式为High Speed Run;
MCG模式为PEE,使用外部12M晶振,PLL使能;

时钟的关系图如下:
QQ截图20141025195706.png (91.45 KB, 下载次数: 0) 下载附件 2014-10-25 19:57 上传

附上启动代码中system_MK22F51212.h的时钟配置信息: CLOCK_SETUP 已定义为4

#elif (CLOCK_SETUP == 4)
  #define DEFAULT_SYSTEM_CLOCK         120000000u          /* Default System clock value */
  #define MCG_MODE                     MCG_MODE_PEE /* Clock generator mode */
  /* MCG_C1: CLKS=0,FRDIV=3,IREFS=0,IRCLKEN=1,IREFSTEN=0 */
  #define SYSTEM_MCG_C1_VALUE          0x1AU               /* MCG_C1 */
  /* MCG_C2: LOCRE0=0,FCFTRIM=0,RANGE=2,HGO=0,EREFS=1,LP=0,IRCS=0 */
  #define SYSTEM_MCG_C2_VALUE          0x24U               /* MCG_C2 */
  /* MCG_C4: DMX32=0,DRST_DRS=0,FCTRIM=0,SCFTRIM=0 */
  #define SYSTEM_MCG_C4_VALUE          0x00U               /* MCG_C4 */
  /* MCG_SC: ATME=0,ATMS=0,ATMF=0,FLTPRSRV=0,FCRDIV=0,LOCS0=0 */
  #define SYSTEM_MCG_SC_VALUE          0x00U               /* MCG_SC */
/* MCG_C5: PLLCLKEN0=0,PLLSTEN0=0,PRDIV0=1 */
  #define SYSTEM_MCG_C5_VALUE          0x01U               /* MCG_C5 */
/* MCG_C6: LOLIE0=0,PLLS=1,CME0=0,VDIV0=6 */
  #define SYSTEM_MCG_C6_VALUE          0x46U               /* MCG_C6 */
/* MCG_C7: OSCSEL=0 */
  #define SYSTEM_MCG_C7_VALUE          0x00U               /* MCG_C7 */
/* OSC_CR: ERCLKEN=1,EREFSTEN=0,SC2P=0,SC4P=0,SC8P=0,SC16P=0 */
  #define SYSTEM_OSC_CR_VALUE          0x80U               /* OSC_CR */
/* SMC_PMCTRL: RUNM=3,STOPA=0,STOPM=0 */
  #define SYSTEM_SMC_PMCTRL_VALUE      0x60U               /* SMC_PMCTRL */
/* SIM_CLKDIV1: OUTDIV1=0,OUTDIV2=1,OUTDIV3=1,OUTDIV4=4 */
  #define SYSTEM_SIM_CLKDIV1_VALUE     0x01140000U         /* SIM_CLKDIV1 */
/* SIM_CLKDIV2: USBDIV=4,USBFRAC=1 */
  #define SYSTEM_SIM_CLKDIV2_VALUE     0x09U               /* SIM_CLKDIV2 */
/* SIM_SOPT1: USBREGEN=0,USBSSTBY=0,USBVSTBY=0,OSC32KSEL=2,OSC32KOUT=0,RAMSIZE=0 */
  #define SYSTEM_SIM_SOPT1_VALUE       0x00080000U         /* SIM_SOPT1 */
/* SIM_SOPT2: LPUARTSRC=0,USBSRC=0,PLLFLLSEL=1,TRACECLKSEL=0,FBSL=0,CLKOUTSEL=0,RTCCLKOUTSEL=0 */
  #define SYSTEM_SIM_SOPT2_VALUE       0x00010000U         /* SIM_SOPT2 */


为何我获取的主频,比参考手册上的主频还要高呢?难道这款芯片支持超频么?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
heyueming0
2020-02-22 04:01
找到问题所在了,以下这个寄存器配置将外部时钟12Mhz进行2分频后,进入PLL倍频30倍,所以变成了180Mhz
#define SYSTEM_MCG_C5_VALUE          0x01U               /* MCG_C5 */

而实际应该讲外部时钟12Mhz进行3分频到4Mhz。手册中规定的PLL倍频的输入频率为2~4Mhz,这个寄存器没有修改,导致了最终输出的频率变高。
不过这样看起来也可以正常使用呢。

一周热门 更多>