当前位置:首页 > 工业用地 >mcu 时钟(mcu时钟频率)

mcu 时钟(mcu时钟频率)

时钟是单片机工作的基础,是同步单片机各模块工作时序的最小时间单位。时钟的速度取决于外部晶振或内部RC振荡电路。单片机拥有丰富的外设,但实际使用中只用到了有限的外设。有些外设需要高速时钟来提高性能,有些外设需要低速时钟来降低功耗或提高抗干扰能力。因此,微控制器使用多个时钟源来解决这个问题。

下面将详细介绍如何配置CW32L083产品的系统时钟。

mcu 时钟(mcu时钟频率)

CW32L083共有5个系统时钟源LSI、LSE、HSI、HSE、PLL;按时钟频率可分为高速时钟源和低速时钟源,按来源还可分为内部时钟源和外部时钟源。

? 外部高速时钟(HSE)

? 外部低速时钟(LSE)

? 内部高速时钟(HSI)

? 内部低速时钟(LSI)

? 锁相环时钟(PLL)

锁相环时钟是通过将HSE 时钟或HSI 时钟乘以锁相环PLL 生成的(2 至12 倍)。

下图显示了CW32L083系统的内部时钟树。从图中可以看出,HSI时钟是由内部高速RC振荡器HSIOSC分频后产生的。分频系数通过内置高频时钟控制寄存器SYSCTRL_HSI的DIV位域设置。有效分频系数为1、2、4、6、8、10、12、14、16。系统时钟SysClk的5种可选时钟源如上所示。

图:CW32L083的系统内部时钟树

SysClk分频可以产生先进的高性能总线时钟HCLK,作为M0+内核、SysTick、DMA、FLASH、CRC、GPIO等模块的配置时钟和工作时钟。分频系数通过系统控制寄存器SYSCTRL_CR0 的HCLKPRS 位域设置,有效时分频系数为2^n(n=0~7)。外设时钟PCLK由HCLK分频后产生。通过配置系统控制器SYSCTRL_CR0的PCLKPRS位域设置,有效分频系数为2^n(n=0~3),可作为GTIM、BTIM、ATIM定时器、SPI、 I2C、UART等外设。 CW32L083还具有两个低速时钟源。 RC10K时钟可用作独立看门狗的计数时钟和GPIO口中断输入信号的过滤时钟。 RC150K时钟可作为LVD和VC数字滤波模块的滤波时钟以及GPIO端口中断输入。使用时钟过滤信号。

CW32L083的默认系统时钟是HSIOSC除以6,即8MHz时钟。下面介绍时钟配置方法。 CW32L083具有丰富的时钟配置功能。内部FLASH存储器支持最快频率为24MHz的工作时钟。当HCLK频率配置为大于24MHz时,需要通过FLASH控制寄存器FLASH_CR2的WAIT位域配置插入的等待HCLK周期数。当大于24MHz且小于等于48MHz时,需要插入2个等待周期;当大于48MHz时,需要插入3个等待周期。

1.HSI时钟配置

当HSI小于或等于24MHz时,无需配置FLASH等待时间。

RCC_HSI_Enable( RCC_HSIOSC_DIV2 );

//内部高速时钟除以2 SysClk=24MHz

RCC_HSI_Enable( RCC_HSIOSC_DIV6 );

//内部高速时钟6分频SysClk=8MHz。当HSI配置大于24MHz时,需要配置FLASH等待时间。

__RCC_FLASH_CLK_ENABLE();

//使能FLASH配置时钟

FLASH_SetLatency(FLASH_Latency_2);

//如果频率大于24MHz小于48MHz则需要配置FlashWait=2

RCC_HSI_Enable(RCC_HSIOSC_DIV1);

//内部高速时钟除以1 SysClk=48MHz

2.HSE时钟配置

RCC_HSE_启用(RCC_HSE_MODE_OSC,16000000,RCC_HSE_DRIVER_NORMAL,RCC_HSE_FLT_CLOSE);

//打开HSE时钟,HSE的频率范围为4MHz-32MHz

RCC_SysClk_Switch( RCC_SYSCLKSRC_HSE );

//将系统时钟切换为外部高速时钟

3.LSI时钟配置

RCC_LSI_Enable();

//打开内部低速时钟LSI

RCC_SysClk_Switch( RCC_SYSCLKSRC_LSI );

//将系统时钟切换到LSI

4.LSE时钟配置

RCC_LSE_Enable(RCC_LSE_MODE_OSC,RCC_LSE_AMP_LARGER,RCC_LSE_DRIVER_LARGER);

//打开外部低速时钟LSE

RCC_SysClk_Switch( RCC_SYSCLKSRC_LSE );

//将系统时钟切换到LSE

5.PLL时钟配置

CW32L083的PLL输入可以是HSI和HSE。下面以HSE为例。

RCC_HSE_Enable( RCC_HSE_MODE_OSC, 16000000, RCC_HSE_DRIVER_NORMAL, RCC_HSE_FLT_CLOSE );

//使能外部高速时钟HSE。频率需要根据实际晶振频率填写。

RCC_AHBPeriphClk_Enable(RCC_AHB_PERIPH_FLASH,ENABLE); RCC_PLL_Enable(RCC_PLLSOURCE_HSEOSC,16000000,RCC_PLL_MUL_2);

//打开PLL,PLL输入为HSE

FLASH_SetLatency(FLASH_Latency_2);

//如果频率大于24MHz小于等于48MHz则需要配置FlashWait=2

RCC_SysClk_Switch( RCC_SYSCLKSRC_PLL );

//将系统时钟切换到PLL

以上介绍的是利用库函数配置CW32L083的系统时钟。以下示例使用寄存器来配置64MHz 系统时钟。其思路是首先将HSIOSC除以6以获得8MHz HSI,然后通过PLL将频率倍增至64MHz。

//开启HSI时钟CW_SYSCTRL-HSI=(5HSISYSCTRL_HSI_STABLE_Msk)!=SYSCTRL_HSI_STABLE_Msk) //等待稳定{ ; }//设置PLL参数CW_SYSCTRL-PLL=(RCC_PLL_WAITCYCLE_16384 | \ ((uint32_t)(0x07 SYSCTRL_PLL_FREQOUT_Pos )) | \ ((uint32_t )(0x08 SYSCTRL_PLL_MUL_Pos)) | \ ((uint32_t)(0x01 SYSCTRL_PLL_FREQIN_Pos )) | \ ((uint32_t )(0x03 SYSCTRL_PLL_SOURCE_Pos)));//SYSCTRL_PLL_FREQOUT_Pos 是PLL 输出时钟频率范围配置,因为输出为64MHz。需要设置为1xx//SYSCTRL_PLL_MUL_Pos是PLL倍频系数配置位域,因为本例需要倍频8倍,设置为0x08 //SYSCTRL_PLL_FREQIN_Pos是PLL输入时钟频率范围配置,本例中为HSI分频后为8MHz,设置为01 //SYSCTRL_PLL_SOURCE_Pos 为PLL输入时钟源选择,HSI时钟,设置为11//使能PLL CW_SYSCTRL-CR1 |=SYSCTRL_BYPASS | SYSCTRL_CR1_PLLEN_Msk; //使能PLL//等待PLL时钟稳定while((CW_SYSCTRL-PLLSYSCTRL_PLL_STABLE_Msk)!=SYSCTRL_PLL_STABLE_Msk) { ; } CW_SYSCTRL-AHBEN_f.FLASH=1; CW_FLASH-CR2=0x5A5A0000 | ((uint32_t)0x00000002); //频率为64MHz,配置3个等待周期。 //转换时钟CW_SYSCTRL-CR0=((((CW_SYSCTRL-CR0 (~SYSCTRL_BYPASS_MASK)) | SYSCTRL_BYPASS) (~SYSCTRL_CR0_SYSCLK_Msk)) | ((0x00000002U))); RCC_SystemCoreClockUpdate(RCC_Sysctrl_GetHClkFreq());

配置完成后,可以通过RCC_PLL_OUT()看到输出频率。除了上述功能外,CW32L083还可以通过配置GPIO端口直接输出时钟端口,方便用户测试。

RCC_HCLK_OUT() //PA04输出HCLK时钟

RCC_PCLK_OUT() //PA03输出PCLK时钟

RCC_HSE_OUT() //PC15输出HSE时钟

RCC_HSI_OUT() //PB00输出HSI时钟

RCC_LSE_OUT() //PB12输出LSE时钟

RCC_LSI_OUT() //PD05输出LSI时钟

RCC_PLL_OUT() //PC13输出PLL时钟

以上是CW32L083时钟部分的介绍。 CW32的其他型号也可参考本文档。

最新资讯

推荐资讯