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。
可以通過讀取主時鐘狀態(tài)寄存器CLK_CMSR來獲取當前主時鐘是采用的哪一個時鐘源。
既然可以知道當前使用的是哪一個時鐘源了,那么怎么切換呢?就需要操作主時鐘切換寄存器CLK_SWR和切換控制寄存器CLK_SWCR了,先看CLK_SWCR寄存器:
用到了低四位,切換忙標志位SWBSY,切換使能位SWEN,切換中斷使能位SWIEN和時鐘切換中斷標志位SWIF。 而向主時鐘切換寄存器CLK_SWR寫入數據可以指定要切換的時鐘源: 
在開始切換時鐘時,需要首先置位SWEN,使能時鐘切換然后等待時鐘切換事件發(fā)生,然后機制時鐘切換即可,具體實現代碼如下(我這里切換到HSE時鐘源):
if(CLK_CMSR !=0xB4){ //如果當前時鐘不是使用外部HSE時鐘源 CLK_SWCR |=0x02; //使能時鐘切換 CLK_SWR = 0xB4; //切換時鐘, while((CLK_SWCR & 0x08)==0);//等待時鐘切換完成 CLK_SWCR &=~0x02;//禁止時鐘切換 }在調試時,代碼執(zhí)行完成之后,如果CLK_CMSR的值為0xB4則時鐘源切換成功。
這里附上一個例程,實現功能為:STM8時鐘源切換時鐘到HSE(8MHz),然后在主函數中循環(huán)打印一串字符串到PC機,例程地址為:http://download.csdn.net/detail/yuanquanzheng/9756971 另外我的編譯環(huán)境使用的是IAR for STM8
新聞熱點
疑難解答