stm8s开发(四) CLOCK的使用:时钟控制

发布者:mlgb999最新更新时间:2019-12-26 来源: eefocus关键字:stm8s  CLOCK  时钟控制 手机看文章 扫描二维码
随时随地手机看文章

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


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


一般来说,时钟树是配置时钟、控制时钟的依据,所以需要掌握,以下是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函数的第一句话,方便以后计算其他外设的时钟频率。

关键字:stm8s  CLOCK  时钟控制 引用地址:stm8s开发(四) CLOCK的使用:时钟控制

上一篇:STM8S时钟配置CLK_HSIPrescalerConfig与CLK_SYSCLKConfig区别
下一篇:STM8S——8位基本定时器(TIM4)

推荐阅读最新更新时间:2024-11-19 13:58

stm8s跳出中断程序c语言,STVD自动生成的stm8
整理一下,不知理解对不对; /* BASIC INTERRUPT VECTOR TABLE FOR STM8 devices * Copyright (c) 2007 STMicroelectronics */ //typedef void (*)void,;定义一个类型(指向函数的指针)取得void类型函数的函数入口地址指针 typedef void @far (*interrupt_handler_t)(void); //定义一个结构体类型存放{中断指令,中断处理程序名(即中断函数入口指针)} struct interrupt_vector { unsigned char interrupt_instruction
[单片机]
单片机驱动的发光二极管做的数码管时钟
我是 电子制作爱 好者,最近从网上看到这款单片机驱动的发光二极管做的数码管时钟,作者:whw8099,以下是作者的介绍“以前做的数码管时钟,总觉得太小了,远处看不清,就用发光二极管自己制作了一个数码管,这样就亮多了。技术的含量不是很高,但是费功夫,单片机程序是在书上看到的,作了一些小修改。硬件中没有用DS1302,单片机晶振用12M(程序以12M晶振进行计算的),走时比用DS1302还要准。”特此收集转载。 接口: 数码管:P0^0~P0^7 位选: P2^0~P2^3 设置键 P1^5~P1^7(短按:设置显示时间,长按:设置闹钟时间) 加1键 P1^6 减1键 P1^7 Beep P3^7 //作
[单片机]
单片机驱动的发光二极管做的数码管<font color='red'>时钟</font>
stm8s开发(三) UART的使用:串口通信!
串口通信是单片机学习的一个最基本、最重要的功能之一。串口通信可以间接的当做调试接口使用,实现单片机与电脑之间的通信。当然可以与一些模块(比如蓝牙、wifi)通信,也可以作为和其他单片机通信的工具。 STM8S的通用异步收发器(UART)主要特性: ● 全双工的,异步通信 ● 可编程数据字长度(8位或9位) ● 可配置的停止位-支持1或2个停止位 一般的,我们使用串口通信主要是关心几点参数:波特率、停止位、奇偶校验位。 其次就是如何发送、如何接收数据,这里介绍的使用阻塞式发送数据、中断方式接收数据。 以下代码是初始化串口,参数为:115200 1停止位 无校验位 void Init_UART1(void)
[单片机]
<font color='red'>stm8s</font>开发(三) UART的使用:串口通信!
拥抱大数据时代 解读5G通信时钟同步技术
前言 随着大数据、云计算和物联网时代的到来,通信系统从集中式系统向分布式系统发展,在集中式系统中,所有进程或模块都从系统唯一的全局时钟中获取时间,系统内任何两个事件都有着明确的先后关系。 在分布式系统中,系统无法为彼此间相互独立的模块提供一个统一的全局时钟。由于这些本地时钟的计时速率、运行环境不一致,因此,在一段时间后,这些本地时钟也会出现不一致。为了让这些本地时钟再次达到相同的时间值,必须进行时间同步操作。 技术型授权代理商Excelpoint世健公司的工程师Wolfe Yu,就5G通信时钟同步的相关知识进行了解读。 时钟同步技术 系统中各时钟的同步,需要对比各时钟与系统标准时钟的差值,以及对相对漂移做修正处
[网络通信]
拥抱大数据时代 解读5G通信<font color='red'>时钟</font>同步技术
快速学Arm(23)--lpc2300系统时钟2
接着上一篇,我们来看看PLL的设置步骤: 1.如果PLL已经连接,我们先将其断开,方法就是用一个馈送系列断开与PLL的连接,馈送序列当然是通过写入馈送寄存器PLLFEED来实现的.馈送序列机制被用于避免PLL正在使用的相关参数被意外修改的情况.LPC2300系列ARM从硬件上提供了保护,只有先网PLL馈送寄存器写入0xAA,再写入0x55,PLL的相关参数才能有效更改. 2.用一个馈送序列禁止PLL,也就是说停止了流控振动器CCO的工作. 3.通过时钟源选择寄存器CLKSRCSEL来选择PLL输入时钟源. 4.写PLL配置寄存器PLLCFG,并用一个馈送序列使其生效,PLL配置寄存器只有在PLL被禁止时才有效. 5
[单片机]
使用IAR如何修改STM8S库(一)
注意:以下修改在IAR for STM8 1.10 SP3下验证,库文件为IAR自带的1.1.1 1、选择CPU类型(支持STM8S系列设备) stm8s.h ... /* Uncomment the line below according to the target STM8S device used in your application. Tip: To avoid modifying this file each time you need to switch between these devices, you can define the device in your toolchain compiler
[单片机]
基于IAR开发环境的STM8S模拟IIC代码
基于IAR STM8 2.10开发环境,STM8S005K6单片机,模拟IIC方式读写AT24C16或AT24C32,已验证可以正常对AT24C32进行读写数据,只是有个疑问,对于单片机接SDA脚的IO口进行方向控制反而引起时序不正常而读写不了数据,例程中是将此IO口始终设置为输出,不知道会不会有隐患,有待测试... 以下是代码,完整代码请下载附件,包含完整工程! #include 24Cxx.h #include stm8s.h #include stm8s_gpio.h #define AT24C32_SETSDAIN GPIO_Init(AT24C32_SDA_PORT, GPIO_PIN_6,
[单片机]
直接测量微处理器总线时钟的程序
用单控制环检验HC08 SCS08微处理器的总线频率。 Freescale公司的HC08和更新的HCS08微处理器系列具有通用外围模块。时钟发生器也不例外。其范围从任意I/O引脚的内部时钟到外部晶体或晶振。一旦选择了时钟源,可以有多种控制最终总线频率的选择。例如,为MC9S08GB微处理器连接一个32,768Hz的晶体,允许使用FLL(锁频环)产生最多18.874 MHz的总线频率。选择源、除数和FLL允许多功能且复杂的设置。 一旦写入总线时钟初始化程序,在继续工程其它部分之前,也许想检验总线是否以期望的速度运行。本设计方案给出在任意I/O端口以总线1/9的精确速度输出方波的程序(清单1和清单2)。仅连接一个频率计数器到这个管脚
[工业控制]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved