stm8s内部时钟配置详解及配置步骤

发布者:AngelicHeart最新更新时间:2021-10-09 来源: eefocus关键字:stm8s  内部时钟  配置步骤 手机看文章 扫描二维码
随时随地手机看文章

  STM8S的4种时钟源可用做主时钟:

  ● 1-24MHz高速外部晶体振荡器(HSE)

  ● 最大24MHz高速外部时钟信号(HSE user-ext)

  ● 16MHz高速内部RC振荡器(HSI)

  ● 128KHz低速内部RC(LSI)


  各个时钟源可单独打开或关闭,从而优化功耗。


  系统的启动

  为使系统快速启动,复位后时钟控制器自动使用HSI的8分频(HSI/8)做为主时钟。其原因为HSI的稳定时间短,而8分频可保证系统在较差的VDD条件下安全启动。


  另外,stm8s还可以切换时钟源,有自动和手动两种方法。


  时钟是单片机的灵魂,所有的东西都和时钟有关。相比AVR反人类的熔丝位设置时钟/振荡源。stm只要操作寄存器就可以了。


  stm内部时钟示意图及配置步骤

  stm8s内部时钟配置详解及配置步骤

  由图就可知,系统时钟可以由外部HSE(high speed external)或内部高速时钟HSI(high speed internal)或内部低速时钟LSI(low speed internal)提供。这里以内部高速时钟举例,内部高速时钟HSI经过HSIDIV分频,得到Fmaster时钟,这个请注意,顾名思义,这个时钟是主要时钟,芯片内的其他所有时钟,都是通过这个时钟分频而来(一次分配),并且他还控制这这些外设时钟的门(开启或者关闭)。


  Fmaster是主干,内部/外部时钟是根,CPU或者外设时钟是枝,根和枝有很多,但是主干就一个。


  配置内部时钟步骤

  首先确定好Fmaster的值,默认是分频8,我们可以通过HSIDIV位来改变。


  第二确定好CPU的频率,通过设置CPUDIV实现。


  第三选择使能的外设时钟,在有功耗要求的情况下,关闭不使用的时钟可以降低功耗。默认全部开启。


  第四其他设置,时钟切换啊SWIM啊时钟输出等等。下面源码没设置均默认。


  下面是源码

/************************************************************************/

  /* 功能:时钟配置初始化

  * 形参:无

  * 返回:无

  * 修改:2014-11-14

  * 缘由:全局时钟初始化,主频,门控位 */

  /************************************************************************/

  void clk_init(void)

  {

  /*对于内部高速时钟HSI[16MHz],其逻辑关系是HSI---[HSIDIV分频]---[时钟选择门]---

  * 主时钟Fmaster---{[CPUDIV分频]---Fcpu时钟;其他外设时钟}

  */

  CLK_ICKR = 0x01; //Internal clock control register。复位值,使能HSI时钟,快速唤醒禁止

  CLK_ECKR = 0x00; //External clock control register。HSE禁止。

  CLK_SWR = 0xE1; //Clock master switch register。选择HSI为主时钟。

  CLK_SWCR = 0x00; //Clock switch control register。时钟切换,中文数据手册翻译似乎有误

  /*Clock divider register。分频Fmaster和Fcpu。

  * 默认是8和1,现在是2和1,因此Fmaster=8M,Fcpu=8M */

  CLK_CKDIVR = 0x08;

  CLK_PCKENR1 = 0xFF; //Peripheral clock gaTIng register 1。Fmaster与外设时钟连接

  CLK_PCKENR2 = 0x0; //同上

  CLK_CSSR = 0x0; //Clock security system register。时钟安全检测关

  CLK_CCOR = 0x0; //Configurable clock control register。时钟输出关闭

  }


  更新,stm有个LSI校准的功能,具体可以看芯片手册。而且这个校准功能,库函数已经写好了。但是使用的时候要注意两点。


  一,库函数的LSI校准功能是使用AWU和TIM3的,因此在上面的配置中CLK_PCKENR2里面应该配置为打开AWU外设,否则会死循环。


  二,TIM3如果需要做其他功能的话,务必在LSI校准之后配置,即顺序时主时钟初始化----LSI校准----TIM3配置,否则会无法启动TIM3


  三,以上的LSI校准程序来自最新的官方固件库。其实个人认为如果频率要求不严就不要配置了,比如蜂鸣器……

关键字:stm8s  内部时钟  配置步骤 引用地址:stm8s内部时钟配置详解及配置步骤

上一篇:STM8L用内部参考电压做AD转换基准电压
下一篇:STM8S003使用STLINK_V2实现批量烧录

推荐阅读最新更新时间:2024-11-13 08:32

stm8s开发(七) SPI的使用:SPI主机通信!
  科普SPI:是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,分别是:SCK(时钟)、MOSI(主机发送数据)、MISO(主机接收数据)、NSS(片选),其中NSS的片选信号,大部分情况下我们使用的是软件NSS,即为使用一个GPIO进行软件控制片选。值得注意的是,其中SPI有4中模式:分别是空闲时SCLK的电平高低、MISO采样时第12个变化沿。   stm8s的SPI结构如下图,      如果用形象的比喻的话:SCK像一个发条齿轮,只有当发条齿轮转动的时候(SCK输出8个时钟),MOSI才能将1Byte的数据发送出去,同时,MISO将1Byte的数据接收回来。   使用SPI无非就一个初
[单片机]
<font color='red'>stm8s</font>开发(七) SPI的使用:SPI主机通信!
STM8S定时器TIM4定时1kHz输出
1.将主时钟切换到HSE;(外部晶振为8MkHz) 2.将主时钟时钟频率8分频,即计数器时钟周期为1us; 3.设置定时器250us中断一次; 4.在中断程序里判断中断次数是否到2次; 5.到2次翻转引脚电平。(逻辑分析仪检测频率) 寄存器版: unsigned char i=255; PE_DDR_DDR5=1;//配置PD0为输出模式 PE_CR1_C15=1;//配置PD0为推挽模式 PE_CR2_C25=0;//配置PD0输出最大为10Mhz if(CLK_CMSR==0xE1) {//如果HSI为主时钟源(复位值),切换到HSE CLK_SWCR_SWIEN=1;//时钟切换中断使能 CLK_SWR=0
[单片机]
<font color='red'>STM8S</font>定时器TIM4定时1kHz输出
STM8S专题之ADC数据转换
简介 数字信号是一种离散的信号,模拟信号是一种连续的信号,如果数字电路需要处理模拟信号,则需要一种信号转换系统,相反,模拟电路要处理数字信号也需要进行信号转换。 A/D与D/A 转换器就是两种信号进行处理的桥梁。 常见的A/D转换器有并联比较型、逐次逼近型、V-F型、双积分型等。 常见的D/A转换器有权电阻网络型、倒T型电阻网络型、权电容网络型、权电流型、开关树结构型等。 原理 系统框架 STM8S单片机型号不同,ADC的资源也不同。以ADC2为例,ADC2为10位逐次逼近型A/D转换器,可以提供16个输入通道。 上图是A/D转换的结构图,左边是信号输入,中间是信号转换,右边是信号输出。核心部分是中间信号转换,
[单片机]
<font color='red'>STM8S</font>专题之ADC数据转换
STM8S_007_片内FLASH和EEPROM编程
Ⅰ、写在前面 我们都知道FLASH和EEPROM这两种存储器,但是大部分人了解的都是专门的FLASH和EEPROM芯片,如:W25Q16和ATAT24C08(外部)储存芯片。   外部存储芯片和本文说的内部FLASH和EEPROM最大的区别就是在于:内部FLASH和EEPROM是不需要SPI、I2C等进行操作,也就是说同等情况下,内部FLASH和EEPROM的读写要快一点。   STM8的FLASH除了储存程序代码之外,就是用于用户编程(存储数据),不像之前的51芯片不能利用内部储存代码的FLASH。   为方便大家阅读,本文内容已经整理成PDF文件: http://pan.baidu.com/s/1i5uWhJR 作者
[单片机]
STM8S定时器概述及TIM1配置
20200831Add:TIM2,TIM3 configuration program. 其中:f CK_CNT为定时器计数频率;f CK_PSC为系统的时钟频率;PSCR 为预分频值。 Codes of configuration:
[单片机]
<font color='red'>STM8S</font>定时器概述及TIM1<font color='red'>配置</font>
STM32F103使用内部rc振荡器做时钟
写在前面:标题“使用内部rc振荡器做时钟源”其实不太准确,实际应该是“使用内部rc振荡器经PLL倍频后做时钟源”,为了简单本文统一用“使用内部rc振荡器做时钟源”。 在做开发时,一些场合对时钟要求不是非常精确的时候可以省掉外部晶体和两个电容,好处是可以简化布线,节省成本并进一步降低功耗;缺点也很明显,HSI不够精准,官方给出的误差是在1%(25摄氏度)。根据手册,USB时钟不能用HSI经PLL后得到,但是实际应用时这样做是可以的(只是能用,但是非常不推荐)。 在用正点原子例程时,一直找不到相关例程,网上的一些教程也只是谈到了原理,代码部分都需要改动库函数,不方便移植。后来发现野火的例程里有,而且可以直接调用,就直接用了,详
[单片机]
使用STM8S自带BootLoader_2
仔细读ST支持文档 UM0560,按步骤操作。 程序准备工作: 1.开串口接收中断,发送。 /* ******************************************** UART2 configured as follow: - BaudRate = 115200 baud - Word Length = 8 Bits - One Stop Bit - No parity - Receive and transmit enabled - Receive interrupt - UART2 Clock disabled ***********************************
[单片机]
STM8S各个模块初始化
/***************可选择的内部或者外部时钟*******************/ #ifdef HSE_EXT void ClkInit(void) { CLK_ICKR = 0X00; //禁止高速内部时钟,从停机(Halt) 或活跃停机(Active Halt) 模式快速唤醒禁止 CLK_ECKR |= 0X01; //使能外部时钟 while(!(CLK_ECKR & 0x02)); //看外部晶振是否启动 CLK_ECKR |= 0X01; //使能外部时钟 CLK_CKDIVR = 0Xf9; //外部12M HZ晶振作为CPU时钟 //入选2
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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