就我个人而言,学习单片机可以分为新手和老手两种模式。新人急于先用。你得告诉他们怎么写一个能最快运行的程序,告诉他们怎么使用每个外围设备。老兵不一样。用的单片机对他们来说也不是太好奇。中断,无非配置中断,连接中断,打开中断,中断模式,中断功能,定时器,无非打开时钟和设置。
但是老将讲究区别。这个和那个有什么区别,这样可以避免惯性思维,不用错误,学的差不多,看手册,但是学习的心态不一样,更多的是举重。
闲话少,说说以下
STM8时钟系统看起来像这样,有一个外部输入时钟OSC、一个外部输出时钟CCO和CCO的可选输出
内部时钟有五种:CPU时钟、外设时钟、看门狗时钟、CAN总线时钟和自动唤醒时钟
CPU时钟源包括外部晶振、外部振荡器输入和内部高速振荡器输入,由主时钟选择,经主时钟分频后输出给CPU和内部窗口看门狗
外围时钟和CPU时钟源一样,不被主时钟除。二十有一个外设使能控制,输入到每个外设。从这里可以判断,外设中一定有分频器
自动唤醒时钟直接来自内部低速振荡器或外部时钟,并通过选项字节进行选择和输入
独立看门狗的时钟只能来自内部高速振荡器
CAN总线的时钟也直接从晶振获得,内部低速振荡器可以关闭
接下来,让我们看看寄存器
控制内部低速振荡器和内部高速振荡器的开关,以及开关状态识别。有哪些细节?观察该复位值0x01。也就是说,系统复位时内部低速振荡器使能,这意味着系统复位时必须使用内部低速振荡器。几乎不用看文档的其他部分就可以确定。
外部时钟使能和时钟状态
八位是只读的,用于标识当前所选系统的主时钟,即框图中主时钟开关的标识符。
让你选择哪个主时钟
监控时钟切换的过程
时钟分频包括内部高速时钟分频和外部高速时钟分频
还有一个2,用于确定各外设是否连接到时钟,相当于使能外设。没有时钟,外设无法运行
时钟安全系统配置
时钟输出的配置,也就是刚才提到的CCO的来源
CAN总线的时钟分频
剩下的一个是HIS的不断修正,另一个是SWIM时钟的配置,不需要我们关注
初始化时钟的流程包括
1.您要选择的主时钟已启用,等待稳定
2.选择主时钟和开关,并等待开关完成
3.选择系统时钟的分频数
4.选择相应的外设时钟
代码如下
Clock.c
#包含“clock.h”
无效时钟信号(u8时钟信号)
{
if(clockSel == HSE_CLOCK)
{
//切换到外置总是之前,因为我用的是24M时钟,需要修改插入flash的等待时间。
//这里解释一下选项字节,重新补上
//请注意,以下段落仅在使用16M时钟时有用
CLK-& gt;ECKR | = 0x01//使能外部晶体振荡器
while(!(CLK->;ECKR & amp0x 02));//等待时钟准备好
CLK-& gt;SWCR & amp;= ~((1 & lt;& lt2)|(1 & lt;& lt3));//时钟切换中断被禁止,中断标志被清除
CLK-& gt;SWR = 0xb 4;//时钟选择为健康安全环保
while(CLK->;SWCR & amp;0x 01);//等待慢时钟切换结束
CLK-& gt;SWCR | = 0x 01;//启用时钟切换
while(CLK->;CMSR!= 0xb 4);//等待系统时钟切换到0xb4
CLK-& gt;CKDIVR = 0x00//设置时钟预分频,并将其设置为fmaster = fclock
CLK-& gt;CCOR & amp;= ~(1 & lt;& lt0);//禁止CCO输出
//这时,内部总是应该关闭的
CLK-& gt;ICKR &。= ~ 0x01
}
else if(clockSel == HSI_CLOCK)
{
CLK-& gt;ICKR | = 0x01//启用内部高速时钟
while(!(CLK->;ICKR | 0x 02));//等它准备好
CLK-& gt;SWCR & amp;= ~((1 & lt;& lt2)|(1 & lt;& lt3));//时钟切换中断被禁止,中断标志被清除
CLK-& gt;SWR = 0xe 1;//时钟选择是HSI
while(CLK->;SWCR & amp;0x 01);//等待慢时钟切换结束
CLK-& gt;SWCR | = 0x 01;//启用时钟切换
while(CLK->;CMSR!= 0xe 1);//等待系统时钟切换到0xb4
CLK-& gt;CKDIVR = 0x00//设置时钟预分频,并将其设置为fmaster = fclock
CLK-& gt;CCOR & amp;= ~(1 & lt;& lt0);//禁止CCO输出
//此时,应该关闭外部时钟
CLK-& gt;ECKR & amp= ~ 0x01//使能外部晶体振荡器
}
}
Clock.h
# ifndef _ _ CLOCK _ H _
# define _ _ CLOCK _ H _
#包括“stm8s.h”
#定义健康安全环保_时钟0
#定义HSI_CLOCK 1
//初始化系统时钟。有两个选择,一个是hse,另一个是hsi
void clock init(u8 clock sel);
#endif
此外,还有时钟安全系统。这是什么组织
即当系统晶振因外部干扰或电路故障断开时,会自动切换到内部高速时钟,可以保证实际单片机电路系统不会失控,防止不利影响
原始链接:
1.《时钟系统 STM8时钟系统详解》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《时钟系统 STM8时钟系统详解》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/1571793.html