首页 > 其他分享 >[6月摸鱼计划] 时钟分频与倍频 自学宝藏

[6月摸鱼计划] 时钟分频与倍频 自学宝藏

时间:2023-06-20 12:02:38浏览次数:42  
标签:分频 HSE HSI 时钟 倍频 摸鱼 SYSCTRL PLL RCC

时钟是单片机运行的基础,是同步单片机各个模块工作时序的最小时间单位。时钟的速度取决于外部晶振或内部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个时钟源如上文所示。

[6月摸鱼计划] 时钟分频与倍频 自学宝藏_系统时钟

图: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_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=(5<<SYSCTRL_HSI_DIV_Pos)|(((volatile uint16_t)RCC_HSI_TRIMCODEADDR));

//这里的SYSCTRL_HSI_DIV_Pos是SYSCTRL_HSI控制寄存器控制HSI分频的位。

CW_SYSCTRL->CR1 |= SYSCTRL_BYPASS | SYSCTRL_CR1_HSIEN_Msk;

//开启 HSI

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

标签:分频,HSE,HSI,时钟,倍频,摸鱼,SYSCTRL,PLL,RCC
From: https://blog.51cto.com/u_15784394/6521717

相关文章

  • [6月摸鱼计划] 微机原理的一些精要概念
    微机原理是指微型计算机的基本原理和工作原理。以下是微机原理的一些精要概念: 1.中央处理器(CPU):微型计算机的核心部件,负责执行指令和控制计算机的运行。存储器:用于存储数据和指令的设备,包括主存储器(RAM)和辅助存储器(硬盘、固态硬盘等)。输入设备:用于将外部数据输入到计算机中的设备......
  • 20230421 14. 观察者模式 - 摸鱼通知
    观察者模式又叫作发布-订阅(Publish/Subscribe)模式观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。Subject类,可翻译为主题或抽象通知者,一般用一个抽象类或者一个......
  • 嘿,不升级CodeGeeX插件,哪来时间摸鱼?
    今天,CodeGeeX1.1.2版正式在JetBrainsIDEs中上线。和VSCode中的CodeGeeX2.0升级一样,新版本在JetBrainsIDEs中带来“AskCodeGeeX”的功能升级。使开发者可以在IDE中,通过问答对话的方式解决技术问题。下面的视频以DataGrip为例,展示新版将技术问答与IDE编程环境深度融合。编辑区......
  • 【六月摸鱼计划】飞碟开发计划偶遇的物联网问题
    记录modbus的上位机记录Modbus的上位机可以使用第三方工具或编程语言来实现。以下是使用Python编程实现记录Modbus数据的示例代码:```pythonimportmodbus_tkimportmodbus_tk.definesascstfrommodbus_tkimportmodbus_tcp创建ModbusTCP客户端master=modbus_tcp.TcpMaster......
  • [5月摸鱼计划] 浅谈DCDC电压变换(原理、结构、可用)
    DCDC转换器简介在电子产品中,我们常需要不同的直流电压来为电路提供工作,这时我们便会见到LDO和DC/DC的身影,但是严格意义上LDO也是一种DC/DC,在电源芯片选型中,LDO和DC/DC则是两种完全不同的芯片。与线性稳压器LDO相比较,效率高是DC/DC的显著优势,通常效率在70%以上,效率高的可达到95%以上......
  • 13-分频器-奇分频
    1.奇分频实现将一个系统时钟进行5分频的奇数分频的功能。可以用于将高频的时钟降低为低频的时钟工作使用。1.1框图及波形在偶数分频方法中,波形绘制时,计数器只要计数到M/2-1,计数器清零;但是在奇数分频时,不能用这样的方式(不存在1.5、2.5个周期计数)奇数分频直接计数到M(计数......
  • 12-分频器 -偶分频
    1.分频器计数器是对于时钟信号进行计数,板载晶振的时钟频率是固定的,有时候需要进行分频和倍频才能满足需要开发板上只有一种晶振,只有一种频率的时钟,想要通过对与固定时钟进行分频或者是倍频的方式得到各个模块所需的时钟频率,得到比固定时钟快的时钟通过倍频,得到比固定时钟......
  • [4月摸鱼计划] 浅谈 InfruWeb3黑客松赛事
    事情起因:https://marketing.csdn.net/p/6798543ad6fdaad547c6431dd7df955a之前没接触过区块链这块,这次随即报名NFT这块。下面谈我的学习过程:第一阶段资料搜索(简单看看就行)什么是NFT?NFT是“非同质化代币”的缩写,是一种基于区块链技术的数字资产。和比特币等传统加密货币不同的是,NFT......
  • 4月份摸鱼计划奖励已经收到了,感谢网站
    4月份参加了网站的摸鱼计划,连续发文21天,得到奖品卫衣一件。另外,很幸运的中了一次抽奖,获得一份凌美(LAMY)宝珠钢笔。礼物都不是很贵,但是可以感受到网站深深的情义,可以激励自己以后创作更多优秀的文章。特此感谢网站,祝网站越办越好!......
  • simulink二次调频风机储能水轮机水电火电汽轮机二次调频,有随机扰动负荷,可连续波动,可对
    simulink二次调频风机储能水轮机水电火电汽轮机二次调频,有随机扰动负荷,可连续波动,可对频率分频调频,分低频,中频,高频,也可对不同死区的风储同步机进行二次调频,系统示意图和波形如图所示,新品!新品,对之前的模型进行了很多改进,包括数据优化,场景分析,风储协调和频率分段,死区分段优化等ID:84......