GD32F450的时钟笔记

news2025/1/16 1:42:53

GD32F450 标称 200MHz,但是在手册中又说 它是 240MHz。本文以 手册中的 240MHz 进行举例,我保险起见,产品中使用还是在 200MHz 下使用。

时钟树

手册上的时钟树图如下
在这里插入图片描述

GD32F450的 外部时钟源 有2个

  • LXTAL 外部低速时钟源 32.768 kHz
  • HXTAL 外部高速时钟源 4~32 MHz

GD32F450的 内部时钟源 有3个

  • IRC32K 内部 32KHz 时钟源
  • IRC16M 内部 16MHz 时钟源
  • IRC48M 内部 48MHz 时钟源

重要时钟

对于 GD32F450 的使用,主要关注

  • CK_SYS 系统时钟
    _
  • HCLK ( AHB bus,Cortex-M4,SRAM,DMA,peripherals )
  • PCLK1 ( APB1 peripherals )
  • CKTIMERx ( TIMER1,2,3,4,5,6,11,12,13 )
  • PCLK2 ( APB2 peripherals )
  • CKTIMERx ( TIMER0,7,8,9,10 )
  • CK_ADCX ( ADC 0,1,2 )

主要的外设时钟还是下面这三个时钟,它们衍生出其它外设时钟。

  • AHB 最高时率为 240 MHz
  • APB2 最高时率为 120 MHz
  • APB1 最高时率为 60 MHz

对于单片机内核,仅需要关注 HCLK
上述的时钟 主要还是 通过 CK_SYS 时钟衍生出来的,因此需要先配置好它,才能对接下来的 外设时钟进行配置。

GD32F450的PLL

CK_SYS 有 3 个 时钟源,如下图所示:

在这里插入图片描述
即,

  • IRC16M 内部16MHz (默认)
  • HXTAL 外部高速时钟
  • PLLP 倍频时钟P

CK_SYS 要想达到240MHz,必须要通过 倍频时钟P 得到。

GD32F450有3个PLL,与CK_SYS有关的只有PLL,如下图所示

在这里插入图片描述

根据上图,可以明确倍频步骤了。

  1. 打开外部时钟源(HXTAL)
  2. 切换内核时钟为非PLL时钟(当前例程为选择内部16MHz时钟)
  3. 确定切换成功
  4. 关闭PLL
  5. 配置 PLLSEL 选择外部时钟源(鄙人的开发板外部晶振为8MHz)
  6. 配置输入分频系数,倍频系数N,输出P分频系数
  7. 使能 PLL
  8. 配置SCS切换时钟
  9. 确定切换成功

查看相关寄存器,即可进行配置了。

代码如下

uint8_t CLock_Init(void)
{
	uint16_t overTimeCnt;

	RCU_CTL |= RCU_CTL_HXTALEN;												// 高速晶体振荡器(HXTAL)使能
	overTimeCnt = 0x0fff;
	do
	{
		overTimeCnt--;
		if(!overTimeCnt)
			return FAILED;													// 等待超时
	} while (!(RCU_CTL & RCU_CTL_HXTALSTB));								// 等待 外部晶振HXTAL 稳定

	RCU_CFG0 = (RCU_CFG0 & ~RCU_CFG0_SCS) | RCU_CKSYSSRC_IRC16M;			// 系统时钟 选择内部16MHz
	overTimeCnt = 0x0fff;
	do
	{
		overTimeCnt--;
		if(!overTimeCnt)
			return FAILED;													// 等待超时
	} while ((RCU_CFG0 & RCU_CFG0_SCSS) != RCU_SCSS_IRC16M);				// 等待 系统时钟 选择内部16MHz


	RCU_CTL &= ~RCU_CTL_PLLEN;												// 关闭 PLL
	overTimeCnt = 0x0fff;
	do
	{
		overTimeCnt--;
		if(!overTimeCnt)
			return FAILED;													// 等待超时
	} while ((RCU_CTL & RCU_CTL_PLLEN));									// 等待 关闭 PLL

	RCU_PLL = 	( RCU_PLL & ~(RCU_PLL_PLLPSC | RCU_PLL_PLLN | RCU_PLL_PLLP | RCU_PLL_PLLSEL | RCU_PLL_PLLQ) ) | \
								( 8 << 0)    | ( 480 << 6)  | ( 0 << 16)   | RCU_PLL_PLLSEL | ( 10 << 24);
							// 输入8分频     | 倍频480倍    | PLLP 2分频   | 选择外部晶振   | PLLQ 10分频
							// 输入 1MHz     | VCO=480MHz   | PLLP=240MHz  |                | PLLQ=48MHz

	RCU_CTL |= RCU_CTL_PLLEN;												// 使能 PLL
	overTimeCnt = 0x0fff;
	do
	{
		overTimeCnt--;
		if(!overTimeCnt)
			return FAILED;													// 等待超时
	} while (!(RCU_CTL & RCU_CTL_PLLSTB));									// 等待 PLL 稳定

	RCU_CFG0 = (RCU_CFG0 & ~(RCU_CFG0_AHBPSC | RCU_CFG0_APB1PSC | RCU_CFG0_APB2PSC)) | \
								(0 << 4)     | (5 << 10)        | (4 << 13);
							// AHB不分频     | APB1 4分频       | APB2 2分频
							// 240MHz        | 60MHz            | 120MHz
	

	RCU_CFG0 = (RCU_CFG0 & ~RCU_CFG0_SCS) | RCU_CKSYSSRC_PLLP;				// 系统时钟 选择PLLP
	overTimeCnt = 0x0fff;
	do
	{
		overTimeCnt--;
		if(!overTimeCnt)
			return FAILED;													// 等待超时
	} while ((RCU_CFG0 & RCU_CFG0_SCSS) != RCU_SCSS_PLLP);					// 等待 系统时钟 选择PLLP

	return SUCCEED;
}

简单的方法

其实厂家已经帮我们初始化好了时钟,在 system_gd32f4xx.c 文件中 通过 选择宏定义就能 将单片机 配置成常用的时钟频率了。

AHB 不分频
APB1 四分频
APB2 二分频


/* select a system clock by uncommenting the following line */
//#define __SYSTEM_CLOCK_IRC16M                   (uint32_t)(__IRC16M)
//#define __SYSTEM_CLOCK_HXTAL                    (uint32_t)(__HXTAL)
//#define __SYSTEM_CLOCK_120M_PLL_IRC16M          (uint32_t)(120000000)
//#define __SYSTEM_CLOCK_120M_PLL_8M_HXTAL        (uint32_t)(120000000)
//#define __SYSTEM_CLOCK_120M_PLL_25M_HXTAL       (uint32_t)(120000000)
//#define __SYSTEM_CLOCK_168M_PLL_IRC16M          (uint32_t)(168000000)
//#define __SYSTEM_CLOCK_168M_PLL_8M_HXTAL        (uint32_t)(168000000)
//#define __SYSTEM_CLOCK_168M_PLL_25M_HXTAL       (uint32_t)(168000000)
//#define __SYSTEM_CLOCK_200M_PLL_IRC16M          (uint32_t)(200000000)
#define __SYSTEM_CLOCK_200M_PLL_8M_HXTAL        (uint32_t)(200000000)
//#define __SYSTEM_CLOCK_200M_PLL_25M_HXTAL       (uint32_t)(200000000)
//#define __SYSTEM_CLOCK_240M_PLL_IRC16M          (uint32_t)(240000000)
// #define __SYSTEM_CLOCK_240M_PLL_8M_HXTAL        (uint32_t)(240000000)
//#define __SYSTEM_CLOCK_240M_PLL_25M_HXTAL       (uint32_t)(240000000)

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

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

相关文章

微信小程序登录获取不到头像和昵称解决办法!

微信小程序登录获取不到头像和昵称主要原因是&#xff1a;小程序wx.getUserProfile接口被收回&#xff01; 大家可以按照文档操作↓ PS&#xff1a; 针对小程序wx.getUserProfile接口将被收回后做出的授权调整 小程序文档中提出的调整说明 对于此次变化&#xff0c;现将小…

怎么使用股票委托下单接口?

都知道&#xff0c;在进行量化交易的时候&#xff0c;交易接口可以100%严格按照定制的计划执行交易&#xff0c;避免了出现下单犹豫和过量交易等问题&#xff0c;100%体现交易策略的收益性&#xff1b;今天主要来聊聊&#xff0c;关于怎么使用股票委托下单接口的问题&#xff1…

使用c#将aj-report桌面化1

说到底,aj-report是个工具,我想大多数人还是想快速使用它来创建一个可以展示的工具。通过之前的章节,你应该可以制作自己的报表页面了,下面我们来看看怎么把aj-report包装成一个桌面能够运行的软件。 当然作为扩展开发,受开源协议限制,我们不能大规模修改aj-report的源代…

[附源码]java毕业设计基于新高考模式下的排课系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

程序员“中年危机”?不,也可能是“人生转机”

程序员行业新技术发展迅猛&#xff0c;可以说是日新月异。也正是这个原因&#xff0c;中年危机成为我们必须面对和攻克的问题。 思考一个问题&#xff1a;那些能工作到45、50、甚至60的程序员们&#xff0c;究竟具备了哪些过人的能力&#xff1f; 就我过去的经历和观察来说&a…

【蓝桥杯真题练习】STEMA科技素养练习题库 答案版015 持续更新中~

1、牛顿运动定律描述了物体运动符合的规律,被誉为经典力学的基石。以下关于牛顿定律的描述中,不正确的选项是( )。 A、牛顿运动定律一共有三条 B根据牛顿定律,没有受到外力作用的物体运动速度会保持不变 C根据牛顿运动定律,两个物体作用于对方的力大小一定相等 D牛…

项目运营后阶段发力

前言 我记得之前有人跑过来问我&#xff1a;你知道为啥字节面试总会考算法吗&#xff1f;我没有回答&#xff0c;一方面是算法是大厂必考的东西&#xff0c;既然是必须的东西究竟个为什么有点白费心机&#xff0c;第二方面我没有进去过字节&#xff0c;所以我也拿捏不准为什么。…

业务数据分析-Excel的基础操作(一)

Excel的基础操作1、工作簿2、工作表3、数据基本操作4、数据类型5、常用快捷键1、工作簿 即Excel文档&#xff0c;用来储存和处理数据的文件 常用扩展名&#xff1a; xls 97-03版xlsx 07版以后xlsm 带宏的文件 一个工作簿包含多张工作表 2、工作表 默认名称&#xff1a;shee…

【小程序】微信小程序自定义组件Component详细总结

1- 前言 在本文中你将收获 小程序如何使用自定义组件自定义组件之间的传值自定义组件中插槽的使用 2- 组件文件新建 2.1 定义组件 在根目录新建components文件夹&#xff0c;建立cell 文件夹&#xff0c;右击创建cell的Component组件 cell.jscell.wxmlcell.jsoncell.wxss …

mmlab花朵分类结果展示(2)

花朵分类结果展示Grad-Cam可视化方法模型分析折线图和平均耗时展示计算量展示这一节我们继续上一节讲解训练结果测试与验证。Grad-Cam可视化方法 上一节我们讲述了数据增强的可视化方法&#xff0c;因为数据增强是训练模型前的步骤&#xff0c;所以即使我们没有训练结果也可以…

水稻插秧机分叉机构壳体零件数控加工工艺工装设计

目录 &#xff08;一&#xff09;产品介绍-------------------------------------------------------------------1 &#xff08;二&#xff09;计算生产纲领-------------------------------------------------------------2 1&#xff0c;计算生产纲领决定生产类型 2&#x…

【k哥爬虫普法】非法入侵计算机信息系统,获取1500万余条个人信息!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rZDkxIyG-1668593948055)(https://s2.loli.net/2022/11/07/Lx2ZiWGpanJbOvc.png)] 我国目前并未出台专门针对网络爬虫技术的法律规范&#xff0c;但在司法实践中&#xff0c;相关判决已屡见不鲜&#x…

Mybatis---从入门到深化

一、什么是框架&#xff1f; 框架即一个半成品软件。开发者从头开发一个软件需要花费大量精力&#xff0c;于是有一些项目组开发出半成品软件&#xff0c;开发者在这些软件的基础上进行开发&#xff0c;这样的软件就称之为框架。 如果将开发完成的软件比作是一套已经装修完毕的…

超级实用的电脑小技巧大全

技巧一&#xff1a; 一些用户正在经历缓慢和间歇性的下载速度。 解决方案&#xff1a; 比如小编在下载界面做了温馨提示&#xff0c;要求用户在使用本软件前&#xff0c;退出电脑上安装的任何杀毒软件&#xff08;360安全卫士、QQ管家、金山卫士、百度卫士等&#xff09;&am…

C语言 - 通讯录详解

通讯录 文章目录1. 基本思路2.代码实现2.1 定义各种**宏**和**结构体**。2.2 创建结构体并进行初始化2.3 打印菜单&#xff0c;模拟用户的选择2.4 增加联系人2.5 删除联系人2.6 查找联系人2.7 修改联系人2.8 对通讯录进行升序排序2.9 打印通讯录2.10 结束程序并销毁通讯录3. 文…

再度入榜 | 中睿天下入选《中国网络安全企业100强》

近日&#xff0c;国内权威网络安全媒体、第三方安全咨询机构安全牛发布第十版《中国网络安全企业100强》&#xff08;以下简称“百强”&#xff09;&#xff0c;中睿天下以强大的综合发展实力和强劲的发展势头再次荣登百强榜单。 安全牛作为国内网络安全行业权威媒体&#xff0…

能解决你80%关于存储的疑惑

概述 在计算机系统中&#xff0c;常用的存储介质包括寄存器、内存、SSD、磁盘等&#xff0c;寄存器的速写速度与CPU相同&#xff0c;一个时钟周期是0.3纳秒&#xff0c;而内存访问需要120纳秒&#xff0c;寄存器的读写速度比内存要快几百倍&#xff0c;固态硬盘访问需要50&…

Vue3基础(26)___defineProps、defineEmits、defineExpose组件通信

defineProps、defineEmits、defineExpose组件通信 在使用这个之前&#xff0c;我们需要知道setup的语法糖写法&#xff0c;因为上面的三个api需要在这个语法糖中才能使用&#xff1a; <script setup>console.log(LiuQing) </script>里面的代码会被编译成组件 set…

m分别通过GA遗传优化算法对企业不同产品订单生产进行时间优化

目录 1.算法概述 2.仿真效果预览 3.核心MATLAB代码预览 4.完整MATLAB程序 1.算法概述 首先介绍MATLAB部分的遗传算法的优化算法介绍&#xff1a; 遗传算法的原理 遗传算法GA把问题的解表示成“染色体”&#xff0c;在算法中也即是以二进制编码的串。并且&#xff0c;在执行…

WhatsApp营销引流-SendWS拓客系统功能后台介绍(五):WhatsApp素材管理

WhatsApp营销引流 很多新创的品牌想在海外推广自家产品&#xff0c;由于自己的品牌影响力不及其他老牌大牌&#xff0c;想在海外打开名气首先可以选择利用WhatsApp来进行营销引流&#xff0c;这是最简单最直接的方法&#xff0c;只需要低成本即可实现高回报。 据统计WhatsApp…