【嵌入式学习笔记】嵌入式基础10——STM32时钟配置

news2024/9/25 23:20:21

1.认识时钟树

简单来说,时钟是具有周期性的脉冲信号,最常用的是占空比50%的方波

1.1.F1的时钟树

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2.F4的时钟树(407为例)

在这里插入图片描述
在这里插入图片描述

1.3.F7的时钟树

在这里插入图片描述
在这里插入图片描述

1.4.H7的时钟树

在这里插入图片描述
在这里插入图片描述

2.配置系统时钟(F1为例)

2.1.系统时钟配置步骤

  1. 配置HSE VALUE:告诉HAL库外部晶振频率,stm32xxxx_hal_conf.h
  2. 调用Systemlnit()函数(可选):在启动文件中调用,在system_stm32xxxx.c定义
  3. 选择时钟源,配置PLL:通过HAL_RCC_OscConfig()函数设置
  4. 选择系统时钟源,配置总线分频器:通过HAL_RCC_ClockConfig()函数设置
  5. 配置扩展外设时钟(可选):通过HAL_RCCEx_PeriphCLKConfig()函数设置

【注】SystemInit 主要进行外部存储器配置和中断向量表地址配置。但是并没有用到,只是保留接口。HAL库的SystemInit 函数并没有任何时钟相关配置,所以后续的初始化步骤,我们还必须编写自己的时钟配置函数。

  • HAL_RCC_OscConfig()函数重要参数
    在这里插入图片描述
  • HAL_RCC_ClockConfig()函数重要参数
    在这里插入图片描述

第3,4,5步可由sys_stm32_clock_init() 函数完成

void sys_stm32_clock_init(uint32_t plln)
{
    HAL_StatusTypeDef ret = HAL_ERROR;
    RCC_OscInitTypeDef rcc_osc_init = {0};
    RCC_ClkInitTypeDef rcc_clk_init = {0};

    rcc_osc_init.OscillatorType = RCC_OSCILLATORTYPE_HSE;       /* 选择要配置HSE */
    rcc_osc_init.HSEState = RCC_HSE_ON;                         /* 打开HSE */
    rcc_osc_init.HSEPredivValue = RCC_HSE_PREDIV_DIV1;          /* HSE预分频系数 */
    rcc_osc_init.PLL.PLLState = RCC_PLL_ON;                     /* 打开PLL */
    rcc_osc_init.PLL.PLLSource = RCC_PLLSOURCE_HSE;             /* PLL时钟源选择HSE */
    rcc_osc_init.PLL.PLLMUL = plln;                             /* PLL倍频系数 */
    ret = HAL_RCC_OscConfig(&rcc_osc_init);                     /* 初始化 */

    if (ret != HAL_OK)
    {
        while (1);                                              /* 时钟初始化失败,之后的程序将可能无法正常执行,可以在这里加入自己的处理 */
    }

    /* 选中PLL作为系统时钟源并且配置HCLK,PCLK1和PCLK2*/
    rcc_clk_init.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
    rcc_clk_init.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;        /* 设置系统时钟来自PLL */
    rcc_clk_init.AHBCLKDivider = RCC_SYSCLK_DIV1;               /* AHB分频系数为1 */
    rcc_clk_init.APB1CLKDivider = RCC_HCLK_DIV2;                /* APB1分频系数为2 */
    rcc_clk_init.APB2CLKDivider = RCC_HCLK_DIV1;                /* APB2分频系数为1 */
    ret = HAL_RCC_ClockConfig(&rcc_clk_init, FLASH_LATENCY_2);  /* 同时设置FLASH延时周期为2WS,也就是3个CPU周期。 */

    if (ret != HAL_OK)
    {
        while (1);                                              /* 时钟初始化失败,之后的程序将可能无法正常执行,可以在这里加入自己的处理 */
    }
}

2.2.外设时钟使能和失能

我们要使用某个外设,必需先使能该外设时钟

  • HAL库使能某个外设时钟的方法,如:
__HAL_RCC_GPIOA_CLK_ENABLE();      		/* 使能 GPIOA 时钟 */
  • HAL库禁止某个外设时钟的方法,如:
__HAL_RCC_GPIOA_CLK_DISABLE();      	/* 禁止 GPIOA 时钟 */

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

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

相关文章

软件测试技能大赛任务二单元测试试题

任务二 单元测试 执行代码测试 本部分按照要求,执行单元测试,编写java应用程序,按照要求的覆盖方法设计测试数据,使用JUnit框架编写测试类对程序代码进行测试,对测试执行结果进行截图,将相关代码和相关截…

浅谈深度神经网络

Deep neural networks are completely flexible by design, and there really are no fixed rules when it comes to model architecture. -- David Foster 前言 神经网络 (neural network) 受到人脑的启发,可模仿生物神经元相互传递信号。神经网络就是由神经元组成…

JMeter 怎么查看 TPS 数据教程,简单易懂

TPS 是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。在 JMeter 中,我们可以使用以下方法查看 T…

1300*C. Slay the Dragon

Example input 4 3 6 2 3 5 3 12 7 9 4 14 1 10 8 7 output 1 2 4 0 2 解析: 题意是选一个人去攻击龙,其余人防守龙,可以花费 x 块钱让某英雄能力 x,问最少的花费是多少。 贪心,选择大于龙的防御力并且最小的那个英…

mac版窗口管理 Magnet for mac中文最新

magnet mac版是一款运行在苹果电脑上的一款优秀的窗口大小控制工具,拖拽窗口到屏幕边缘可以自动半屏,全屏或者四分之一屏幕,还可以设定快捷键完成分屏。这款专业的窗口管理工具当您每次将内容从一个应用移动到另一应用时,当您需要…

ROS->ROS2, ROS2的安装与测试

本文参考古月居 – ROS2教程做了摘要,以便后用。 ROS1目前有三个版本可以选择,但未来ROS2才是应用领域的主流。 ROS的发展: ROS2的发展: 有关ROS2和ROS1的对比

第五章:Spring下

第五章&#xff1a;Spring下 5.1&#xff1a;AOP 场景模拟 创建一个新的模块&#xff0c;spring_proxy_10&#xff0c;并引入下面的jar包。 <packaging>jar</packaging><dependencies><dependency><groupId>junit</groupId><artifactI…

[CrackMe]Chafe.2.exe的逆向及注册机编写

1. 逆向分析过程 先上手把玩一下, 从外观上看感觉和Chafe.1.exe差不了多少, 还是那个界面 找到RegisterClassEx从而找到其对应的窗口过程 找到对应的WM_COMMAND分支 首先其修改了代码中的4个字节, 将其修改成0x00584554, 然后通过GetDlgItemInt获取了serial值 这里其实原本…

笔记20230727

1. http2.0&#xff0c;概念就不说了&#xff0c;查看是否使用&#xff1a;network调试&#xff0c;查看请求的header-view source&#xff0c;可以查看http版本&#xff1b;后端&#xff0c;如nginx&#xff0c;配置&#xff0c;http2表示开启。后端开启、浏览器支持&#xff…

利用小波包对一维信号进行降噪或压缩(MATLAB)

function [ output_args ] example4_12( input_args ) %EXAMPLE4_12 Summary of this function goes here % Detailed explanation goes here clc; clear; % 设置信噪比和随机数的初始值 snr 3; init 2055615866; % 生成一个原始信号xref和含高斯白噪声的信号x [xref,x] …

nginx配置auth_basic认证

nginx配置auth_basic认证 windows 1、下载 httpd 下载地址: https://www.apachelounge.com/download/ 2、生成密码&#xff1a;打开cmd&#xff0c;进入到 Apache24\bin后 html htpasswd.exe -c G:\nginx\nginx-1.14.2\conf\.htpasswd user 其中: G:\nginx\nginx-1.14.2\conf…

【微服务】springboot 多模块打包使用详解

目录 一、前言 1.1 为什么需要掌握多模块打包 二、工程模块概述 2.1 前后端不分离 2.2 部署方式多样化 2.3 单模块向多模块演进 三、单模块打包构建 3.1 环境准备 3.1.1 创建测试用的单模块工程 3.1.2 多环境配置文件 3.1.3 新增测试接口 3.2 pom配置详解 3.2.1 添…

Git代码管理

目录&#xff1a; git环境配置 git工作流程git常用命令gitlab实战gitlog分析与检索分支管理策略git合并与冲突 1.git环境配置 Git 简介&#xff1a; Git 是目前世界上最先进的分布式版本控制系统。Git 优点&#xff1a; 适合分布式开发&#xff0c;强调个体…

搭建自己第一个golang程序

概念&#xff1a; golang 和 java有些类似&#xff0c;配置好环境就可以直接编写运行了&#xff1b;这里分两种&#xff1a; 一.shell模式 创建一个go类型的文件 往里面编写代码 二.开发工具模式 这里的开发工具 我选用goland package mainimport "fmt"func mai…

模糊神经网络机械故障诊断(MATLAB代码)

效果 用训练好的模糊神经网络对机械故障进行诊断,根据网络的预测值得到机械的技术状态。预测值小于 1.5 时为正常状态,预测值在 1.5~2.5 之间时为曲轴轴承轻微异响,预测值在 2.5~3.5 之间时为曲轴轴承严重异响预测值在 3.5~4.5 之间时为连杆轴承轻微异响,预测值大于 4.5 时为连…

Debian LNMP架构的简单配置使用

一、LNMP简介 LinuxNginxMysqlPHP组成的网站架构&#xff0c;常用于中小型网站服务。 二、环境 Debian 6.1.27-1kali1 (2023-05-12) Nginx/1.22.1 10.11.2-MariaDB&#xff08;mysql&#xff09; PHP 8.2.7 &#xff08;Debian 6.1.27包含以上包&#xff0c;直接使用即…

0138 内存管理2

目录 3.内存管理 3.2虚拟内存管理 3.2部分习题 3.内存管理 3.2虚拟内存管理 3.2部分习题 1.在请求分页存储管理中&#xff0c;若采用FIFO页面淘汰算法&#xff0c;则当可供分配的页帧数增加时&#xff0c;缺页中断的次数&#xff08;&#xff09; A.减少 B.增加…

【嵌入式学习笔记】嵌入式基础9——STM32启动过程

1.MAP文件浅析 1.1.MDK编译后生成的中间过程文件 1.2.Map文件构成&#xff1a; 程序段交叉引用关系&#xff08;Section Cross References&#xff09;&#xff1a;描述各文件之间函数调用关系删除映像未使用的程序段&#xff08;Removing Unused input sections from the im…

Linux进程的认识

查看进程指令proc/ps 注意哦, 我们经常使用的指令, 像ls, touch…这些指令在启动之后本质上也是进程 proc 是内存文件系统, 存放着当前系统的实时进程信息. 每一个进程在系统中, 都会存在一个唯一的标识符(pid -> process id), 就如同学生在学校里有一个专门的学号一样. 大…

MyBatis——Java与数据库再续前缘

迭代更新&#xff0c;更新时代 时代发展&#xff0c;发展技术 技术进步&#xff0c;进步迭代 ——Lungcen 目录 MyBatis的简介入门 1、硬编码 2、操作繁琐 MyBatis简单入门 1、处理硬编码 2、处理操作繁琐 3、参数传递 MyBatis核心配置文件 配置文档的顶层结构 环境配置&…