NUC140之设置主频

来源:互联网 发布:李小璐分享淘宝店链接 编辑:程序博客网 时间:2024/04/30 03:29

本人用的是NUC140VE3CN,这款芯片主频是50MHz,如果采用默认值的话大约为20多M,如何才能设置到50MHz呢。

根据芯片手册,这款单片机的主频频率就是HCLK的频率,而HCLK要想达到50MHz,需要选择时钟源为PLL输出,

在此我选用的外部晶振为12MHz。

贴出程序如下:

void setup_HCLK (void)
{
 uint32_t u32PllCr;
 /*初始化系统时钟*/
 DrvSYS_UnlockProtectedReg ();                                           //解锁受保护的系统寄存器
 DrvSYS_SetOscCtrl (E_SYS_XTL12M, 1);                                    //使能外部12M晶振
 DrvSYS_SetIPClock (E_SYS_FDIV_CLK, 1);            //使能分频器输出
 SYSCLK->PLLCON.PLL_SRC = E_SYS_EXTERNAL_12M;       //PLL时钟源选择外部时钟;NF、NR约束性参考用户手册"PLL控制寄存器部分" 
   u32PllCr = DrvSYS_GetPLLContent (E_SYS_EXTERNAL_12M, 48000000);   //获得目标时钟频率所需数据,外部12MHz晶振,48MHz主频
   DrvSYS_SetPLLContent (u32PllCr);          //设置HCLK为48MHz,可用GETHCLK函数来实测

 // SYSCLK->PLLCON.OUT_DV  = 3;           //公式:  FOUT = (FIN/NO)*(NF/NR) = 12MHz/4*16 = 48MHz
 // SYSCLK->PLLCON.FB_DV   = 46;          //NF = FB_DV + 2;  NR = IN_DV + 2;
 // SYSCLK->PLLCON.IN_DV   = 1;            //NO = 4 => OUT_DV = '11' ;  NO = 2 => OUT_DV = '01' or '10'; NO = 1 => OUT_DV = '00';
 SYSCLK->PLLCON.OE      = 0;            //PLL FOUT 使能
 SYSCLK->PLLCON.PD    = 0;            //PLL 正常模式
 delay(2000);               //等待PLL稳定
 DrvSYS_SelectHCLKSource(2);            //选择HCLK为PLL输出
 DrvSYS_LockProtectedReg ();                                             //对系统寄存器上锁
}

现在总结一下步骤:

(1)使能外部晶振,看库函数实际上就是设置了PWRCON这个掉电控制寄存器;

(2)使能分频器的输出;

(3)选择PLL时钟源为外部12M晶振;

(4)配置PLL分频器,如果用DrvSYS_GetPLLContent和DrvSYS_SetPLLContent就不必自己技术PLL的分频比,注释掉的三行就是自己计算的;

(5)选择HCLK时钟源为PLL输出;

(6)由于其中涉及的很多寄存器都是写保护的,所以要解锁,并且记得设置完毕后上锁。

 

芯片频率高了,也会发热,建议不需要太高频率的话,不必设置到满频率,超频的话请自己小心。

注:库函数和相应的配置头文件在本人的资源里免积分下载