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/n/361722.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
MFVVBMFVVB
上一篇 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

发表回复

登录后才能评论