Nucleo-F411RE (STM32F411)LL库体验 2 -sysclk的配置

news2024/11/25 11:05:00

Nucleo-F411RE (STM32F411)LL库体验 2 -sysclk的配置

1、Nucleo-F411RE 时钟源

Nucleo-F411RE开发版只有一个8M的晶振,看起来像是给st-link提供时钟的,所以猜测F411RE时钟的来源应该来自st-link(stm32F103c8t6)的mco输出。
在这里插入图片描述
mco输出频率为8M。
HSI频率为16M。

2、设置工作主频100M

a、采用HSE+PLL

假设mco输入频率8M,经过PLLM,4分频变成2M。然后经过PLLN,倍频100,变成200M,那么再经过
PLLP 2分频就可变成100M的时钟频率。
如果工作频率80M,那么就修改倍频80即可。
LL库代码如下:

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_HSE_PLL_100M_Config(void)
{  
    LL_FLASH_SetLatency(LL_FLASH_LATENCY_3);
    while(LL_FLASH_GetLatency()!= LL_FLASH_LATENCY_3)
    {
    }
    LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE1);
    // while (LL_PWR_IsActiveFlag_VOS() == 0)
    // {
    // }
    LL_RCC_HSE_EnableBypass();
    LL_RCC_HSE_Enable();

    /* Wait till HSE is ready */
    while(LL_RCC_HSE_IsReady() != 1)
    {

    }
    LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_4, 100, LL_RCC_PLLP_DIV_2);
    LL_RCC_PLL_Enable();

    /* Wait till PLL is ready */
    while(LL_RCC_PLL_IsReady() != 1)
    {

    }
    LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
    LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_2);
    LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
    LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);

    /* Wait till System clock is ready */
    while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)
    {

    }
    LL_Init1msTick(100000000);
    LL_SetSystemCoreClock(100000000);
    LL_RCC_SetTIMPrescaler(LL_RCC_TIM_PRESCALER_TWICE);
}

b、采用HSI+PLL的方式

HSI的频率为16M,假设经过PLLM 8分频变成2M,经过PLLN 100倍频变成200M,经过PLLP 2分频即可得到100M的工作频率。
如果想要设定80M工作频率,修改倍频80倍即可。
代码如下:

/**
 * HSI + PLL 100M
*/
void SystemClock_HSI_PLL_100M_Config(void)
{
    LL_FLASH_SetLatency(LL_FLASH_LATENCY_3);
    while(LL_FLASH_GetLatency()!= LL_FLASH_LATENCY_3)
    {
    }
    LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE1);
    // while (LL_PWR_IsActiveFlag_VOS() == 0)
    // {
    // }
    LL_RCC_HSI_SetCalibTrimming(16);
    LL_RCC_HSI_Enable();

    /* Wait till HSI is ready */
    while(LL_RCC_HSI_IsReady() != 1)
    {

    }
    LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSI, LL_RCC_PLLM_DIV_8, 100, LL_RCC_PLLP_DIV_2);
    LL_RCC_PLL_Enable();

    /* Wait till PLL is ready */
    while(LL_RCC_PLL_IsReady() != 1)
    {

    }
    LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
    LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_2);
    LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
    LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);

    /* Wait till System clock is ready */
    while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)
    {

    }
    LL_Init1msTick(100000000);
    LL_SetSystemCoreClock(100000000);
    LL_RCC_SetTIMPrescaler(LL_RCC_TIM_PRESCALER_TWICE);
}

3、不使用锁频环PLL

a、HSE最高8M工作主频

LL库设定代码如下:

/**
 * HSE提供信号,不经过pll倍频
*/
void SystemClock_HSE_8M_Config(void)
{
    LL_FLASH_SetLatency(LL_FLASH_LATENCY_0);
    while(LL_FLASH_GetLatency()!= LL_FLASH_LATENCY_0)
    {
    }
    LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE1);
    // while (LL_PWR_IsActiveFlag_VOS() == 0)
    // {
    // }
    LL_RCC_HSE_EnableBypass();
    LL_RCC_HSE_Enable();

    /* Wait till HSE is ready */
    while(LL_RCC_HSE_IsReady() != 1)
    {

    }
    LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
    LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_2);
    LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
    LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSE);

    /* Wait till System clock is ready */
    while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSE)
    {

    }
    LL_Init1msTick(8000000);
    LL_SetSystemCoreClock(8000000);
    LL_RCC_SetTIMPrescaler(LL_RCC_TIM_PRESCALER_TWICE);
}

b、HSL最高16M工作主频

LL库设定代码如下:

/**
 * HSI提供信号,不经过pll倍频
*/
void SystemClock_HSI_16M_Config(void)
{
    LL_FLASH_SetLatency(LL_FLASH_LATENCY_0);
    while(LL_FLASH_GetLatency()!= LL_FLASH_LATENCY_0)
    {
    }
    LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE1);
    // while (LL_PWR_IsActiveFlag_VOS() == 0)
    // {
    // }
    LL_RCC_HSI_SetCalibTrimming(16);
    LL_RCC_HSI_Enable();

    /* Wait till HSI is ready */
    while(LL_RCC_HSI_IsReady() != 1)
    {

    }
    LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
    LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_2);
    LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
    LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSI);

    /* Wait till System clock is ready */
    while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSI)
    {

    }
    LL_Init1msTick(16000000);
    LL_SetSystemCoreClock(16000000);
    LL_RCC_SetTIMPrescaler(LL_RCC_TIM_PRESCALER_TWICE);
}

4、AHB APB1 APB2时钟

设定AHB不分频
APB1 2分频
APB2不分频
在这里插入图片描述
假定输入100M,那么APB=sysclk=100M,APB1=PLCK1 = 50M,APB2=PLK2=100M

5、获取各部分时钟

在这里插入图片描述

6、打印信息

在这里插入图片描述

7、 代码

代码下载

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库是什么?为什么要使用它?

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 一、数据库是什么? 二、为什么要⽤数据库 1、方便用户 2、安全的保存数据 3、利用数据库分析 三、数据库的分类 1、关…

chatgpt赋能python:Python添加包的方法

Python添加包的方法 Python是一种高级编程语言,拥有着强大的库和模块。在开发过程中,很大一部分时间会用于查找、安装和更新各种包或依赖库。本文将介绍Python添加包的方法,以帮助开发者更快地找到并安装所需的包及依赖库。 什么是包 在Py…

Java 中的重载(overload)和重写(override)

​ 重载和重写都是面向对象编程中的概念,但我们或许还听说过一种叫做覆写(overwrite)的概念。C 是拥有这个概念的,Java 只有 overload 和 override,Python 只有隐式的 overload 和 override,没有 o…

海思平台上USB WIFI的移植与局域网无线调试和视频流预览

目录 1.海思平台上USB WIFI移植概述 1.1、移植WIFI背景 1.2、移植的起点 1.3、实验案例 2.AP模式USB WIFI驱动移植 2.1、源码 2.2、修改移植 3.AP模式USB WIFI传输视频实战 3.1、部署USB WIFI驱动使之工作为AP 3.2、准备测试用例 3.3、测试实验 4.USB WIFI做sta模式…

python函数详解(超详细)

❄️作者介绍:奇妙的大歪❄️ 🎀个人名言:但行前路,不负韶华!🎀 🐽个人简介:云计算网络运维专业人员🐽 前言 首先零基础是能学python的,很多编程大神入门之前…

Qt中的坐标体系和内存回收

目录 坐标体系 窗口的坐标原点 窗口的相对坐标 示例 内存回收 1. 自动垃圾回收机制 2. 对象树机制 示例 坐标体系 窗口的坐标原点 在Qt中,坐标系统一般是以窗口左上角为原点,向右为正方向X轴,向下为正方向Y轴。 窗口的相对坐标 在一个…

node.js+vue企业人事管理系统q731f

中小企业人事管理系统的主要开发目标如下: (1)实现管理系统信息关系的系统化、规范化和自动化; (2)减少维护人员的工作量以及实现员工对信息的控制和管理。 (3)方便查询信息及管理信…

chatgpt赋能python:Python编程中的警告是什么?

Python编程中的警告是什么? 在Python编程中,警告是指在程序运行时出现的一些提示信息。这些警告通常不会导致程序崩溃,但却表明程序中存在某些问题。例如,警告可以是一个不推荐使用的语法或者可能导致性能退化的某个编码模式。通…

发布关于Strve.js的动态,被Vite团队核心成员点赞的那些事!

近日,在浏览之前发的推特文章时,发现了曾经被Vite团队核心成员 Matias Capeletto 点赞的一篇动态,心里格外的高兴。 被大佬认可,也是值得开心的一件事情。毕竟独立开发一个前端框架,其中的艰辛也只有像参与过类似设计框…

IAB讨论互联网碎片化:互操作性是互联网的关键属性

日前,一场针对互联网碎片化的讨论由互联网体系结构委员会(IAB)发起,主题涉及互联网碎片化的定义、概念、治理方式与未来发展。互联网治理论坛(IGF)咨询顾问维姆德格泽尔与大西洋理事会成员康斯坦丁诺斯科迈…

我的个人网站 —— 直接使用GPT4

前期回顾 打造极简风格动效 —— 5 分钟轻松实现惊艳、震撼人心的视觉效果_彩色之外的博客-CSDN博客css Loading 实战教学https://blog.csdn.net/m0_57904695/article/details/131156011?spm1001.2014.3001.5501 目录 ✈ 线上预览: ✅ G4 WEB 效果图例 &…

chatgpt赋能python:Python函数用法查看指南

Python函数用法查看指南 对于Python程序员来说,熟练查看函数用法是必不可少的技能。无论是入门级的学习者还是有多年编程经验的工程师都需要时常查看函数用法,以确保程序的正确性与效率。在本篇文章中,我们将介绍Python函数用法的常用方法与…

chatgpt赋能python:Python如何放在桌面:简单步骤和相关应用

Python如何放在桌面:简单步骤和相关应用 如果你是一名Python程序员,想要将Python放在桌面上以便在日常工作中更快捷地打开,并增强开发效率,那么这篇文章就是为你准备的。在这里,我们将介绍如何将Python安装在桌面上、…

chatgpt赋能python:Python怎么查找序列中的数字

Python怎么查找序列中的数字 在Python编程中,要查找序列中的数字是非常常见的任务。比如,我们需要查找一个列表中是否包含某个数字,或者在一个字符串中查找某个数字的出现次数等等。本文将介绍Python中查找序列中数字的几种方法,…

chatgpt赋能python:Python如何横排输出:实现方法详解

Python如何横排输出:实现方法详解 Python是一种高级编程语言,非常适合初学者入门。Python有很多应用程序领域,例如Web开发、数据分析、人工智能和机器学习等。在这些领域中,输出排版和显示的格式都十分重要。在某些情况下&#x…

C++静态转换

目录 1.1基本类型间的转换 1.2指针转换的限制 1.3空指针的转换 1.4弃值表达式 1.5左值转到右值 1.6类层次结构基类和派生类间的指针或引用转换 用法&#xff1a;static_cast<type_name> (expression) 说明&#xff1a;该运算符把expression转换为type_name类型stat…

ElasticSearch核心详解、文档、查询响应、分页、映射、结构化查询

目录 ElasticSearch核心详解文档元数据&#xff08;metadata&#xff09;index_type_id 查询响应pretty指定响应字段判断文档是否存在 批量操作批量查询_bulk操作 分页映射创建明确类型的索引&#xff1a;测试搜索 结构化查询term查询terms查询range查询exists 查询match查询bo…

Linux 虚拟文件系统 VFS 源码剖析

转自&#xff1a;Linux 虚拟文件系统 VFS 源码剖析 -- 以 ext4 为例&#xff08;Part1&#xff09; - 知乎 虚拟文件系统&#xff08;Virtual File System, VFS&#xff09;是 Linux 内核的一个组件&#xff0c;用于处理与文件和文件系统相关的所有系统调用。VFS 是内核提供文…

架构师怎样绘制系统架构蓝图?

首先&#xff0c;请你设想这样一个场景&#xff1a;如果公司安排你做架构师&#xff0c;要你在项目开发前期进行软件架构设计&#xff0c;你该如何开展你的工作&#xff1f;如何输出你的工作成果&#xff1f;如何确定你的设计是否满足用户需求&#xff1f;你是否有把握最后交付…

人工智能导论复习

Sell Out - Twoset Violin - 单曲 - 网易云音乐 (163.com) 目录 1 归结演绎推理 子句集&#xff1a; 归结&#xff1a; 2 可信度分析 CF模型 加权的不确定性推理 3 模糊推理-构造 扎德方法构造模糊关系 4 A* 5 遗传算法 6 神经网络 1 归结演绎推理 归结推理&#xff…