STM8时钟系统详解
就我个人看来,研究一块单片机,分为新手和老手两种模式,新人迫切的想先用,你得告诉他们怎么样最快的写出一个能跑起来的程序,告诉他们每一个外设的使用方式,老手不同,用的单片机多了外设对于他们而言没太多好奇的,中断,无非配置中断,连接中断,打开中断,中断模式,中断函数,定时器,无非打开时钟,设置分频率,设置值,等中断到来计数,千篇一律,没什么花样
但是老手关注的是不同,这个和那个的差异是什么,这样就能避免惯性思维,不会用错,学起来差不多,都是对着手册读呗,但是学的心态不一样,更加的举重若轻
闲话少叙,下面说说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时钟系统详解的更多相关文章
- S3C2440时钟系统详解
在讲述系统时钟之前,因为这些设备都是挂靠在系统时钟上的,所以必须先说系统时钟,S3C2440的时钟系统如下 外部时钟源分两种,晶振或者外部频率,由om3-2选择,时钟电路根据两种选择也有两种 我们来分 ...
- Bootstrap栅格系统详解,响应式布局
Bootstrap栅格系统详解 栅格系统介绍 Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列. 栅格系统用于通 ...
- java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET
java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了! 社区福利快来领取免费参加MDCC大会机会哦 Tag功能介绍—我们 ...
- Vmware12安装centos系统详解
vmware12安装centos7系统详解 用虚拟机12安装centos7系统详细安装过程,后附centos7下载地址. 工具/原料 虚拟机12 centos7系统镜像 方法/步骤 1 1.百度搜索c ...
- centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解
centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解 操作系统:centos 7.2 x86_64 安装walle系统服务端 1.以下安装,均在宿主机( ...
- syslog之一:Linux syslog日志系统详解
目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...
- 利用python求解物理学中的双弹簧质能系统详解
利用python求解物理学中的双弹簧质能系统详解 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的 ...
- 搭建zabbix监控系统详解
搭建zabbix监控系统详解 文:warren 博文大纲:一.前言 二.zabbix监控架构三.搭建Zabbix监控服务器四.搭建过程中遇到有些服务无法正常启动的解决办法 一.前言 : 要想实时的 ...
- django用户投票系统详解
投票系统之详解 1.创建项目(mysite)与应用(polls) django-admin.py startproject mysite python manage.py startapp polls ...
随机推荐
- Loadrunner VuGen实战---基本组成、录制流程、协议、脚本优化、参数化(三)
一.3大基本组件:VuGen.Controller.Analysis 1.VuGen:录制.编写脚本. 2.Controller:性能测试场景设计以及监控的地方. 3.Analysis:生成图表报告的 ...
- 第三方 XListview 上拉加载、下拉刷新、分页加载和Gson解析
注意:此Demo用的是第三方的Xlistview.jar,需要复制me文件夹到项目中,两个XML布局文件和一张图片 把下面的复制到String中 <string name="xlist ...
- pat L1-006. 连续因子
L1-006. 连续因子 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一个正整数N的因子中可能存在若干连续的数字.例如630 ...
- Oracle Sql优化之范围处理
1.表中字段自关联与分析函数的性能比较,自关联需要扫描表两次,分析函数扫描一次即可 ----自关联 select v1.proj_id,v1.proj_start,v1.proj_end from v ...
- HDU 2671 Can't be easier
简单的几何题目 点(a,b)关于直线Ax+By+C=1对称点的公式 #include<cstdio> #include<cstring> #include<cmath&g ...
- 优化のzencart URL &zenid=.....
zencart URL后面带有一串&zenid=.....解决方案 发布时间:2013年3月16日 次浏览:106 经木木测试,此方法可用. ================= 最近一个客户的 ...
- MoQ(基于.net3.5,c#3.0的mock框架)简单介绍
我们在做单元测试的时候,常常困扰于数据的持久化问题,很多情况下我们不希望单元测试影响到数据库中的内容,而且受数据库的影响有时我们的单元测试的速度会很慢,所以我们往往希望将持久化部分隔离开,做单元测试的 ...
- 【转】Apache 关于 mod_rewrite 遇到 %2F或%5C (正反斜杠)等特殊符号导致URL重写失效出现404的问题
.htaccess 文件 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d Rew ...
- Ubuntu里字符编码设置
Ubuntu里字符编码设置 Ubuntu系统在默认的状况下只支持中文UTF-8编码,但是我们写的一些文档,还有java代码编译时采用gbk编码.所以需要修改.步骤如下: www.2cto.com ...
- attach
http://bbs.chinaunix.net/thread-2091967-1-1.html 大概跟父进程,子进程,信号等有关,一个没有操作系统的赤裸裸的单片机上是不可以attach的.