STM32学习笔记(六) —— 配置系统时钟

1.时钟树

时钟树1

从图中可以看出一共有四个时钟来源,分别是内部高速时钟、内部低速时钟、外部高速时钟接口、外部低速时钟接口,这些时钟源经过内部的倍频分频后提供给各外设使用。其中HSE与LSE需要由外部提供,可以是外部时钟直接输入,也可以是无源晶振,一般HSE需要在4-16MHz之间,LSE只能是32.768KHz。还可以将PLLCLK、HSI、HSE、SYSCLK时钟通过单片机相关引脚输出。

2.配置系统时钟

系统时钟

系统时钟最大72MHz,有三种不同的时钟源:
HSI时钟,此时系统时钟只能是8MHz
HSE时钟,此时系统时钟只能是4-16MHz
PLL时钟,可以由HSI或者HSE倍频得到

PLL时钟有两种不同的来源:
HSI时种,进行二分频后提供给PLL
HSE时钟,直接或者经过二分频后提供给PLL

一般情况下,我们经常使用HSE作为时钟源通过倍频作为PLL时钟,再选用PLL时钟作为系统时钟。我们开发板上使用的晶振是8MHz(HSE),可以将8MHz作为PLL时钟源,通过9倍频后作为系统时钟,这样正好是72MHz(8MHz x 9)。AHB时钟与APBx时钟可以通过系统时钟分频得到,AHB与APB2时钟最大是72MHz,我们这里进行1分频(就是不分频),APB1时钟最大36MHz,我们这里进行2分频就可以。

我们在使用STM32CubeMX建立HAL库工程模板的时候是配置过系统时钟的。

系统时钟配置

在生成的代码中,SystemClock_Config函数就是配置系统时钟函数

SystemClock_Config

void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*//* 使用HSE时钟 */RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;/* 开启HSE时钟 */RCC_OscInitStruct.HSEState = RCC_HSE_ON;/* HSE时钟不分频 */RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;/* 开启HSI时钟 */RCC_OscInitStruct.HSIState = RCC_HSI_ON;/* 开启PLL */RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;/* 将HSE时钟作为PLL时钟源 */RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;/* 进行9倍频 */RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;/* 对时钟进行初始化 */if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*//* 配置SYSCLK、HCLK、PCLK1、PCLK2 */RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;/* 系统时钟源使用PLL时钟, PLL时钟前面已经配置成了72MHz, 所以系统时钟也是72MHz */RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;/* AHB时钟由系统时钟1分频提供, 就是72MHz */RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;/* APB1时钟由AHB时钟2分频提供, 就是36MHz */RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;/* APB2时钟由AHB时钟1分频提供, 就是72MHz */RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;/* 对时钟进行初始化 */if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}
}

我们还可以调用HAL_RCC_MCOConfig函数将PLLCLK的二分频、HSI、HSE、SYSCLK时钟通过相关的引脚输出。通过查阅数据手册可以知道PA8引脚可以作为时钟输出引脚

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

在STM32CubeMX中使能时钟输出

在这里插入图片描述

在时钟配置界面(Clock Configuration)可以选择输出哪一路时钟,这里要注意,I/O口的最高速率是50MHz,所以输出的时钟频率是不能超过50MHz的。这里我们选择将HSE时钟输出到PA8引脚

在这里插入图片描述

生成代码后,发现在系统时钟配置函数中调用了时钟输出函数HAL_RCC_MCOConfig

在这里插入图片描述

将程序下载后,可以用示波器测量PA8引脚,查看是否有8MHz的时钟输出

本例程代码可以在HAL库工程模板这一章节的最后,百度网盘链接分享处获取

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

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

相关文章

C++——输入输出

C——输入输出 1.输入输出 C 中的输入和输出(I/O)主要是通过标准库中的输入输出流来实现的。最常用的是 iostream 库,它提供了用于输入和输出的基本流类,包括 cin 、 cout 、 cerr 和 clog 。 标准输出流(cout) cout 代表标准…

解决Docker AList本地挂载失效的问题。

解决Docker AList本地挂载失效的问题。 AList Docker version: 3.3 services:alist:image: xhofe/alist:latestcontainer_name: alistvolumes:- ./etc/alist:/opt/alist/data# 比如我要挂载/home,如果在docker里先挂载,是没法办法映射到linux系统下的/home的- /ho…

k8s网络详解(一)

目录 网络概述 Pod 网络通信 Overlay网络 原理 在k8s中的作用 VXLAN 网络插件Flanne Flannel UDP 模式的工作原理 ETCD和Flannel之间的关系 VXLAN 模式 Flannel VXLAN模式跨主机工作原理 网络插件 Calico k8s 组网Calico方案与flannel方案区别 Calico 主要组成部分…

防御保护---防火墙双机热备直路部署(上下三层接口)

防御保护---防火墙双机热备直路部署(上下三层接口) 一、根据网段划分配置IP地址和安全区域二、配置动态路由OSPF三、配置双机热备四、测试:4.1 测试一:查看状态和路由器路由表(双机热备)前后对比4.2 测试二…

「数据结构」3.ArrayList

🎇个人主页:Ice_Sugar_7 🎇所属专栏:Java数据结构 🎇**欢迎点赞收藏加关注哦!* ArrayList 🍉ArrayList的构造🍉add方法🍌扩容机制🍌重要结论 🍉其…

SQL Server 函数参考手册(SQL Server 日期函数)

目录 SQL Server CURRENT_TIMESTAMP 函数 SQL Server DATEADD() 函数 SQL Server DATEDIFF() 函数 SQL Server DATEFROMPARTS() 函数 SQL Server DATENAME() 函数 SQL Server DATEPART() 函数 SQL Server DAY() 函数 SQL Server GETDATE() 函数 SQL Server GETUTCDATE…

网络协议与攻击模拟_13缓存DNS与DNS报文

一、缓存DNS服务器 1、引入缓存DNS 缓存域名服务器需要与外网连接 一台windows作为Client 一台Windows server作为缓存DNS 桥接网络 DHCP自动获取IP地址 Client 192.168.183.133 Windows server 192.168.183.138 ipconfig /all查看下Client的DNS,设置让Cl…

Unity | 渡鸦避难所-9 | 角色名字及血条等信息

1 效果预览 游戏中角色的名字和血条是非常重要的元素,它们可以帮助玩家了解角色的身份和状态。在 Unity 中,可以使用 UGUI 来实现这些功能 2 实现方案 1 画布 (Canvas) 画布 (Canvas) 组件表示进行 UI 布局和渲染的抽象空间。所有 UI 元素都必须是附加…

【异常处理】word或ppt打开后没反应或闪退,或者报错由安全模式打开

折腾了2个小时,可算解决了,办法是在【控制面板】中右击,选择【更改】 选择联机修复,然后耐心等待,最后再打开就没问题了。

DevOps落地笔记-08|技术债务:勤借勤还,再借不难

上一讲主要介绍了如何有效管理第三方组件的实际案例,目的是让你意识到依赖组件的质量也会影响到软件的质量。前面几个课时谈论的主要内容都是跟软件质量相关,通过各种方式方法提高软件交付的质量。这时就会遇到一个问题,软件质量固然重要&…

2024年第4届IEEE软件工程与人工智能国际会议(SEAI 2024)

2024年第4届IEEE软件工程与人工智能国际会议(SEAI 2024)将于2024年6月21-23日在中国厦门举办。 SEAI旨在为软件工程与人工智能领域搭建高端前沿的交流平台,推动产业发展。本次会议将汇聚海内外的知名专家、学者和产业界优秀人才,共同围绕国际热点话题、核…

Sql Server之更改跟踪功能

1.更改跟踪(Change Tracking)介绍 更改跟踪是一种轻量型解决方案,它为应用程序提供了一种有效的更改跟踪机制。更改跟踪捕获更改了表行这一事实,但不会捕获更改的数据。 这样,应用程序就可以确定使用从用户表中直接获…

PostGIS空间数据库之空间数据融合实践

目录 前言 一、ST_Union()简介 1、方法说明 2、参数介绍 二、ST_Collect()简介 1、方法说明 2、参数介绍 3、两者区别 三、实际案例实践 1、不重叠融合 2、空间重叠融合 总结 前言 众所周知,熟悉GIS桌面软件的同学一定都知道,想要对空…

Modern C++ idiom6 - 命名返回值优化NRVO

Note: NRVO的应用并不是绝对的,它依赖于编译器的优化能力。现在的编译器真的很厉害,一般写的不好的代码也能给你优化好! 在C中,性能一直是开发者关注的一个核心问题。为了提高程序的效率,各种优化技术应运而生。本文将…

使用goland IDE编写go windows ui

最近突发奇想,想实现一款工作节奏的提示安排小闹钟。那首先解决的就是UI。本人擅长go语言。那go在windows ui的探索肯定有人做过了吧。一查还真有,通过知乎,csdn等查到目前支持最好的就是walk库了。那走起试试。 一、拷贝go代码 将官网例子…

代码随想录算法训练营29期Day36|LeetCode 435,763,56

文档讲解:无重叠区间 划分字母区间 合并区间 435.无重叠区间 题目链接:https://leetcode.cn/problems/non-overlapping-intervals/description/ 思路: 按照右边界排序,从左向右记录非交叉区间的个数。最后用区间总数减去非交叉…

WiFi 7 的核心要点

目录 WiFi 7 是什么? WiFi 7 的主要feature功能: 320Mhz channel 4K QAM Multi-Link Operation (MLO),多链路操作 512 block ACK OFDMA:multiple RUs to single STA. 总结:性能是第一优先级,WiFi 7&#xf…

Python 方法重载

在其他编程语言中,例如Java和C++,可以使用方法重载来定义多个同名函数,但它们具有不同的参数类型和/或数量。然而,在Python中并没有直接支持方法重载的语法。 Python中的方法重载是指在同一个类中定义多个同名函数,但它们具有不同的参数类型和默认参数。由于Python是动态…

使用flink-cdc-sqlserver出现错误,需要批量开启sqlserver表cdc模式,监听表变化

docker安装 docker run -e "ACCEPT_EULAY" -e "MSSQL_SA_PASSWORDZcyc123456" -p 1433:1433 --name sqlserver -d mcr.microsoft.com/mssql/server:2017-latest开启库cdc模式 选择你自己的数据库,执行以下sql语句 EXEC sys.sp_cdc_enable_db…

Multi ElasticSearch Head插件基本操作

Multi ElasticSearch Head插件安装好之后我们可以进行一些基本的操作。 1、复合查询 因为ES提供了一些Restful风格的接口,可以让任何语言去调用,因此我们可以将之前的请求地址粘贴到Multi ElasticSearch Head插件里面,选择GET请求方式&#x…