STM32MP135裸机编程:定时器内核时钟频率计算方法

0 工具准备

STM32MP13xx参考手册

1 定时器内核时钟频率计算方法

1.1 定时器分组

STM32MP135的定时器按照时钟源不同分成了三组,如下:
APB1:
在这里插入图片描述
APB2:
在这里插入图片描述
APB6:
在这里插入图片描述

1.2 定时器内核时钟频率计算方法

在这里插入图片描述
APB1DIV是APB1的分频系数,APB2DIV、APB6DIV同理。TIMG1PRE是第1组定时器的预分频选择,TIMG2PRE、TIMG3PRE同理。相关寄存器如下:
第1组定时器预分频选择寄存器:
在这里插入图片描述
在这里插入图片描述
第2组定时器预分频选择寄存器:
在这里插入图片描述
第3组定时器预分频选择寄存器:
在这里插入图片描述
在这里插入图片描述
APB1分频系数寄存器:
在这里插入图片描述
APB2分频系数寄存器:
在这里插入图片描述
APB6分频系数寄存器:
在这里插入图片描述

2 定时器内核时钟频率计算操作

以下代码打印stm32MP135所有定时器的内核时钟频率等信息:

/**
 * @brief 获取定时器内核时钟频率
 *
 * @param clock_source_freq 时钟源频率
 * @param bus_div 总线分频值
 * @param timer_pre 定时器预分频值
 * @return float 定时器内核时钟频率
 */
float get_timer_kernel_clock_freq(u32 clock_source_freq, u32 bus_div, u32 timer_pre)
{
    float timer_kernel_clock_freq = 0.0f;
    switch (bus_div)
    {
    case 0:
        timer_kernel_clock_freq = clock_source_freq;
        break;
    case 1:
        timer_kernel_clock_freq = clock_source_freq * 2;
        break;
    case 2:
    case 3:
    case 4:
        if (timer_pre == 0)
        {
            timer_kernel_clock_freq = clock_source_freq * 2;
        }
        else if (timer_pre == 1)
        {
            timer_kernel_clock_freq = clock_source_freq * 4;
        }
    default:
        break;
    }
    return timer_kernel_clock_freq;
}


int clk(void)
{
    float timer_kernel_clock_freq;
    RCC_PeriphCLKInitTypeDef PeriphClkInit;
    HAL_RCCEx_GetPeriphCLKConfig(&PeriphClkInit);

    printf("> Group 1 timer [Clock source : APB1]\r\n");
    printf("  APB1 clock : %0.3f MHz\r\n", (float)HAL_RCC_GetPCLK1Freq() / 1000000.0f);
    printf("  APB1 clock divider : %lu\r\n", RCC->APB1DIVR & 0x7);
    printf("  Group 1 prescaler  : %lu\r\n", RCC->TIMG1PRER & 0x1);
    timer_kernel_clock_freq = get_timer_kernel_clock_freq(HAL_RCC_GetPCLK1Freq(), RCC->APB1DIVR & 0x7, RCC->TIMG1PRER & 0x1) / 1000000.0f;
    printf("  TIM2 TIM3 TIM4 TIM5 TIM6 TIM7 kernel clock freq : %0.3f MHz\r\n", timer_kernel_clock_freq);

    printf("> Group 2 timer [Clock source : APB2]\r\n");
    printf("  APB2 clock : %0.3f MHz\r\n", (float)HAL_RCC_GetPCLK2Freq() / 1000000.0f);
    printf("  APB2 clock divider : %lu\r\n", RCC->APB2DIVR & 0x7);
    printf("  Group 3 prescaler  : %lu\r\n", RCC->TIMG2PRER & 0x1);
    timer_kernel_clock_freq = get_timer_kernel_clock_freq(HAL_RCC_GetPCLK2Freq(), RCC->APB2DIVR & 0x7, RCC->TIMG2PRER & 0x1) / 1000000.0f;
    printf("  TIM1 TIM8 clock freq : %0.3f MHz\r\n", timer_kernel_clock_freq);

    printf("> Group 3 timer [Clock source : APB6]\r\n");
    printf("  APB6 clock : %0.3f MHz\r\n", (float)HAL_RCC_GetPCLK6Freq() / 1000000.0f);
    printf("  APB6 clock divider : %lu\r\n", RCC->APB6DIVR & 0x7);
    printf("  Group 3 prescaler  : %lu\r\n", RCC->TIMG3PRER & 0x1);
    timer_kernel_clock_freq = get_timer_kernel_clock_freq(HAL_RCC_GetPCLK6Freq(), RCC->APB6DIVR & 0x7, RCC->TIMG3PRER & 0x1) / 1000000.0f;
    printf("  TIM12 TIM13 TIM14 TIM15 TIM16 TIM17 kernel clock freq : %0.3f MHz\r\n", timer_kernel_clock_freq);

    return 0;
}

打印结果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/798672.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flink Window 窗口【更新中】

Flink Window 窗口 在Flink流式计算中,最重要的转换就是窗口转换Window,在DataStream转换图中,可以发现处处都可以对DataStream进行窗口Window计算。 窗口(window)就是从 Streaming 到 Batch 的一个桥梁。窗口将无界流…

制作显卡版docker并配置TensorTR环境

感谢阅读 相关概念docker准备下载一个自己电脑cuda匹配的docker镜像拉取以及启动镜像安装cudaTensorRT部署教程 相关概念 TensorRT是可以在NVIDIA各种GPU硬件平台下运行的一个模型推理框架,支持C和Python推理。即我们利用Pytorch,Tensorflow或者其它框架…

汽车的驱动力,是驱动汽车行驶的力吗?

一、地面对驱动轮的反作用力? 汽车发动机产生的转矩,经传动系传至驱动轮上。此时作用于驱动轮上的转矩Tt产生一个对地面的圆周力F0,地面对驱动轮的反作用力Ft(方向与F0相反)即是驱动汽车的外力,此外力称为汽车的驱动力。 即汽车…

Codeforces Round 957 (Div. 3)(A~D题)

A. Only Pluses 思路: 优先增加最小的数&#xff0c;它们的乘积会是最优,假如只有两个数a和b&#xff0c;b>a&#xff0c;那么a 1&#xff0c;就增加一份b。如果b 1&#xff0c;只能增加1份a。因为 b > a&#xff0c;所以增加小的数是最优的。 代码: #include<bi…

最新PHP自助商城源码,彩虹商城源码

演示效果图 后台效果图 运行环境&#xff1a; Nginx 1.22.1 Mysql5.7 PHP7.4 直接访问域名即可安装 彩虹自助下单系统二次开发 拥有供货商系统 多余模板删除 保留一套商城,两套发卡 源码无后门隐患 已知存在的BUG修复 彩虹商城源码&#xff1a;下载 密码:chsc 免责声明&…

搞定ES6同步与异步机制、async/await的使用以及Promise的使用!

文章目录 同步和异步async/awaitPromisePromise的概念 同步和异步 ​ 同步&#xff1a;代码按照编写顺序逐行执行&#xff0c;后续的代码必须等待当前正在执行的代码完成之后才能执行&#xff0c;当遇到耗时的操作&#xff08;如网络请求等&#xff09;时&#xff0c;主线程会…

解决fidder小黑怪倒出JMeter文件缺失域名、请求头

解决fidder小黑怪倒出JMeter文件缺失域名、请求头 1、目录结构&#xff1a; 2、代码 coding:utf-8 Software:PyCharm Time:2024/7/10 14:02 Author:Dr.zxyimport zipfile import os import xml.etree.ElementTree as ET import re#定义信息头 headers_to_extract [Host, Conn…

C语言 | Leetcode C语言题解之第236题二叉树的最近公共祖先

题目&#xff1a; 题解&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/typedef struct road_t {struct TreeNode *road_node; // 途径路径struct road_t *p_next; }…

[IDEA插件] JarEditor 编辑jar包(直接新增、修改、删除jar包内的class文件)

文章目录 1. 安装插件 JarEditor2. 在IDEA中添加外部JAR包3. JarEditor 使用介绍 之前我们需要修改jar内文件的时候需要解压jar包&#xff0c;反编译class&#xff0c;新建java源文件&#xff0c;修改代码&#xff0c;再编译成class&#xff0c;替换jar包内的class文件。 现在…

MongoDB教程(三):mongoDB用户管理

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、MongoD…

P2p网络性能测度及监测系统模型

P2p网络性能测度及监测系统模型 网络IP性能参数 IP包传输时延时延变化误差率丢失率虚假率吞吐量可用性连接性测度单向延迟测度单向分组丢失测度往返延迟测度 OSI中的位置-> 网络层 用途 面相业务的网络分布式计算网络游戏IP软件电话流媒体分发多媒体通信 业务质量 通过…

JavaSE 面向对象程序设计进阶 IO 压缩流 解压缩流

目录 解压缩流 压缩流 解压缩流 压缩包 压缩包里面的每一个文件在java中都是一个ZipEntry对象 把每一个ZipEntry按照层级拷贝到另一个文件夹当中 import java.io.*; import java.util.Date; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream;public cl…

水表数字识别2:Pytorch DBNet实现水表数字检测(含训练代码和数据集)

水表数字识别2&#xff1a;Pytorch DBNet实现水表数字检测(含训练代码和数据集) 目录 水表数字识别2&#xff1a;Pytorch DBNet实现水表数字检测(含训练代码和数据集) 1.前言 2. 水表数字识别的方法 3. 水表数字识别数据集 4. 水表数字分割模型训练 &#xff08;1&#x…

OpenCV解决验证码(数字和字母)识别(Python)

文章目录 前言一、准备验证码图片 前言 OpenCV是一个基于Apache2.0许可&#xff08;开源&#xff09;发行的跨平台计算机视觉和机器学习软件库。它支持Windows、Linux、Mac OS、Android和iOS等多个操作系统&#xff0c;提供了丰富的图像处理和计算机视觉功能&#xff0c;包括但…

基于JAVA的网上招聘系统的设计与实现

点击下载源码 网上招聘系统的设计与实现 摘 要 随着时代的发展&#xff0c;中国的互联网技术愈加成熟&#xff0c;已经有越来越多的社会群体开始学会使用互联网技术&#xff0c;整个社会正在朝着智能化、信息化的方向前进。有了互联网&#xff0c;用户便可以足不出户地利用互…

【TOOLS】Chrome扩展开发

Chrome Extension Development 1. 入门教程 入门案例&#xff0c;可以访问【 谷歌插件官网官方文档 】查看官方入门教程&#xff0c;这里主要讲解大概步骤 Chrome Extenson 没有固定的脚手架&#xff0c;所以项目的搭建需要根据开发者自己根据需求搭建项目&#xff08;例如通过…

性能测试(1)

性能测试的概念 性能测试的策略 基准测试 负载测试 稳定性测试 并发测试 压力测试 基准测试 负载测试 1.满足性能指标 2.最大 3.多组数据 一步步增加 满足需求 1.达不到要求 先改bug 2.达到了 则就按其要求10即可 资源是有限的 吞吐量 直接体现性能能力 处理能力 前面资源…

大模型数据标注:驱动人工智能进化的基石

在人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;领域&#xff0c;数据标注是构建高性能模型不可或缺的一环&#xff0c;尤其是对于那些依赖海量数据的大模型而言。 随着深度学习技术的突飞猛进&#xff0c;大模型的规模和复杂度达到了前所未有的水平…

每日Attention学习11——Lightweight Dilated Bottleneck

模块出处 [TITS 23] [link] [code] Lightweight Real-Time Semantic Segmentation Network With Efficient Transformer and CNN 模块名称 Lightweight Dilated Bottleneck (LDB) 模块作用 改进的编码器块 模块结构 模块代码 import torch import torch.nn as nn import to…

Qt Quick qml自定义控件:qml实现电池控件

qml入门进阶专栏地址:https://blog.csdn.net/yao_hou/category_9951228.html?spm=1001.2014.3001.5482 本篇博客介绍如何使用qml来实现电池控件,效果图如下: 下面给出实现代码 Battery.qml /*电池组件*/import QtQuick 2.15 import QtQuick.Controls 2.15Rectangle {id: b…