STM8 时钟源切换

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章