Stm8的时钟系统
一、安全系统
如果启动,当MCU的主时钟的外部时钟源的时候,外部时钟源突然损坏,断开或者是因为其他原因而失效,则自动切换为辅助时钟源HSI/8,而且系统将一直使用辅助时钟源,直至MCU再次被复位,
设置时钟安全系统寄存器CLK_CSSR中的CSSEN位,可使能时钟安全系统。为安全起见,CSS一旦使能就不能被关闭,直到下一次复位。
二、Stm8S的时钟有三种:
1,1-24M高速外部晶体振荡器(HSE)
2,最大24M高速外部时钟信号(HSE user-ext)
3,16M高速内部RC振荡器(HSI)
4,128KHz低俗内部RC(LSI)
三、时钟切换
时钟切换涉及到的寄存器:
1,主时钟切换寄存器(CLK_SWR)--用来选择目标时钟
2,切换控制寄存器(CLK_SWCR)--判断目标时钟源是否就绪,使能时钟切换的执行
3,主时钟状态寄存器(CLK_CMSR)--用来指示当前当前所选的主时钟源
例如:
#include"stm8s105s4.h"
void Delay(unsigned int x)
{
unsigned int i,j;
for(i = x;i>0;i--)
for(j = 300;j>0;j--);
}
void GPIO_Init(void)
{
PA_DDR = 0x70;
PA_CR1 = 0x70;
PD_CR1 = 0x80;
PD_CR2 = 0x80;
}
main()
{
GPIO_Init();
while(1)
{
PA_ODR = 0x70;
Delay(2500);
PA_ODR = 0x00;
Delay(2500);
};
}
TLI中断子程序
@far @interrupt void TLI_Int(void)
{
CLK_SWR = 0xb4;
//主时钟切换寄存器,选择外部高速时钟
while(!(CLK_SWCR&0x08));
//等待切换控制寄存器第三位SWIF置1,即等待目标时钟准备就绪
CLK_SWCR |=0x02;
//目标始终准备就绪之后,将切换控制寄存器的第1位swen置1,执行切换
while(CLK_CMSR!=0xb4);
//若切换成功,主时钟状态寄存器的值为0xB4
CLK_CSSR |=0x01;
//CSSR(Clock safe system register)使能始终安全系统
}