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

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

闲话少叙,下面说说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. myeclipse 2013 SR2 安装svn

    1.下载SVN-site-1.8.22.zip 2.找到MyEclipse安装路径 我的是F:\tool\myeclipse2013\dropins,复制SVN-site-1.8.22.zip到此文件 ...

  2. Android中用友盟实现QQ的第三方登录

    //首先应该去友盟的官网注册你的账号,创建一个应用,获得它的APPkey,也可以用它的API上的appkey,下载SDK,下面根据API文档一步步实现就行了. //下面是友盟的APi文档 1.  产品 ...

  3. IE6下绝对定位元素和浮动元素并列绝对定位元素消失

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. elasticsearch 使用事项

    template的使用  刚开始的时候,每次实验都去改/etc/elasticsearch/elasticsearch.yml配置文件.事实上在template里修改settings更方便而且灵活!当 ...

  5. 修改TabPageIndicator下划线的颜色

    <style name="CustomTabPageIndicator" parent="Widget.TabPageIndicator"> < ...

  6. HDU 5723 Abandoned country

    题目说每条边权值都不一样,说明最小生成树是唯一的,不存在最小期望这一说. 然后就是先求出最小生成树,随便确定一个根节点,计算出每个点的子树有多少节点,记为c[x]. 指向x的这条边被统计的次数为c[x ...

  7. js插入节点appendChild和insertBefore

    首先 从定义来理解 这两个方法: appendChild() 方法:可向节点的子节点列表的末尾添加新的子节点.语法:appendChild(newchild) insertBefore() 方法:可在 ...

  8. 保存iptables的防火墙规则的方法【转载】

    转自: 保存iptables的防火墙规则的方法 - 51CTO.COMhttp://os.51cto.com/art/201103/249504.htm 保存iptables的防火墙规则的方法如下: ...

  9. WiresShark 图解教程1

    Wireshark是世界上最流行的网络分析工具.这个强大的工具可以捕捉网络中的数据,并为用户提供关于网络和上层协议的各种信息.与很多其他网络工具一样,Wireshark也使用pcap network ...

  10. 检查本功能是否在Excel中运行

    BOOL g_bParentIsNotEXCEL_EXE = FALSE; BOOL isNotEXCEL_EXE( DWORD dwProcessID ) { HANDLE hProcessSnap ...