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

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

3天内不再提示

STM8S时钟系统的时钟初始化函数实现

牵手一起梦 来源:eefocus 作者:eefocus 2020-01-24 17:32 次阅读

STM8S具有一个强大的时钟系统,内部提供一个高速16M的RC振荡器,和一个低速128K的RC振荡器。

时钟控制器功能强大而且灵活易用。其目的在于使用户在获得最好性能的同时,亦能保证消耗的功率最低。用户可独立地管理各个时钟源,并将它们分配到CPU或各个外设。主时钟和CPU时钟均带有预分频器。具有安全可靠的无故障时钟切换机制,可在程序运行中将主时钟从一个时钟源切换到另一个时钟源。

一般来说,时钟树是配置时钟、控制时钟的依据,所以需要掌握,以下是STM8S时钟树图:

STM8S时钟系统的时钟初始化函数实现

从图中看出,一共有3个时钟源,分别是HSE(高速外部时钟)、HSI(高速内部时钟)、LSI(低速内部时钟)。

HSE(高速外部时钟)可通过外部晶振提供,HSI(高速内部时钟)为16M的RC振荡器,LSI(低速内部时钟)为128K的RC振荡器。

高速时钟(HSE和HSI)可以通过分频器进行降频。降频过后的时钟和原本的时钟都可以通过Master Clock Switch进行选择,

以下是初始化系统时钟的函数(默认使用16M内部RC):

void Set_HSISpeed(void)

{

//启用内部高速晶振且无分频16MHz

CLK_ICKR|=0x01; //开启内部HSI

while(!(CLK_ICKR&0x02));//HSI准备就绪

CLK_SWR=0xe1; //HSI为主时钟源

CLK_CKDIVR=0x00; //HSI不分频

}

如果需要切换时钟,需要先等待时钟稳定:

void Switch_LSISpeed(void)

{

CLK_SWCR|=0x02; //开启切换

CLK_ICKR|=0x08; //开启LSI

while(!(CLK_ICKR&0x10));//HSI准备就绪

CLK_SWR=0xd2; //LSR为主时钟源

while((CLK_SWCR & 0x01)==0x01);//等待切换完成

CLK_CKDIVR=0x00; //LSI不分频

CLK_SWCR&=(~0x02); //关闭切换

}

void Switch_HSISpeed(void)

{

CLK_SWCR|=0x02; //开启切换

CLK_ICKR|=0x01; //开启内部HSI

while(!(CLK_ICKR&0x02));//HSI准备就绪

CLK_SWR=0xe1; //HSI为主时钟源

while((CLK_SWCR & 0x01)==0x01);//等待切换完成

CLK_CKDIVR=0x00; //HSI不分频

CLK_SWCR&=(~0x02); //关闭切换

}

如果想直接降频,只需要设置始终分频:

void Set_CPU_Full_Speed(void)

{

CLK_CKDIVR=0x00; //HSI不分频

}

void Set_CPU_Low_Speed(void)

{

CLK_CKDIVR=0x07; //HSI 128分频

}

以上就是初始化时钟的代码,一般用于mian函数的第一句话,方便以后计算其他外设的时钟频率。

责任编辑:gt

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

    关注

    112

    文章

    16154

    浏览量

    177270
  • 振荡器
    +关注

    关注

    28

    文章

    3810

    浏览量

    138845
  • 时钟
    +关注

    关注

    10

    文章

    1716

    浏览量

    131327
收藏 人收藏

    评论

    相关推荐

    求助,关于STM8S105全局中断的问题求解

    环境是IAR 芯片stm8s105c6没有使用库函数,而直接使用的寄存器。 我在主函数main中先初始化系统
    发表于 05-15 07:36

    STM8S的定时器1和定时器4同时初始化和打开遇到的疑问求解

    我把STM8S的定时器1和定时器4同时初始化和打开。然后分别在定时器1中断函数和定时器4中断函数里处理程序,发现定时器4不工作,当屏蔽定时器1后,定时器4就能工作了,这是怎么回事啊?如
    发表于 05-09 08:31

    STM8S TIM4中断一开,程序异常怎么解决?

    使用内部时钟16M ,1分频,TIM4定时8us,初始化程序如下: CLK->PCKENR1 = (uint8_t)(0x1C);//使能定时器和串口 TIM4->
    发表于 04-28 06:52

    stm32定时器在初始化参数之前是否必须开启对应时钟

    参数的时候,对应定时器时钟并没有开启,导致PWM不能正常输出,当在这些函数之前,开启对应时钟,就正常了。看是调试对比,TIM的寄存器没有差别,不知道为什么,所以问一下在初始化参数之前是
    发表于 04-18 06:42

    请问STM8S的AWU功能的时钟源能使用外接的32.768KHZ晶振吗?

    请问大神,STM8S的AWU功能的时钟源能使用外接的32.768KHZ晶振吗?
    发表于 04-16 08:07

    关于STM32F103VC零下10℃时钟初始化问题求解

    LSE和HSE,那么设备在零下10℃的时候重新上电,APP初始化LSE过不去; 2.如果BOOT初始化时钟的时候,使用LSE和HSE,在APP里面重新配置为LSE和HSE,那么设备在零下10℃的时候
    发表于 04-15 06:12

    启动外部16MHz时钟后STM8S003的ADC无法初始化是怎么回事?

    如题,STM8S003F3P6做的驱动板,启动外部16MHz时钟,UART, TIMER, GPIO, 中断等一切工作正常,整个系统运行也很OK。但当加入ADC初始化时,无法写入ADC
    发表于 04-08 08:24

    STM32F4卡死在时钟初始化配置上是哪里出了问题?

    时钟初始化if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE){return HAL_TIMEOUT; }
    发表于 03-29 08:32

    STM32F303RCT6 CAN初始化时钟卡住了显示超时状态,造成初始化异常怎么解决?

    STM32F303RCT6 CAN初始化时钟卡住了显示超时状态,造成初始化异常!恳请大佬们帮忙解惑解惑,谢谢!!
    发表于 03-14 07:32

    使用CUBEMX生成配置好的UCPD外设初始化代码后,未发现UCPDHAL库函数是为什么?

    我使用CUBEMX生成配置好的UCPD外设初始化代码后发现就使能外设时钟且未发现UCPDHAL库函数,是我的CUBEMX版本低了吗。
    发表于 03-14 07:32

    MCU单片机GPIO初始化该按什么顺序配置?为什么初始化时有电平跳变?

    GPIO初始化时有时钟配置、模式配置、输出配置、复用配置,那么在编写初始化代码时,到底该按什么顺序执行呢?如果顺序不当那初始化过程可能会出现短暂的电平跳变。
    的头像 发表于 02-22 11:07 1405次阅读
    MCU单片机GPIO<b class='flag-5'>初始化</b>该按什么顺序配置?为什么<b class='flag-5'>初始化</b>时有电平跳变?

    rtc时钟如何在启动后会不被初始化为默认值?

    请教一个关于rtc的问题。 1.我发现我的rtc时钟根据例子,在启动后会被初始化为默认值。 但是如果我想在软件复位或者看门狗复位的情况下,不让我的rtc时钟重新初始化。这样是否能够
    发表于 02-21 06:08

    使用CYB06445LQI-S3D42设备配置系统时钟,BSP在时钟初始化时失败怎么解决?

    我们正在使用 CYB06445LQI-S3D42 设备。 从默认时钟配置开始效果很好。 当我们尝试根据电路板设计配置系统时钟(我们有 ECO)时,BSP 无法
    发表于 01-19 06:12

    labview运行后如何初始化

    LabVIEW是一款强大的图形编程软件,在运行之前通常需要进行一些初始化操作。本文将详细介绍LabVIEW运行前的初始化过程,并提供了一些常用的初始化方法。 创建新项目: 在LabV
    的头像 发表于 12-28 17:24 2438次阅读

    自动初始化机制原理详解

    自动初始化机制是指初始化函数不需要被显式调用,只需要在函数定义处通过宏定义的方式进行申明,就会在系统启动过程中被执行。这篇文章就来探索一下其
    的头像 发表于 12-16 09:33 958次阅读
    自动<b class='flag-5'>初始化</b>机制原理详解