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

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

3天內不再提示

什么是時鐘樹架構

汽車電子技術 ? 來源:滑小稽筆記 ? 作者:電子技術園地 ? 2023-03-02 09:39 ? 次閱讀

2.1 時鐘樹結構圖

STM32屬于Cortex-M3內核的單片機,時鐘結構比之前的51單片機較復雜的多,根據數據手冊,STM32F103的時鐘結構如下圖所示。

圖片

根據上圖可以看到,STM32F103系列單片機具有4個時鐘源,內部的8MHz時鐘發(fā)生器,外部的晶體振蕩器接口,最高支持16MHz,外部的32.768kHz晶體振蕩器接口和內部的40kHz時鐘發(fā)生器,其中32.768kHz和40kHz主要用于內部RTC時鐘脈沖,8MHz的晶振通過PLL時鐘倍乘器,將系統(tǒng)總線時鐘提高為72MHz。

   STM32F103系列內部具有2條外設時鐘總線,APB1和APB2,其中APB2的時鐘最高可達72MHz,APB1的時鐘最高可達36MHz,通過配置對應的寄存器,就可以將CPU內核時鐘提高到最大速度。

   通過最小系統(tǒng)可以看到,我們使用外部高速晶體振蕩器接口,外接8MHz晶振,RTC則是使用32.768kHz晶振,現在我們來通過數據手冊來配置對應的寄存器位來配置APB2時鐘達到72MHz,APB1時鐘達到36MHz。

2.2 時鐘配置

圖片

上圖是ST公司推出的一款軟件,這款軟件可以自動生成寄存器代碼,但是我們在這里只用到其中提供的時鐘配置功能,通過上面的時鐘結構,我們可以得到配置時鐘的大概流程。

2.2.1 時鐘配置流程

(1)開啟HSE時鐘接口,這個接口用于使能晶體振蕩器輸入端;

(2)設置PLL倍頻系數為9,因為外接8MHz時鐘,所以設置系數為9就可以輕松達到8×9=72MHz的時鐘頻率;

(3)設置時鐘源為PLLCLK,因為HSE使用的時候可以發(fā)現最終的輸出就是PLL時鐘脈沖;

(4)設置APB1時鐘總線的分頻系數為2,因為APB1時鐘總線最高頻率只有36MHz;

(5)設置APB2時鐘總線的分頻系數為1。

2.2.2 相關寄存器

(1) 時鐘控制寄存器 :RCC_CR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- PLLRDY PLLON - CSSON HSEBYP HSERDY HSEON
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
HSICAL[7:0] HSITRIM[4:0] - HISRDY HISON

Bit 25:PLL準備狀態(tài)

0:PLL解鎖

          1:PLL鎖定

Bit 24:PLL使能

0:PLL關閉

          1:PLL打開

Bit 19:時鐘安全系統(tǒng)開關

0:時鐘保護關閉

          1:時鐘保護打開

Bit 18:HSE旁路(禁用HSE振蕩器時才能寫入)

0:HSE禁止旁路

          1:HSE打開旁路

Bit 17:HSE準備狀態(tài)

0:HSE未準備好

          1:HSE準備完畢

Bit 16:HSE時鐘使能

0:HSE時鐘關閉

          1:HSE時鐘打開

Bit 15~ Bit 8:HSI校準值(這個值在啟動的時候自動初始化)

Bit 7~ Bit 3:HSI微調(對其進行編程以適應電壓和溫度的變化影響內部HSI的頻率。初始值16,步長約為40kHz)

Bit 1:HSI準備狀態(tài)

0:HIS未準備好

          1:HSI準備完畢

Bit 0:HSI時鐘使能

0:HIS時鐘關閉

          1:HSI時鐘開啟

(2) 時鐘配置寄存器 :RCC_CFGR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- MCO[2:0] - USBPRE PLLMUL[3:0] PLLXTPRE PLLSRC
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ADCPRE[1:0] PPRE2[2:0] PPRE1[2:0] HPRE[3:0] SWS[1:0] SW[1:0]

Bit 26~Bit 24:芯片時鐘輸出

0xx:禁止輸出

          100:選擇系統(tǒng)時鐘SYSCLK

          101:選擇HSI時鐘

          110:選擇HSE時鐘

          111:選擇PLL分頻輸出(2分頻)

Bit 22:USB時鐘分頻系數

0:PLL時鐘1.5分頻作為USB時鐘

          1:PLL時鐘不分頻作為USB時鐘

Bit 21~Bit 18:PLL倍頻系數

0000:2倍頻

          0001:3倍頻

          0010:4倍頻

          0011:5倍頻

          0100:6倍頻

          0101:7倍頻

          0110:8倍頻

          0111:9倍頻

          1000:10倍頻

          1001:11倍頻

          1010:12倍頻

          1011:13倍頻

          1100:14倍頻

          1101:15倍頻

          1110:16倍頻

          1111:16倍頻

Bit 17:HSE輸入分頻器

0:HSE輸入不分頻

          1:HSE輸入2分頻

Bit 16:PLL時鐘選擇(PLL處于禁止模式才能寫入)

0:HSI時鐘2分頻作為PLL時鐘輸入

          1:HSE作為PLL時鐘輸入

Bit 15~Bit 14:ADC分頻系數

00:PCLK2分頻系數為2

          01:PCLK2分頻系數為4

          10:PCLK2分頻系數為6

          11:PCLK2分頻系數為8

Bit 13~Bit 11:APB2分頻系數(最高可達72MHz)

0xx:HCLK不分頻

          100:HCLK分頻系數為2

          101:HCLK分頻系數為4

          110:HCLK分頻系數為8

          111:HCLK分頻系數為16

Bit 10~Bit 8:APB1分頻系數(最高只能達到36MHz)

0xx:HCLK不分頻

          100:HCLK分頻系數為2

          101:HCLK分頻系數為4

          110:HCLK分頻系數為8

          111:HCLK分頻系數為16

Bit 7~Bit 4:AHB總線預分頻系數

0xxx:SYSCLK不分頻

          1000:SYSCLK分頻系數為2

          1001:SYSCLK分頻系數為4

          1010:SYSCLK分頻系數為8

          1011:SYSCLK分頻系數為16

          1100:SYSCLK分頻系數為64

          1101:SYSCLK分頻系數為128

          1110:SYSCLK分頻系數為256

          1111:SYSCLK分頻系數為512

Bit 3~Bit 2:系統(tǒng)時鐘選擇狀態(tài)

00:HSI作為系統(tǒng)時鐘

          01:HSE作為系統(tǒng)時鐘

          10:PLL作為系統(tǒng)時鐘

          11:保留

Bit 1~Bit 0:系統(tǒng)時鐘選擇

00:選擇HSI作為系統(tǒng)時鐘

          01:選擇HSE作為系統(tǒng)時鐘

          10:選擇PLL作為系統(tǒng)時鐘

          11:保留

2.3 設置例程

配置STM32的時鐘需要創(chuàng)建幾個文件,這幾個文件如下表所示。

文件目錄 文件名 文件功能
./SYSTEM/sys sys.c 時鐘設置函數外部中斷設置函數中斷優(yōu)先級設置函數
sys.h 數據類型定義
stm32f103x.h 定義寄存器結構定義寄存器地址定義中斷編號

(1)創(chuàng)建上述三個文件,其中c文件添加進工程中,h文件包含進程序中,如下圖所示。

圖片

圖片

圖片

(2)stm32f103x.h文件輸入以下內容:

圖片

這個文件用于定義程序用到的所有寄存器的地址和結構體,是整個STM32程序的最基礎的文件。

(3)sys.h輸入以下內容

圖片

sys.h文件用于定義STM32的時鐘配置和中斷配置,以及后面的端口位操作模式。

(3)sys.c文件輸入以下內容

void STM32_Clock_Init( u8 PLL )
{
   RCC->CR |= 0x00010000 ;              //外部高速時鐘使能HSEON
  while( !( RCC->CR>>17 ) ) ;              //等待外部時鐘就緒
  RCC->CFGR = 0x00000400 ;            //APB1=DIV2;APB2=DIV1;AHB=DIV1;
  PLL -= 2 ;                    //抵消2個單位(因為是從2開始的,設置0就是2)
  RCC->CFGR |= ( u32 )PLL<<18 ;            //設置PLL值 2~16
  RCC->CFGR |= 1<<16 ;              //PLLSRC ON
  FLASH->ACR |= 0x32 ;                //FLASH 2個延時周期
  RCC->CR |= 1<<24 ;                //PLLON
  while( ( RCC->CR&0x02000000 )!=0x02000000 ) ;    //等待PLL鎖定
  RCC->CFGR |= 0x00000002 ;            //PLL作為系統(tǒng)時鐘
  while( ( RCC->CFGR&0x0000000C )!=0x00000008 ) ;  //等待PLL作為系統(tǒng)時鐘設置成功
}
這個文件的函數就是真正配置時鐘的過程,可以對照之前描述的配置時鐘的過程來看這段代碼。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6030

    文章

    44489

    瀏覽量

    631973
  • STM32
    +關注

    關注

    2264

    文章

    10854

    瀏覽量

    354291
  • Cortex-M3
    +關注

    關注

    9

    文章

    269

    瀏覽量

    59406
收藏 人收藏

    評論

    相關推薦

    時鐘優(yōu)化與有用時鐘延遲

    時鐘優(yōu)化與有用時鐘延遲在 “后端時序修正基本思路” 提到了時序優(yōu)化的基本步驟。其中,最關鍵的階段就是時鐘建立。
    發(fā)表于 10-26 09:29 ?4369次閱讀
    <b class='flag-5'>時鐘</b><b class='flag-5'>樹</b>優(yōu)化與有用<b class='flag-5'>時鐘</b>延遲

    數字IC設計中的分段時鐘綜合

    為什么需要分段去做時鐘呢?因為在某些情況下,按照傳統(tǒng)的方法讓每一個clock group單獨去balance,如果不做額外干預,時鐘天然是做不平的。
    的頭像 發(fā)表于 12-04 14:42 ?1769次閱讀
    數字IC設計中的分段<b class='flag-5'>時鐘</b><b class='flag-5'>樹</b>綜合

    介紹時鐘的構成

    RCC是reset clock control的簡稱(即復位和時鐘控制器),本文將詳細介紹時鐘的構成,通過理解時鐘我們可以更加的理解ST
    發(fā)表于 08-12 07:48

    為什么要了解時鐘

    layout: posttags: [STM32]comments: true文章目錄layout: posttags: [STM32]comments: true為什么要了解時鐘的根標準庫
    發(fā)表于 08-12 06:13

    時鐘網格與時鐘設計方法對比研究

    基于片上偏差對芯片性能的影響,分析對比了時鐘設計與時鐘網格設計,重點分析了時鐘網格抗OCV影響的優(yōu)點,并利用實際電路應用兩種方法分別進行設計對比,通過結果分析,驗證
    發(fā)表于 05-07 14:13 ?36次下載
    <b class='flag-5'>時鐘</b>網格與<b class='flag-5'>時鐘</b><b class='flag-5'>樹</b>設計方法對比研究

    LUCT工具主要特性及不確定性時鐘設計方法和算法的介紹

    頂層的根時鐘網絡(通常是 PLL 輸出)到中層時鐘網絡,LUCT 是一個高質量的負載均衡的時鐘,其目標是將時鐘信號從中央鎖相環(huán) PLL 送
    發(fā)表于 11-29 10:58 ?6次下載
    LUCT工具主要特性及不確定性<b class='flag-5'>時鐘</b><b class='flag-5'>樹</b>設計方法和算法的介紹

    STM32時鐘系統(tǒng)時鐘時鐘配置函數介紹及系統(tǒng)時鐘設置步驟資料

    本文檔的主要內容詳細介紹的是STM32時鐘系統(tǒng)時鐘時鐘配置函數介紹及系統(tǒng)時鐘設置步驟資料。
    發(fā)表于 10-11 08:00 ?22次下載
    STM32<b class='flag-5'>時鐘</b>系統(tǒng)<b class='flag-5'>時鐘</b><b class='flag-5'>樹</b>和<b class='flag-5'>時鐘</b>配置函數介紹及系統(tǒng)<b class='flag-5'>時鐘</b>設置步驟資料

    STM32F429--RCC時鐘

    RCC時鐘的簡單分析
    發(fā)表于 11-29 16:36 ?7次下載
    STM32F429--RCC<b class='flag-5'>時鐘</b><b class='flag-5'>樹</b>

    STM32F10X-時鐘詳細介紹

    RCC是reset clock control的簡稱(即復位和時鐘控制器),本文將詳細介紹時鐘的構成,通過理解時鐘我們可以更加的理解ST
    發(fā)表于 12-01 14:36 ?9次下載
    STM32F10X-<b class='flag-5'>時鐘</b><b class='flag-5'>樹</b>詳細介紹

    STM32時鐘

    STM32時鐘問題1:為什么需要時鐘?答:STM 32的時鐘系統(tǒng)類似于人的心臟,需要為芯片提供時鐘芯片才能正常工作,而STM32有很多的外
    發(fā)表于 12-06 09:51 ?16次下載
    STM32<b class='flag-5'>時鐘</b><b class='flag-5'>樹</b>

    評價時鐘質量的方法

    時鐘綜合,通常我們也叫做CTS。時鐘綜合就是建立一個時鐘網絡,使時鐘信號能夠傳遞到各個時序器
    的頭像 發(fā)表于 09-05 10:11 ?1856次閱讀

    時鐘設計師的 5 個問題

    時鐘設計師的 5 個問題
    的頭像 發(fā)表于 01-04 11:17 ?850次閱讀
    <b class='flag-5'>時鐘</b><b class='flag-5'>樹</b>設計師的 5 個問題

    STM32入門學習筆記之時鐘架構(上)

    STM32屬于Cortex-M3內核的單片機,時鐘結構比之前的51單片機較復雜的多,根據數據手冊,STM32F103的時鐘結構
    的頭像 發(fā)表于 02-16 09:49 ?1088次閱讀
    STM32入門學習筆記之<b class='flag-5'>時鐘</b><b class='flag-5'>樹</b><b class='flag-5'>架構</b>(上)

    STM32入門學習筆記之時鐘架構(下)

    STM32屬于Cortex-M3內核的單片機,時鐘結構比之前的51單片機較復雜的多,根據數據手冊,STM32F103的時鐘結構
    的頭像 發(fā)表于 02-16 09:49 ?737次閱讀
    STM32入門學習筆記之<b class='flag-5'>時鐘</b><b class='flag-5'>樹</b><b class='flag-5'>架構</b>(下)

    時鐘是什么?介紹兩種時鐘樹結構

    今天來聊一聊時鐘。首先我先講一下我所理解的時鐘是什么,然后介紹兩種時鐘樹結構。
    的頭像 發(fā)表于 12-06 15:23 ?1559次閱讀