0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CW32L083系列MCU系统时钟详解

武汉芯源半导体有限公司 2022-10-25 13:35 次阅读

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

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

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个时钟源如上文所示。

pYYBAGNXc2WAf4_wAALvuqeU3XI888.jpg

图: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,I2CUART等外设的配置时钟和工作时钟。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_Enable(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六分频得到8MHz的HSI,然后通过PLL倍频至64MHz。


//开启HSI时钟
CW_SYSCTRL->HSI=(5HSI&SYSCTRL_HSI_STABLE_Msk)!=SYSCTRL_HSI_STABLE_Msk) 
//Wait stable
 {
        ;
 }

//设置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;    
//Enable PLL

//等待PLL时钟稳定


   while((CW_SYSCTRL->PLL&SYSCTRL_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其他型号亦可参考此篇文档。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7483

    浏览量

    151018
  • 单片机
    +关注

    关注

    6032

    文章

    44513

    浏览量

    632735
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16980

    浏览量

    350217
  • 时钟
    +关注

    关注

    10

    文章

    1720

    浏览量

    131342
收藏 人收藏

    评论

    相关推荐

    CW32L010 Mini Board 测评】简介、点灯

    Board 是基于 CW32L010F8U6 的 QFN 封装设计的最小系统核心板,产品规格与 CW32L010 芯片规格一致。便于客户灵活快速的评估芯片性能和产应用。 1.0mm的板厚、单面元器件
    发表于 11-17 06:39

    CW32L010学习笔记

    记录CW32L010学习过程
    的头像 发表于 11-15 17:40 1045次阅读
    <b class='flag-5'>CW32L</b>010学习笔记

    CW32L010安全低功耗MCU,树立M0+产品行业新标杆!

    2024年9月26日,武汉芯源半导体CW32L010系列产品正式官方发布。这款产品以其卓越的产品性能,迅速在业界引起了广泛关注,并成功树立M0+产品行业的新标杆。CW32L010系列
    的头像 发表于 10-09 10:12 429次阅读
    <b class='flag-5'>CW32L</b>010安全低功耗<b class='flag-5'>MCU</b>,树立M0+产品行业新标杆!

    CW32L010安全低功耗MCU,树立M0+产品行业新标杆!

    尤为重要,这一指标考验的是MCU内置RC时钟源的技术特性。CW32L010的内置时钟源,不论是HSI还是LSI,都大幅优于竞品。 CW32L
    发表于 10-09 10:08

    MSPM0 L 系列 MCU硬件开发指南

    电子发烧友网站提供《MSPM0 L 系列 MCU硬件开发指南.pdf》资料免费下载
    发表于 09-09 10:36 0次下载
    MSPM0 <b class='flag-5'>L</b> <b class='flag-5'>系列</b> <b class='flag-5'>MCU</b>硬件开发指南

    MSPM0 L系列MCU硬件开发指南

    电子发烧友网站提供《MSPM0 L系列MCU硬件开发指南.pdf》资料免费下载
    发表于 09-07 11:12 1次下载
    MSPM0 <b class='flag-5'>L</b><b class='flag-5'>系列</b><b class='flag-5'>MCU</b>硬件开发指南

    MSPM0 L系列MCU功耗优化指南

    电子发烧友网站提供《MSPM0 L系列MCU功耗优化指南.pdf》资料免费下载
    发表于 09-02 11:36 1次下载
    MSPM0 <b class='flag-5'>L</b><b class='flag-5'>系列</b><b class='flag-5'>MCU</b>功耗优化指南

    请问STM32L083的唯一ID为什么有重复啊?

    ID的读取代码如下: for(i=0; i<3; i++) {//STM32L083 ID CODE STM32L083_ID[i] = *(uint32_t
    发表于 04-17 06:29

    CW-DAPLINK调试工具

    CW-DAPLINK是武汉芯源半导体有限公司专为CW32系列MCU的在线调试和编程工具而设计的。 它通过SWD接口和应用单板的MCU进行在线
    的头像 发表于 04-09 17:16 703次阅读
    <b class='flag-5'>CW</b>-DAPLINK调试工具

    STM32L0系列没有VBAT,如果使用RTC,系统断电怎么保证RTC时钟继续运行?

    STM32L0系列,没有VBAT,如果使用RTC,系统断电怎么保证RTC时钟继续运行
    发表于 03-29 07:56

    AURIX系列MCU多核系统时钟有关系吗?

    AURIX系列MCU多核系统时钟有关系吗?2.如何系统的理解GTM的时钟结构(以前用的ST的片
    发表于 02-05 06:10

    请问如何优化CW32L083微控制器的功耗?

    在进行低功耗设计时,如何优化CW32L083系列微控制器的功耗?
    发表于 01-17 07:16

    CW32L083系列微控制器的ADC和DAC模块要如何使用?怎么配置?

    如何配置和使用CW32L083系列微控制器的ADC和DAC模块?
    发表于 01-17 06:08

    CW32单片机在智能马桶的应用介绍

    24KBRAM、最多87路GPIO,以及一系列增强型外设。 CW32L083系列产品优势介绍 1、系统特性 ● ARM^®^ Cortex ^®^ -M0+ 内核; ● 最高主频64
    发表于 12-20 10:06

    TC3xx芯片时钟系统的锁相环PLL详解

    的Tick数就是基于模块时钟的)。本系列文章就来详细介绍TC3xx芯片的时钟系统及其具体配置。本文为TC3xx芯片时钟
    的头像 发表于 12-01 09:37 2361次阅读
    TC3xx芯片<b class='flag-5'>时钟</b><b class='flag-5'>系统</b>的锁相环PLL<b class='flag-5'>详解</b>