STM8时钟源:
1、1~24MHz的高速外部晶体振荡器(HSE),即外部晶振
2、1~24MHz的高速外部时钟信号(HSE),
3、16MHz的高速内部RC振荡器(HSI)
4、128KHz的低速内部RC振荡器(LSI)
默认时钟源:
由上述时钟框图,可以分析得知,16MHz HSI RC振荡器经过一个分频器,将时钟信号输出到主时钟选择器。单片机上电后默认该分频器的值为8分频,即单片机上电主时钟默认使用HSI 8分频后的时钟输出,即主时钟频率fmaster=16MHz/8=2MHz,然后由主时钟输出时钟信号到外设和CPU。
时钟源选择:
可以通过读取主时钟状态寄存器CLK_CMSR来获取当前主时钟是采用的哪一个时钟源。
既然可以知道当前使用的是哪一个时钟源了,那么怎么切换呢?就需要操作主时钟切换寄存器CLK_SWR和切换控制寄存器CLK_SWCR了,先看CLK_SWCR寄存器:
用到了低四位,切换忙标志位SWBSY,切换使能位SWEN,切换中断使能位SWIEN和时钟切换中断标志位SWIF。
而向主时钟切换寄存器CLK_SWR写入数据可以指定要切换的时钟源:
在开始切换时钟时,需要首先置位SWEN,使能时钟切换然后等待时钟切换事件发生,然后机制时钟切换即可,具体实现代码如下(我这里切换到HSE时钟源):
if(CLK_CMSR !=0xB4){ //如果当前时钟不是使用外部HSE时钟源
CLK_SWCR |=0x02; //使能时钟切换
CLK_SWR = 0xB4; //切换时钟,
while((CLK_SWCR & 0x08)==0);//等待时钟切换完成
CLK_SWCR &=~0x02;//禁止时钟切换
}
在调试时,代码执行完成之后,如果CLK_CMSR的值为0xB4则时钟源切换成功。
这里附上一个例程,实现功能为:STM8时钟源切换时钟到HSE(8MHz),然后在主函数中循环打印一串字符串到PC机,例程地址为:http://download.csdn.net/detail/yuanquanzheng/9756971
另外我的编译环境使用的是IAR for STM8