STM32確認APB時鐘

一、APB時鐘概述

STM32是一種基於ARM Cortex-M架構的微控制器,APB(Advanced Peripheral Bus)是在該架構中應用的總線,用於連接芯片內部的外設模塊,如定時器、UART、SPI等。APB總線可以分為APB1和APB2,其中APB1最大頻率為36MHz,APB2最大頻率為72MHz。

APB總線時鐘來源於系統時鐘和PLL(Phase Locked Loop)倍頻器的輸出,因此APB總線時鐘的頻率是與系統時鐘和PLL倍頻器的設置有關的。對於不同型號的STM32,其系統時鐘和PLL倍頻器的設置也不盡相同,因此確認APB時鐘需要根據具體芯片型號的手冊來查閱和確定。

二、確定APB時鐘的方法

1. 查閱芯片手冊

STM32各型號的芯片手冊都會詳盡地介紹系統時鐘和PLL倍頻器的設置方法以及APB時鐘的計算公式。一般來說,在系統時鐘和PLL倍頻器確定的情況下,APB時鐘的頻率可以通過如下公式計算:

APB_FREQ = SYSCLK_FREQ / APB_DIV

其中,APB_DIV是APB總線分頻係數,其值與每個具體的外設模塊有關。例如,對於TIM3定時器模塊來說,其所在的APB1總線分頻係數為2,因此APB1時鐘頻率為APB_FREQ/2。需要注意的是,對於一些特定的外設模塊,比如USB和Ethernet,其時鐘頻率是不能超過48MHz的,因此需要根據情況進行相應的限制。

2. 通過代碼計算確定

除了查閱手冊來確認APB時鐘之外,我們還可以通過代碼計算來獲得APB時鐘的頻率。為此我們需要調用HAL庫提供的一些函數來獲取系統時鐘和PLL倍頻器的相關信息,然後根據上述公式來計算APB時鐘。

以下是一個示例代碼:

#include "stm32f4xx_hal.h"

int main()
{
    HAL_Init();
    SystemClock_Config(); // 獲取系統時鐘和PLL倍頻器的設置

    uint32_t sysclk_freq = HAL_RCC_GetSysClockFreq(); // 獲取系統時鐘頻率
    RCC_PeriphCLKInitTypeDef periph_clk_init;
    HAL_RCCEx_GetPeriphCLKConfig(&periph_clk_init); // 獲取PLL倍頻器的設置
    uint32_t pll_freq = 0;
    if (periph_clk_init.PLL.PLLSource == RCC_PLLSOURCE_HSE)
    {
        if (periph_clk_init.PLL.PLLM == 25 && periph_clk_init.PLL.PLLN == 336 && 
            periph_clk_init.PLL.PLLP == RCC_PLLP_DIV2 && periph_clk_init.PLL.PLLQ == 7)
        {
            pll_freq = 84000000;
        }
    }
    uint32_t apb1_freq = sysclk_freq / periph_clk_init.APB1CLKDivider; // 計算APB1時鐘頻率
    uint32_t apb2_freq = sysclk_freq / periph_clk_init.APB2CLKDivider; // 計算APB2時鐘頻率

    return 0;
}

以上示例代碼中,通過調用HAL_RCC_GetSysClockFreq函數獲取系統時鐘頻率,再通過HAL_RCCEx_GetPeriphCLKConfig函數獲取PLL倍頻器的設置。在這個例子中,我們假設PLL倍頻器的設置是25MHz的外部時鐘源,倍頻器參數為PLL倍頻因子為336,輸出給系統時鐘為84MHz。

最後通過除以APB總線分頻係數,就能得到APB1和APB2時鐘的頻率了。

3. 使用CubeMX配置工具確定

使用STM32CubeMX配置工具可以方便地配置系統時鐘和PLL倍頻器,然後由工具自動計算出APB時鐘的頻率。這個方法不需要我們手動計算,同時可以在線生成相應的初始化代碼。只需要打開CubeMX工具,在Clock Configuration頁面中進行設置即可。

以下是一個示例截圖:

由於不同型號的STM32芯片都有不同的時鐘配置和限制,因此在使用CubeMX配置工具之前需要先查閱手冊,了解所選型號的限制和規範。

三、總結

確認APB時鐘需要根據具體芯片型號的手冊來查閱和確定。我們可以使用公式計算APB時鐘,也可以通過HAL庫提供的函數和CubeMX工具來獲得APB時鐘的頻率。

原創文章,作者:MFVVB,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/361722.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
MFVVB的頭像MFVVB
上一篇 2025-02-25 18:17
下一篇 2025-02-25 18:17

相關推薦

  • 詳解STM32時鐘

    一、時鐘系統概述 時鐘是嵌入式系統中最重要的部分之一。在STM32中,時鐘系統可以分為系統時鐘、時鐘樹、PLL鎖相環以及分頻器這幾個部分。 系統時鐘負責提供基準時鐘信號,它主要由內…

    編程 2025-02-15
  • 深入解析羅盤時鐘HTML代碼

    HTML作為一門標記語言,已經成為了現代互聯網的基石之一。在HTML中,羅盤時鐘是一個非常有趣的小項目,它不僅可以展示開發者的技巧水平,同時也是一個很好的實踐項目。在這篇文章中,我…

    編程 2025-01-27
  • LinuxMtime——Linux系統下的時鐘管理工具

    一、LinuxMtime的介紹 LinuxMtime是一款運行在Linux系統下的時鐘管理工具。它可以自動同步網絡時間,並對系統時間進行精確控制,從而提高系統運行時的時間準確性。作…

    編程 2025-01-24
  • 如何在Windows時鐘中添加秒數

    一、Windows時鐘如何顯示時間 Windows時鐘既是計算機硬件的一部分,也是操作系統的一部分。計算機硬件中的時鐘通常使用晶振來計時,Windows操作系統會獲取硬件時鐘的計時…

    編程 2025-01-16
  • js羅盤時鐘代碼,js羅盤時鐘代碼大全

    本文目錄一覽: 1、電腦桌面羅盤時鐘源代碼怎麼寫 2、DW網頁怎麼設計一個時鐘 3、怎麼在電腦上設置代碼時鐘? 4、求大神製作一個電腦版羅盤時鐘壁紙? 5、羅盤代碼是由幾部分組成的…

    編程 2025-01-09
  • 用Vue實現動態展示當前時間 – 輕鬆定製自己的網站時鐘

    一、Vue實現動態展示當前時間 在前端開發中,常常需要展示當前時間。一種常見的方式是使用JavaScript的Date對象來獲取當前時間並實時更新。在Vue中,可以將當前時間綁定到…

    編程 2025-01-09
  • 動態時鐘HTML代碼

    動態時鐘HTML代碼是一種創新的HTML語言代碼,它可以在網頁上展示一個實時的數字時鐘,可以增強網頁的視覺效果和交互性。下面我們將從多個方面對動態時鐘HTML代碼做詳細的闡述。 一…

    編程 2025-01-06
  • 簡易js網頁實時時鐘日曆,js電子時鐘代碼

    本文目錄一覽: 1、如何使用JS實現一個簡易數碼時鐘 2、求一款js做的時間日曆控件? 3、怎樣在jsp頁面中顯示日曆(高手幫下忙啦!很急) 4、用js在網頁上顯示當前日期和時間,…

    編程 2025-01-06
  • 鐘錶js代碼,js數字時鐘代碼

    本文目錄一覽: 1、網頁上不斷監聽當前時間,然後判斷時間段的js代碼要怎麼寫? 2、JAVASCRIPT怎麼樣製作動態時間顯示,給我代碼也可以,謝謝啦 3、如何使用JS實現一個簡易…

    編程 2025-01-04
  • 單片機時鐘

    一、單片機時鐘程序 單片機時鐘程序是一個基於單片機的計時程序,它能夠精確計時並輸出當前時間。單片機時鐘程序的實現需要通過定時器來控制計時,並通過外部顯示器等設備來實現時間輸出。下面…

    編程 2025-01-03

發表回復

登錄後才能評論