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

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