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

chatgpt/2023/9/27 16:48:50

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.exyb.cn/news/show-5314458.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

聊聊拉长LLaMA的一些经验

Sequence Length是指LLM能够处理的文本的最大长度,越长,自然越有优势: 更强的记忆性。更多轮的历史对话被拼接到对话中,减少出现遗忘现象 长文本场景下体验更佳。比如文档问答、小说续写等 当今开源LLM中的当红炸子鸡——LLaMA…

【143. 重排链表】

来源:力扣(LeetCode) 描述: 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln 请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不…

运维面试大全

文章目录 第一阶段你是用过哪些Linux命令Linux 系统安全优化与内核优化经常使用shell脚本做什么软连接与硬链接的区别怎么查看文件IOS七层模型三次握手与四次挥手lvm 逻辑卷创建过程磁盘配额raid 磁盘阵列文本三剑客防火墙iptables与firewardLinux系统资源查询命令日志的八大等…

【Git系列】Git到远程仓库

🐳Git到远程仓库 🧊1. github账号注册🧊2. 初始化本地仓库🧊3. 创建GitHub远程仓库🧊4. 给本地仓库起别名🪟4.1 查看远程库的连接地址🪟4.2 起别名 🧊5. git推送操作🧊6.…

2023-07-30 LeetCode每日一题(环形链表 II)

2023-07-30每日一题 一、题目编号 142. 环形链表 II二、题目链接 点击跳转到题目位置 三、题目描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 n…

CompletableFuture 详解

目录 简单介绍 常见操作 创建 CompletableFuture new 关键字 静态工厂方法 处理异步结算的结果 简单介绍 CompletableFuture 同时实现了 Future 和 CompletionStage 接口。 public class CompletableFuture<T> implements Future<T>, CompletionStage<T…

2023年超越期待的高性能视频剪辑主机推荐| Intel 蝰蛇峡谷测评

1、开箱 蝰蛇峡谷的开箱体验是非常令人兴奋的。首先&#xff0c;打开包装后&#xff0c;你会看到一个精致且高质感的机箱&#xff0c;给人一种专业的感觉。蝰蛇峡谷的外观设计简洁大方&#xff0c;黑色的机箱与红色的Logo相得益彰&#xff0c;展现了其高性能的特点。 在打开机…

Cortex-M系列

ARM Cortex-M系列是专为嵌入式系统和微控制器设计的一系列处理器架构&#xff0c;具有较低的功耗和较高的性能。截至我知识截止日2021年&#xff0c;ARM Cortex-M系列包括以下几个主要的系列&#xff1a; Cortex-M0: 特点&#xff1a;Cortex-M系列中的低功耗型号&#xff0c;适…
推荐文章