heyueming0 发表于 2014-10-25 20:00:55

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

本帖最后由 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使能;

时钟的关系图如下:


而参考手册上,在High Speed Run模式下给出的最大时钟不超过120MHz,如图:


附上启动代码中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 */


为何我获取的主频,比参考手册上的主频还要高呢?难道这款芯片支持超频么?

myin4 发表于 2014-10-25 20:05:45

没用过,帮顶
PS:能超到多少?{:lol:}

heyueming0 发表于 2014-10-25 20:08:48

myin4 发表于 2014-10-25 20:05
没用过,帮顶
PS:能超到多少?

获取到的主频是180Mhz呢...   比芯片限定的120M高..

bright2307 发表于 2014-10-25 20:37:18

不知道,顶一下

GodHunter 发表于 2014-10-25 21:09:40

你是用示波器测的主频么?

fengyunyu 发表于 2014-10-25 21:38:24

很多单片机是可以超频运行的。

a136498491 发表于 2014-10-26 00:10:01

LZ,请问K22最小系统的话,是不是只加个电源,就能运行里面的代码?
我买了个转接板,自己焊上去,加电之后就发热,可能是我焊的时候温度高了把芯片烧了?可我已经很小心了的。。。不知道是不是只加个电源就行

还有如果通过USB和bootloader下载程序,是不是直接连上就行?还是得用那个OPENSDA?

heyueming0 发表于 2014-10-26 09:46:11

GodHunter 发表于 2014-10-25 21:09
你是用示波器测的主频么?

用的是官方SDK中给的获取频率的接口

浪里白条 发表于 2014-10-26 13:27:19

不会是SDK这个获取的值有问题吧

heyueming0 发表于 2014-10-26 15:53:48

浪里白条 发表于 2014-10-26 13:27
不会是SDK这个获取的值有问题吧

我也觉得有可能呢,从寄存器上看,倍频之后的频率也是120M

浪里白条 发表于 2014-10-26 19:10:11

heyueming0 发表于 2014-10-26 15:53
我也觉得有可能呢,从寄存器上看,倍频之后的频率也是120M

没用过SDK 总感觉新出来的东西BUG很多,一直用PE来配寄存器

heyueming0 发表于 2014-10-26 22:17:45

找到问题所在了,以下这个寄存器配置将外部时钟12Mhz进行2分频后,进入PLL倍频30倍,所以变成了180Mhz
#define SYSTEM_MCG_C5_VALUE          0x01U               /* MCG_C5 */

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

bailao99 发表于 2014-10-27 07:58:41

看来,超频有望啊,LZ能否实际测测超频后的结果

FSL_TICS_Robin 发表于 2014-10-28 13:35:53

bailao99 发表于 2014-10-27 07:58
看来,超频有望啊,LZ能否实际测测超频后的结果

建议大家将芯片使用在对应的数据手册标明的频率范围内{:smile:}
页: [1]
查看完整版本: K22F系列单片机 时钟问题(已解决)