就我个人看来,研究一块单片机,分为新手和老手两种模式,新人迫切的想先用,你得告诉他们怎么样最快的写出一个能跑起来的程序,告诉他们每一个外设的使用方式,老手不同,用的单片机多了外设对于他们而言没太多好奇的,中断,无非配置中断,连接中断,打开中断,中断模式,中断函数,定时器,无非打开时钟,设置分频率,设置值,等中断到来计数,千篇一律,没什么花样

但是老手关注的是不同,这个和那个的差异是什么,这样就能避免惯性思维,不会用错,学起来差不多,都是对着手册读呗,但是学的心态不一样,更加的举重若轻

闲话少叙,下面说说STM8的时钟系统

STM8时钟系统看起来是这样的,有一个外部输入时钟OSC,一个外部输出时钟CCO,CCO可选输出

内部的时钟五大块,CPU时钟,外设时钟,看门狗时钟,CAN总线时钟以及自动唤醒时钟

CPU时钟的来源包括外部晶振,外部振荡器输入,内部高速振荡器输入,三种输入经过主时钟选择,再经过主时钟分频输出CPU以及内部窗口看门狗

外设时钟和CPU时钟来源一样,并不经过主时钟分频,二十有一个外设使能控制,输入到各个外设,从这里我们可以判断,外设里面肯定还有分频器

自动唤醒时钟直接来源于内部低速振荡器或者直接来源于外部始终,经过选项字节选择输入

独立看门狗的时钟只可能来自于内部高速振荡器

而CAN总线的时钟也是直接从晶振上获取的,同时内部低速振荡器是可以关掉的

接下来我们看看寄存器

控制内部低速振荡器和内部高速振荡器的开关以及开关状态标识,细节是什么,观察这个复位值,0x01,也就是说,复位的时候内部低速振荡器使能这代表着系统复位的时候肯定是使用内部低速振荡器的,不用看文档的其他部分这一点几乎就能确定

外部时钟使能以及时钟状态

八个位都是只读,标识当前我们选用的系统主时钟是谁,也就是框图中master clock switch的标识

让你来选择哪一个做主时钟

对时钟切换的过程进行监控

时钟分频,一是内部高速时钟的分频,二是外部高速时钟的分频

还有一个2,用来确定各个外设是否连接到时钟上,相当于外设使能,外设没有时钟是跑不起来的

时钟安全系统配置

时钟输出的配置,也就是刚才说的CCO的来源

CAN总线的时钟分频

剩下来的一个是HIS的始终修正,另一个是SWIM时钟的配置,都是不需要我们去关注的

初始化时钟的流程包括

1.      想要选择的主时钟使能,等待稳定

2.      选择主时钟并进行切换,等待切换完成

3.      选择系统时钟分频数

4.      选择相应的外设时钟

代码如下

Clock.c

#include "clock.h"

void ClockInit(u8 clockSel)
{
if(clockSel == HSE_CLOCK)
{
//切换到外部始终之前,因为我使用的是24M时钟,所以需要修改插入flash等待时间
//此处讲解选项字节再补上 //注意,下面这一段只能在使用16M一下时钟的时候有用
CLK->ECKR |= 0x01;//使能外部晶振
while(!(CLK->ECKR & 0x02));//等待时钟准备就绪
CLK->SWCR &= ~((1<<2)|(1<<3));//时钟切换中断禁止并清除中断标志
CLK->SWR = 0xB4;//时钟选择为HSE
while(CLK->SWCR & 0x01);//等待时钟切换慢的结束
CLK->SWCR |= 0x01;//使能时钟切换
while(CLK->CMSR != 0xB4);//等待系统时钟切换到0xb4
CLK->CKDIVR = 0x00;//设置时钟预分频,设置为fmaster = fclock
CLK->CCOR &= ~(1<<0);//禁止CCO输出 //此时,应当关闭内部始终
CLK->ICKR &= ~0x01;
}
else if(clockSel == HSI_CLOCK)
{
CLK->ICKR |= 0x01;//使能内部高速时钟
while(!(CLK->ICKR | 0x02));//等待准备就绪
CLK->SWCR &= ~((1<<2)|(1<<3));//时钟切换中断禁止并清除中断标志
CLK->SWR = 0xE1;//时钟选择为HSI
while(CLK->SWCR & 0x01);//等待时钟切换慢的结束
CLK->SWCR |= 0x01;//使能时钟切换
while(CLK->CMSR != 0xE1);//等待系统时钟切换到0xb4
CLK->CKDIVR = 0x00;//设置时钟预分频,设置为fmaster = fclock
CLK->CCOR &= ~(1<<0);//禁止CCO输出
//此时,应当关闭外部时钟
CLK->ECKR &= ~0x01;//使能外部晶振
}
}

Clock.h

#ifndef __CLOCK_H_
#define __CLOCK_H_
#include "stm8s.h" #define HSE_CLOCK 0
#define HSI_CLOCK 1 //初始化系统时钟,有两个选择,一个hse一个是hsi
void ClockInit(u8 clockSel); #endif

另外,有一个时钟安全系统,这是一个什么机构

也就是,当系统晶振由于外部干扰或者电路故障断开的时候,自动切换到内部高速时钟,这样能够保证实际的单片机电路系统不会失控,防止造成不良影响

STM8时钟系统详解的更多相关文章

  1. S3C2440时钟系统详解

    在讲述系统时钟之前,因为这些设备都是挂靠在系统时钟上的,所以必须先说系统时钟,S3C2440的时钟系统如下 外部时钟源分两种,晶振或者外部频率,由om3-2选择,时钟电路根据两种选择也有两种 我们来分 ...

  2. Bootstrap栅格系统详解,响应式布局

    Bootstrap栅格系统详解 栅格系统介绍 Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列. 栅格系统用于通 ...

  3. java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET

    java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了!      社区福利快来领取免费参加MDCC大会机会哦    Tag功能介绍—我们 ...

  4. Vmware12安装centos系统详解

    vmware12安装centos7系统详解 用虚拟机12安装centos7系统详细安装过程,后附centos7下载地址. 工具/原料 虚拟机12 centos7系统镜像 方法/步骤 1 1.百度搜索c ...

  5. centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解

    centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解 操作系统:centos 7.2 x86_64 安装walle系统服务端 1.以下安装,均在宿主机( ...

  6. syslog之一:Linux syslog日志系统详解

    目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...

  7. 利用python求解物理学中的双弹簧质能系统详解

    利用python求解物理学中的双弹簧质能系统详解 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的 ...

  8. 搭建zabbix监控系统详解

    搭建zabbix监控系统详解 文:warren   博文大纲:一.前言 二.zabbix监控架构三.搭建Zabbix监控服务器四.搭建过程中遇到有些服务无法正常启动的解决办法 一.前言 : 要想实时的 ...

  9. django用户投票系统详解

    投票系统之详解 1.创建项目(mysite)与应用(polls) django-admin.py startproject mysite python manage.py startapp polls ...

随机推荐

  1. ALAssetsLibrary 照片相关 浅析

    ALAssetsLibrary 提供了访问iOS设备下”照片”应用下所有照片和视频的接口: 从 ALAssetsLibrary 中可读取所有的相册数据,即 ALAssetsGroup 对象列表: 从每 ...

  2. java 接口的回调

    Example6_3.java interface ShowMessage { void 显示商标(String s); } class TV implements ShowMessage { pub ...

  3. POJ 1236 Network of Schools(tarjan算法 + LCA)

    这个题目网上有很多答案,代码也很像,不排除我的.大家的思路应该都是taijan求出割边,然后找两个点的LCA(最近公共祖先),这两个点和LCA以及其他点构成了一个环,我们判断这个环上的割边有几条,我们 ...

  4. 配置Notepad++直接运行Python、Perl、C、C++、Java

    运行(F5),输入命令并保存 cmd /k python "$(FULL_CURRENT_PATH)" & ECHO. & PAUSE & EXIT cmd ...

  5. git 管理多个私钥

    .ssh/config文件: host imspring hostname 182.92.153.2 IdentityFile ~/.ssh/id_rsa port 22

  6. AJAX(XMLHttpRequest)进行跨域请求方法详解(三)

    注意:以下代码请在Firefox 3.5.Chrome 3.0.Safari 4之后的版本中进行测试.IE8的实现方法与其他浏览不同. 3,带验证信息的请求 身份验证是Web开发中经常遇到的问题,在跨 ...

  7. 浅谈:html5和html的区别

    什么是html5呢? html5最先由WHATWG(Web 超文本应用技术工作组)命名的一种超文本标记语言,随后和W3C的xhtml2.0(标准)相结合,产生现在最新一代的超文本标记语言.可以简单点理 ...

  8. linq to sql DAL

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data. ...

  9. CentOS/RHEL 7中的firewall控制

    从CentOS/RHEL 7开始firewall的使用.很多人卸载了firewall重装iptables.但是有时候只是为了开放端口什么的,没有那个闲工夫卸载重装: 永久打开一个新端口(如TCP/80 ...

  10. 标签(改变样式style)

    id可以换为class,class对应的名字可以多个一样 <div class="box">box1</div> <div class="b ...