0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM8S時鐘系統(tǒng)的時鐘初始化函數(shù)實現(xiàn)

牽手一起夢 ? 來源:eefocus ? 作者:eefocus ? 2020-01-24 17:32 ? 次閱讀

STM8S具有一個強大的時鐘系統(tǒng),內(nèi)部提供一個高速16M的RC振蕩器,和一個低速128K的RC振蕩器。

時鐘控制器功能強大而且靈活易用。其目的在于使用戶在獲得最好性能的同時,亦能保證消耗的功率最低。用戶可獨立地管理各個時鐘源,并將它們分配到CPU或各個外設(shè)。主時鐘和CPU時鐘均帶有預(yù)分頻器。具有安全可靠的無故障時鐘切換機制,可在程序運行中將主時鐘從一個時鐘源切換到另一個時鐘源。

一般來說,時鐘樹是配置時鐘、控制時鐘的依據(jù),所以需要掌握,以下是STM8S時鐘樹圖:

STM8S時鐘系統(tǒng)的時鐘初始化函數(shù)實現(xiàn)

從圖中看出,一共有3個時鐘源,分別是HSE(高速外部時鐘)、HSI(高速內(nèi)部時鐘)、LSI(低速內(nèi)部時鐘)。

HSE(高速外部時鐘)可通過外部晶振提供,HSI(高速內(nèi)部時鐘)為16M的RC振蕩器,LSI(低速內(nèi)部時鐘)為128K的RC振蕩器。

高速時鐘(HSE和HSI)可以通過分頻器進行降頻。降頻過后的時鐘和原本的時鐘都可以通過Master Clock Switch進行選擇,

以下是初始化系統(tǒng)時鐘的函數(shù)(默認使用16M內(nèi)部RC):

void Set_HSISpeed(void)

{

//啟用內(nèi)部高速晶振且無分頻16MHz

CLK_ICKR|=0x01; //開啟內(nèi)部HSI

while(?。–LK_ICKR&0x02));//HSI準備就緒

CLK_SWR=0xe1; //HSI為主時鐘源

CLK_CKDIVR=0x00; //HSI不分頻

}

如果需要切換時鐘,需要先等待時鐘穩(wěn)定:

void Switch_LSISpeed(void)

{

CLK_SWCR|=0x02; //開啟切換

CLK_ICKR|=0x08; //開啟LSI

while(!(CLK_ICKR&0x10));//HSI準備就緒

CLK_SWR=0xd2; //LSR為主時鐘源

while((CLK_SWCR & 0x01)==0x01);//等待切換完成

CLK_CKDIVR=0x00; //LSI不分頻

CLK_SWCR&=(~0x02); //關(guān)閉切換

}

void Switch_HSISpeed(void)

{

CLK_SWCR|=0x02; //開啟切換

CLK_ICKR|=0x01; //開啟內(nèi)部HSI

while(?。–LK_ICKR&0x02));//HSI準備就緒

CLK_SWR=0xe1; //HSI為主時鐘源

while((CLK_SWCR & 0x01)==0x01);//等待切換完成

CLK_CKDIVR=0x00; //HSI不分頻

CLK_SWCR&=(~0x02); //關(guān)閉切換

}

如果想直接降頻,只需要設(shè)置始終分頻:

void Set_CPU_Full_Speed(void)

{

CLK_CKDIVR=0x00; //HSI不分頻

}

void Set_CPU_Low_Speed(void)

{

CLK_CKDIVR=0x07; //HSI 128分頻

}

以上就是初始化時鐘的代碼,一般用于mian函數(shù)的第一句話,方便以后計算其他外設(shè)的時鐘頻率。

責任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16376

    瀏覽量

    178229
  • 振蕩器
    +關(guān)注

    關(guān)注

    28

    文章

    3832

    瀏覽量

    139120
  • 時鐘
    +關(guān)注

    關(guān)注

    11

    文章

    1734

    瀏覽量

    131518
收藏 人收藏

    評論

    相關(guān)推薦

    ESP32S2在復(fù)位初始化的時最初的GPIO的狀態(tài)是什么樣的?

    麻煩咨詢一下ESP32S2在復(fù)位初始化的時最初的GPIO的狀態(tài)是什么樣的?是默認輸入模式、還是默認為輸出模式、還是默認為高阻模式?如上圖的PCLK為一個攝像頭器件的輸入時鐘PCLK,和ESP32
    發(fā)表于 07-01 08:07

    求助,關(guān)于STM8S105全局中斷的問題求解

    環(huán)境是IAR 芯片stm8s105c6沒有使用庫函數(shù),而直接使用的寄存器。 我在主函數(shù)main中先初始化系統(tǒng)
    發(fā)表于 05-15 07:36

    STM8S的定時器1和定時器4同時初始化和打開遇到的疑問求解

    我把STM8S的定時器1和定時器4同時初始化和打開。然后分別在定時器1中斷函數(shù)和定時器4中斷函數(shù)里處理程序,發(fā)現(xiàn)定時器4不工作,當屏蔽定時器1后,定時器4就能工作了,這是怎么回事???如
    發(fā)表于 05-09 08:31

    STM8S TIM4中斷一開,程序異常怎么解決?

    使用內(nèi)部時鐘16M ,1分頻,TIM4定時8us,初始化程序如下: CLK->PCKENR1 = (uint8_t)(0x1C);//使能定時器和串口 TIM4->
    發(fā)表于 04-28 06:52

    stm32定時器在初始化參數(shù)之前是否必須開啟對應(yīng)時鐘?

    參數(shù)的時候,對應(yīng)定時器時鐘并沒有開啟,導(dǎo)致PWM不能正常輸出,當在這些函數(shù)之前,開啟對應(yīng)時鐘,就正常了。看是調(diào)試對比,TIM的寄存器沒有差別,不知道為什么,所以問一下在初始化參數(shù)之前是
    發(fā)表于 04-18 06:42

    請問STM8S的AWU功能的時鐘源能使用外接的32.768KHZ晶振嗎?

    請問大神,STM8S的AWU功能的時鐘源能使用外接的32.768KHZ晶振嗎?
    發(fā)表于 04-16 08:07

    關(guān)于STM32F103VC零下10℃時鐘初始化問題求解

    LSE和HSE,那么設(shè)備在零下10℃的時候重新上電,APP初始化LSE過不去; 2.如果BOOT初始化時鐘的時候,使用LSE和HSE,在APP里面重新配置為LSE和HSE,那么設(shè)備在零下10℃的時候
    發(fā)表于 04-15 06:12

    啟動外部16MHz時鐘后STM8S003的ADC無法初始化是怎么回事?

    如題,STM8S003F3P6做的驅(qū)動板,啟動外部16MHz時鐘,UART, TIMER, GPIO, 中斷等一切工作正常,整個系統(tǒng)運行也很OK。但當加入ADC初始化時,無法寫入ADC
    發(fā)表于 04-08 08:24

    STM32F4卡死在時鐘初始化配置上是哪里出了問題?

    時鐘初始化if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE){return HAL_TIMEOUT; }
    發(fā)表于 03-29 08:32

    STM32F303RCT6 CAN初始化時鐘卡住了顯示超時狀態(tài),造成初始化異常怎么解決?

    STM32F303RCT6 CAN初始化時鐘卡住了顯示超時狀態(tài),造成初始化異常!懇請大佬們幫忙解惑解惑,謝謝?。?/div>
    發(fā)表于 03-14 07:32

    使用CUBEMX生成配置好的UCPD外設(shè)初始化代碼后,未發(fā)現(xiàn)UCPDHAL庫函數(shù)是為什么?

    我使用CUBEMX生成配置好的UCPD外設(shè)初始化代碼后發(fā)現(xiàn)就使能外設(shè)時鐘且未發(fā)現(xiàn)UCPDHAL庫函數(shù),是我的CUBEMX版本低了嗎。
    發(fā)表于 03-14 07:32

    MCU單片機GPIO初始化該按什么順序配置?為什么初始化時有電平跳變?

    GPIO初始化時有時鐘配置、模式配置、輸出配置、復(fù)用配置,那么在編寫初始化代碼時,到底該按什么順序執(zhí)行呢?如果順序不當那初始化過程可能會出現(xiàn)短暫的電平跳變。
    的頭像 發(fā)表于 02-22 11:07 ?1548次閱讀
    MCU單片機GPIO<b class='flag-5'>初始化</b>該按什么順序配置?為什么<b class='flag-5'>初始化</b>時有電平跳變?

    rtc時鐘如何在啟動后會不被初始化為默認值?

    請教一個關(guān)于rtc的問題。 1.我發(fā)現(xiàn)我的rtc時鐘根據(jù)例子,在啟動后會被初始化為默認值。 但是如果我想在軟件復(fù)位或者看門狗復(fù)位的情況下,不讓我的rtc時鐘重新初始化。這樣是否能夠
    發(fā)表于 02-21 06:08

    使用CYB06445LQI-S3D42設(shè)備配置系統(tǒng)時鐘,BSP在時鐘初始化時失敗怎么解決?

    我們正在使用 CYB06445LQI-S3D42 設(shè)備。 從默認時鐘配置開始效果很好。 當我們嘗試根據(jù)電路板設(shè)計配置系統(tǒng)時鐘(我們有 ECO)時,BSP 無法
    發(fā)表于 01-19 06:12

    控制系統(tǒng)之間如何實現(xiàn)時鐘同步?

    控制系統(tǒng)之間如何實現(xiàn)時鐘同步? 控制系統(tǒng)之間的時鐘同步是確保不同系統(tǒng)之間的時鐘保持一致的過程。它
    的頭像 發(fā)表于 01-16 14:37 ?1133次閱讀