hse、hsi、lsi 都可以作為系統主時鐘源,stm8 微控制器復位以後預設 hsi 的 8 分頻作為系統主時鐘,其原因是 hsi 穩定時間短,而其 8 分頻又可以保證系統在較差的 vdd 條件下安全啟動。在系統執行的過程中可以切換系統的主時鐘源。系統時鐘源的切換有 2 種方式:自動切換、手動切換。
自動切換可以使用最少的指令來完成主時鐘源的切換,使用者程式可以處理其他事物而不用關心確切的切換時間;手動切換在硬體準備好之後不立即切換,允許使用者精確的控制切換發生的時間。
自動切換的步驟為:
1.設定切換控制暫存器 clk_swcr 中的 swen 位,使能時鐘切換。
2.設定主時鐘切換暫存器 clk_swr,選擇目標時鐘源。切換控制暫存器中的切換忙標誌位 swbsy被硬體置位,目標時鐘源啟動,原時鐘源依舊驅動核心和外設。一旦目標時鐘源穩定,主時鐘切換暫存器 clk_swr 中的值將被複製到主時鐘狀態暫存器 clk_cmsr 中。此時,swbsy 位被硬體清零,目標時鐘源替代原時鐘源,clk_swcr 暫存器中的時鐘切換中斷標誌位 swif 被硬體置位,如此時鐘切換中斷被使能,則會產生中斷。
手動切換的步驟為:
1.設定主時鐘切換暫存器 clk_swr,選擇目標時鐘源。swbsy 位會被硬體置位,目標時鐘源啟動,原時鐘源依然驅動核心和外設。
2.使用者程式通過讀取 clk_swcr 暫存器的 swif 位來等待目標時鐘源準備就緒,swif 為 1 時代表目標時鐘源準備就緒。如果時鐘切換被使能,swif 被硬體置位時將觸發中斷。
3.如果目標時鐘源準備就緒,則使用者程式在預期的時間點將 clk_swcr 暫存器的 swen 位置位來進行時鐘切換。
通過判斷 swif 位可以判斷時鐘切換是否完成,通過讀取 clk_cmsr 暫存器可以得知當前的系統主時鐘源。切換完成之後要寫 swif 位為 0 你來清零此標誌。
不管是自動切換還是手動切換,如果原時鐘源在切換後仍然被其他模組使用,則原時鐘源不會被自動關閉,需要通過配置內部時鐘暫存器 clk_ickr 或外部時鐘暫存器 clk_eckr 來關閉。
如果時鐘切換沒有成功,可以通過軟體清零 swbsy 位來復位當前切換,使 clk_swr 恢復原時鐘源。
自動切換和手動切換的流程圖對比如圖所示。
下面我們通過例項來掌握 stm8s 時鐘切換的操作。本章節的例項設想開發板的 led 分別在系統主時鐘為 hsi/8、hsi、hse/16、lsi 的時候各閃爍 5 次,系統主時鐘的切換分別採用自動切換和手動切換,通過實驗現象即可判斷系統時鐘切換是否成功。
;//hsi 不分頻,主時鐘 16m
for(i=
0;i<
5;i++
)//hse 做主時鐘源,自動時鐘切換
clk_swcr|
=0x02
;//時鐘切換啟動,swen=1
clk_swr=
0xb4
;//選擇目標時鐘源,0xb4=hse
while
((clk_swcr&
0x08)==
0);//等待切換時間發生,此時 swif=1
clk_swcr&
=0xf7
;//清除切換標誌
if(clk_cmsr==
0xb4
)//判斷主時鐘源是否為 hse
}//lsi 做主時鐘源,手動時鐘切換,請先在選項位元組中使能 lsi
clk_swr=
0xd2
;//選擇目標時鐘源,0xd2=lsi
while
((clk_swcr&
0x08)==
0);//等待目標時鐘源準備就緒,此時 swif=1
clk_swcr&
=0xf7
;//清除切換標誌
clk_swcr|
=0x02
;//進行切換
if(clk_cmsr==
0xd2)}
while(1
)}void
initled
(void
)initled();函式為 led 初始化函式,與前面章節的**相同。
首先 hsi 做系統主時鐘。系統復位後預設 hsi/8=2m 為系統主時鐘;接著,通過修改 clk_ckdivr暫存器,使 hsi 不分頻作為系統主時鐘。
系統主時鐘由 hsi 切換至 hse 是通過自動切換方式實現的。首先置位 swen 位以啟動時鐘切換;然後設定 clk_swr 暫存器以選擇目標時鐘源為 hse;通過讀取 swif 位的值來判斷系統時鐘切換是否完成,如果 swif 為 1 則表示轉換完成;轉換完成之後要通過軟體來寫入 0 來清標誌位 swif。
系統主時鐘由 hse 切換至 lsi 是通過手動切換的方式實現的。在編寫程式之前需要先修改選項位元組option byte 以使能 lsi;程式中先設定 clk_swr 暫存器以選擇目標時鐘源為 lsi;通過讀取 swif的值等待至 lsi 就緒之後清除 swif 位,接著置位 swen 位啟動轉換。
可以通過讀取 clk_cmsr 暫存器檢視當前系統時鐘源是否為預設的目標時鐘源。
實驗現象為 led 以 4 種不同的頻率閃爍,與預期的實驗效果相符。
STM8 時鐘源切換
1 1 24mhz的高速外部晶體振盪器 hse 即外部晶振 2 1 24mhz的高速外部時鐘訊號 hse 3 16mhz的高速內部rc振盪器 hsi 4 128khz的低速內部rc振盪器 lsi 由上述時鐘框圖,可以分析得知,16mhz hsi rc振盪器經過乙個分頻器,將時鐘訊號輸出到主時鐘選擇器...
STM8微控制器時鐘
時鐘樹 時鐘源有四種 外部高速晶振 hse 1 16mhz 內部高速rc振盪器 hsi 16mhz 外部低速晶振 lse 32.768 內部低速rc振盪器 lsi 38khz 系統預設配置的時鐘為hsi的8分頻既2mhz 外部時鐘配置hse clk deinit 復位所有時鐘暫存器 clk hsic...
1 時鐘無縫切換
時鐘切換分成兩種方式,普通切換和去毛刺無縫切換。普通切換 就是不關心切出的時鐘是否存在毛刺,這種方式電路成本小。如果時鐘切換時,使用此時鐘的模組電路處於非工作狀態,或者模組內電路被全域性復位訊號reset住的,即使切出毛刺也不會導致dff誤觸發,這樣的模組可以選擇用此種切換方式。寫法很簡單assig...