LPC1768 时钟配置

1)内部RC振荡器

内部振荡器可看作看门狗定时器的时钟源,也可作PLL0和cpu的时钟源,但是无法作为usb的时钟源,因为精度达不到。而且如果CAN波特率高于100kb/s,则也不适用了。在系统上电时,LPC1768都使用内部振荡器,直到软件将其切换为另一种可用的时钟源。

2)主振荡器

主振荡器可作为CPU的时钟源,需要通过分频和倍频进行配置使用。基本会使用主振荡器作为时钟源

3)RTC振荡器

RTC振荡器可提供1Hz-32kHz的RTC时钟输出,可用作PLL0、CPU和看门狗定时的时钟源。

LPC1768时钟配置会涉及到以下几个过程:

1)时钟源选择

时钟源的选择就涉及到了SCS寄存器的配置

2)时钟分频

涉及到CCLKCFG寄存器的配置

3)PLL0配置

涉及到CLKSRCSEL、PLL0CFG、PLL0FEED等寄存器的配置

4)PLL1配置

涉及到PLL1CFG、PLL1FEED等寄存器的配置

5)外设时钟输出

具体的代码如下:

#define CLOCK_SETUP         1
#define SCS_Val             0x00000020
#define CLKSRCSEL_Val       0x00000001

#define PLL0_SETUP          1
#define PLL0CFG_Val         0x00050063

#define PLL1_SETUP          1
#define PLL1CFG_Val         0x00000023
#define CCLKCFG_Val         0x00000003
#define USBCLKCFG_Val       0x00000000
#define PCLKSEL0_Val        0x00000000
#define PCLKSEL1_Val        0x00000000
#define PCONP_Val           0x042887DE
#define CLKOUTCFG_Val       0x00000000

#define FLASH_SETUP         1
#define FLASHCFG_Val        0x0000303A

//时钟配置
void SystemInit()
{
#if(CLOCK_SETUP)		//时钟源设置
	LPC_SC->SCS = SCS_Val;
	if(SCS_Val &(1 << 5)){
		while((LPC_SC->SCS & (1 << 6)) == 0);	//主振荡器已稳定
	}

	//PLL倍频出来的时钟送给CPU前的分频, CCLKCFG_Val = 3, 为4分频
	LPC_SC->CCLKCFG = CCLKCFG_Val;   //setup clock divider

#if (PLL0_SETUP)
	LPC_SC->CLKSRCSEL = CLKSRCSEL_Val;

	LPC_SC->PLL0CFG   =	PLL0CFG_Val;
	LPC_SC->PLL0FEED  = 0xAA;
	LPC_SC->PLL0FEED  = 0x55;

	LPC_SC->PLL0CON   = 0x01;
	LPC_SC->PLL0FEED  = 0xAA;
	LPC_SC->PLL0FEED  = 0x55;
	while (!(LPC_SC->PLL0STAT & (1<<26)));  // Wait for PLOCK0

	LPC_SC->PLL0CON   = 0x03;             /* PLL0 Enable & Connect              */
	LPC_SC->PLL0FEED  = 0xAA;
	LPC_SC->PLL0FEED  = 0x55;
	while(!(LPC_SC->PLL0STAT & ((1<<25) | (1<<24))));
#endif

#if (PLL1_SETUP)
	LPC_SC->PLL1CFG   = PLL1CFG_Val;
	LPC_SC->PLL1FEED  = 0xAA;
	LPC_SC->PLL1FEED  = 0x55;

	LPC_SC->PLL1CON   = 0x01;             /* PLL1 Enable                        */
	LPC_SC->PLL1FEED  = 0xAA;
	LPC_SC->PLL1FEED  = 0x55;
	while (!(LPC_SC->PLL1STAT & (1<<10)));/* Wait for PLOCK1                    */

	LPC_SC->PLL1CON   = 0x03;             /* PLL1 Enable & Connect              */
	LPC_SC->PLL1FEED  = 0xAA;
	LPC_SC->PLL1FEED  = 0x55;
	while (!(LPC_SC->PLL1STAT & ((1<< 9) | (1<< 8))));/* Wait for PLLC1_STAT & PLLE1_STAT */
#else
	LPC_SC->USBCLKCFG = USBCLKCFG_Val;    /* Setup USB Clock Divider            */
#endif
	LPC_SC->PCLKSEL0  = PCLKSEL0_Val;     /* Peripheral Clock Selection         */
	LPC_SC->PCLKSEL1  = PCLKSEL1_Val;

	LPC_SC->PCONP     = PCONP_Val;        /* Power Control for Peripherals      */

	LPC_SC->CLKOUTCFG = CLKOUTCFG_Val;    /* Clock Output Configuration         */
#endif

#if (FLASH_SETUP == 1)
	LPC_SC->FLASHCFG = FLASHCFG_Val;
#endif
}

这样就配置完成,并且配置的400MHz的时钟频率。

Fcco = 12MHz* 2 * 100 / 6 = 400MHz

时间: 2024-10-06 13:51:52

LPC1768 时钟配置的相关文章

LPC1768时钟配置

购买LPC1768已经有一段时间了,但是由于之前工作比较忙,一直没有来得及学习,所以搁置了一段时间. 最近终于有一些时间来学习了,板子上的资源其实还是蛮丰富的,cortex-m3有的,基本上在这个板子上都引出来了, 而且学习的帮助文档也不少,所以学习起来比较方便. 板子的样子如下图所示,具体的详细资源,各位可以自行去查找. 应该来说,板子的学习,肯定会逃不过时钟的配置,因此下面将我配置时钟的过程一一记录下来,以便后期工作需要. 其实LPC1768的时钟配置过程还是比较清晰的. LPC1768的时

LPC1768菜鸟学习之时钟配置

LPC1768的时钟源可以来自三个: 1)内部RC振荡器 内部振荡器可看作看门狗定时器的时钟源,也可作PLL0和cpu的时钟源,但是无法作为usb的时钟源,因为精度达不到.而且如果CAN波特率高于100kb/s,则也不适用了.在系统上电时,LPC1768都使用内部振荡器,直到软件将其切换为另一种可用的时钟源. 2)主振荡器 主振荡器可作为CPU的时钟源,需要通过分频和倍频进行配置使用.基本会使用主振荡器作为时钟源 3)RTC振荡器 RTC振荡器可提供1Hz-32kHz的RTC时钟输出,可用作PL

四轴飞行器1.2.3 STM32F407时钟配置和升级标准库文件

原创文章,欢迎转载,转载请注明出处 这个星期进度比较慢哈,只有周末和晚上下班回来才能做,事件不连续,琐碎的事情又比较多,挺烦的,有多琐碎呢?           1.本人有点小强迫症哈,虽然RTT将文件夹已经分类的很好了,但是在一个项目跟目录下这样放着看起来还是很不舒服的哈,于是强迫症范了,要整理下它.按照以前做项目的习惯,将程序分为四个层次,硬件层,驱动层,系统层和应用层,我们就整理下,对三个文件夹,其中硬件层和驱动层放在BSP文件夹里面,BSP文件里面再分硬件和驱动的文件夹,同时添加一个库文

STM32F407VG (四)时钟配置

1.STM32 F407VG 的starup_stm32f40_41xxx.s的例如以下位置调用 IMPORT SystemInit,之后调用main函数,所以 进入main函数时候就已经自己主动完毕有关时钟配置了. 2.在SystemInit函数里面完毕时钟配置,配上图和例如以下凝视就不须要多解释了,一目了然. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGl0empt/font/5a6L5L2T/fontsize/400/fill/I0JBQk

STM8S时钟配置CLK_HSIPrescalerConfig与CLK_SYSCLKConfig区别

STM8S的时钟配置通过:CLK_CKDIVR寄存器,而CLK_CKDIVR一个是配置HSI分频,另一个是配置CPU的分频 static void CLK_Config(void){ CLK_DeInit(); /* Clock divider to HSI/1 */ CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);  // 只配置HSI分频率,CPU分频率1 /* Output Fcpu on CLK_CCO pin */ CLK_CCOConfig

exynos 4412 时钟配置

/** ****************************************************************************** * @author ? ?Maoxiao Hu * @version ? V1.0.0 * @date ? ? ? Jan-2015 ****************************************************************************** * < COPYRIGHT 2015 IS

STM32F4系统时钟配置及描述

STM32F4系统时钟配置及描述 stm32f407时钟配置方法(感觉很好,分享一下)

STM32F4_RCC系统时钟配置及描述

Ⅰ.概述 对于系统时钟应该都知道它的作用,就是驱动整个芯片工作的心脏,如果没有了它,就等于人没有了心跳. 对于使用开发板学习的朋友来说,RCC系统时钟这一块知识估计没怎么去配置过,原因在于开发板提供的晶振基本上都是官方标准的时钟频率,使用官方的标准库,这样系统时钟就是默认的配置,也就是默认的频率.但对于自己设计开发板,或者想要改变系统时钟频率(如:降低功耗就需要降频)的朋友来说,配置系统时钟就有必要了. 关于时钟这一块对定时器(TIM.RTC.WDG等)相关的外设也比较重要,因为要求精准,就需要

STM32F0xx_RTC实时时钟配置详细过程

Ⅰ.概述 今天总结RTC(Real Time Clock)实时时钟相关的知识,顺带将BKP简单总结一下. STM32的RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后, RTC的设置和时间维持不变. STM32F0的RTC模块和F1的RTC模块最大区别在于F0模块中有“DATE”和“TIME”寄存器,也就是可以直接读取寄存器里面的值,而F1是秒计数寄存器的值,需要通过相关算法下才能得到时间的值. 本文提供的软件工程里面还包含一个BKP模块,主要是用于