STM32入门系列-STM32时钟系统,自定义系统时钟
在时钟树的讲解中我们知道,通过修改PLLMUL中的倍系数值(2-16)可以改变系统的时钟频率。在库函数中也有对时钟倍频因子配置的函数,如下:
void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);
第一个参数是PLL时钟源选择,例程中一般采用的都是HSE作为PLL的时钟源,可以设置为RCC_PLLSource_HSE_Div1/RCC_PLLSource_HSE_Div2。第二个参数就是倍频因子值可以是RCC_PLLMul_2~RCC_PLLMul_16。方便修改系统时钟,这里自定义一个系统时钟初始化函数,将函数放在对应实验程序的main.c中。自定义系统时钟,可以通过修改PLL时钟源和倍频系数实现时钟调整具体代码如下:
void RCC_HSE_Config(u32 div,u32 pllm) //自定义系统时间(可以修改时钟)
{
RCC_DeInit(); //将外设RCC寄存器重设为缺省值
RCC_HSEConfig(RCC_HSE_ON);//设置外部高速晶振(HSE)
if(RCC_WaitForHSEStartUp()==SUCCESS) //等待 HSE 起振
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB时钟(HCLK)
RCC_PCLK1Config(RCC_HCLK_Div2);//设置低速AHB时钟(PCLK1)
RCC_PCLK2Config(RCC_HCLK_Div1);//设置高速AHB时钟(PCLK2)
RCC_PLLConfig(div,pllm);//设置PLL时钟源及倍频系数
RCC_PLLCmd(ENABLE); //使能或者失能PLL
//检查指定的RCC标志位设置与否,PLL就绪
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
//设置系统时钟(SYSCLK)
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//返回用作系统时钟的时钟源,0x08:PLL作为系统时钟
while(RCC_GetSYSCLKSource()!=0x08);
}
}
函数具体实现过程在程序中已经注释,大家可以参考注释。在函数中设置倍频因子时,我们给他传递了形参中的变量,这样做的好处是当你调用此函数时,只需要修改传递给函数形参内的值即可修改系统时钟,无需修改函数内部程序。在未修改系统时钟时,系统初始化后的时钟是72M,对应着此函数参数设置如下:
RCC_HSE_Config(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
如果想让系统时钟为36M,只需要将参数值修改即可:
RCC_HSE_Config(RCC_PLLSource_HSE_Div2,RCC_PLLMul_9);
此时修改的是div这个参数值,此参数用来对HSE时钟分频系数设置,从时钟树可知,HSE可以直接流入到PLLSRC,还可以经过2分频后给PLLSRC。它的取值为RCC_PLLSource_HSE_Div1或RCC_PLLSource_HSE_Div2。
最后我们可以通过一个LED指示灯闪烁速度来反映系统时钟修改后的效果。主函数代码如下:
int main()
{
RCC_HSE_Config(RCC_PLLSource_HSE_Div2,RCC_PLLMul_9); //36M
LED_Init();
while(1)
{
GPIO_ResetBits(LED_PORT,GPIO_Pin_0);//点亮D1
delay(6000000);
GPIO_SetBits(LED_PORT,GPIO_Pin_0);
delay(6000000);
}
}
如果将div原先的1值修改为2,此时系统时钟即为36M,相当于速度慢了一倍。LED闪烁的速度也就慢了一倍。注意:不要把STM32系统时钟设置超过72M使用,否则容易崩溃。
STM32入门系列-STM32时钟系统,自定义系统时钟的更多相关文章
- STM32入门系列-STM32时钟系统,时钟使能配置函数
之前的推文中说到,当使用一个外设时,必须先使能它的时钟.怎么通过库函数使能时钟呢?如需了解寄存器配置时钟,可以参考<STM32F10x中文参考手册>"复位和时钟控制(RCC)&q ...
- STM32入门系列-STM32时钟系统,STM32时钟树
时钟对于单片机来说是非常重要的,它为单片机工作提供一个稳定的机器周期从而使系统能够正常运行.时钟系统犹如人的心脏,一旦有问题整个系统就崩溃.我们知道STM32属于高级单片机,其内部有很多的外设,但不是 ...
- STM32入门系列-STM32时钟系统,时钟初始化配置函数
在前面推文的介绍中,我们知道STM32系统复位后首先进入SystemInit函数进行时钟的设置,然后进入主函数main.那么我们就来看下SystemInit()函数到底做了哪些操作,首先打开我们前面使 ...
- STM32入门系列-STM32最小系统介绍
STM32最小系统组成 单片机最小系统,也就是能够使得单片机正常运行程序,最少需要连接哪些器件.一般来说,STM32最小系统由四部分组成: 电源电路 复位电路 晶振电路 下载电路 STM32单片机由A ...
- STM32入门系列-STM32外设地址映射
片上外设区分为四条总线,根据外设速度的不同,不同总线挂载着不同的外设,APB1挂载低速外设,APB2和AHB挂载高速外设.相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外 ...
- STM32入门系列-学习STM32要掌握的内容
STM32芯片架构 STM32F103系列芯片的系统架构如下: STM32芯片基于ARM公司的Cortex-M3内核,由ST公司设计生产,内核与总线矩阵之间有I(指令).S(系统).D(数据)三条信号 ...
- STM32入门系列-库目录及文件介绍
已经介绍了过了CMSIS标准,ST公司按照这个标准设计了一套基于STM32F10x的固件库,我们可以直接在ST公司的官网进行下载,现在给大家STM32最新固件库v3.5,在网盘上给大家提供了下载包,链 ...
- Cordova入门系列(四)自定义Cordova插件--showToast
前三篇Cordova入门系列,简单讲解了Cordova,以及如何调用Cordova插件,今天我们讲解一下如何自己做一个插件. 自定义插件,就是自己写一些安卓java代码,然后和js代码以及配置文件,封 ...
- STM32入门系列-启动文件介绍
在启动文件内部使用的都是汇编语言,这个文件的作用是负责执行微控制器从"复位"到"开始执行 main 函数"中间这段启动时间所必须进行的工作.它完成的具体工作有: ...
随机推荐
- vsCode 搭建Java开发环境
1.安装扩展 Java Extension Pack Spring Boot Extension Pack 2.配置Maven 打开设置 搜索maven 找到并打开 在 settings.json ...
- shiro安全框架和spring整合
上干货......... 整合spring的配置文件 <?xml version="1.0" encoding="UTF-8"?><beans ...
- 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...
- 如何确定芯片pin1的位置
来源:https://www.raviyp.com/embedded/150-identifying-pin-no-1-on-an-ic Identifying pin no 1 on an IC R ...
- 【题解】[SDOI2016]征途
Link 题目大意:给定序列,将它划分为\(m\)段使得方差最小,输出\(s^2*m^2\)(一个整数). \(\text{Solution:}\) 这题我通过题解中的大佬博客学到了一般化方差柿子的写 ...
- 1-kubeadm部署1.18.0单master集群
1.有了docker,为什么还用kubernetes? 访问工具层 帮助用户更高效的完成任务,包括web控制台.RESTfulAPI.CI/CD.监控管理.日志管理 PaaS服务层 为开发.测试和运维 ...
- golang 语言的特性
给函数传递参数的时候 map.slice.channel是按引用传递的 同一个变量不能用 := 这种方式创建并赋值两次. 一个包(package)的func .结构体类型变量如果要被外部的包调用.fu ...
- 【Flutter 混合开发】嵌入原生View-Android
Flutter 混合开发系列 包含如下: 嵌入原生View-Android 嵌入原生View-IOS 与原生通信-MethodChannel 与原生通信-BasicMessageChannel 与原生 ...
- 2016年 实验四 B2B模拟实验
实验四 B2B模拟实验 [实验目的] ⑴.掌握B2B中供应商的供求信息发布.阿里商铺开设和订单交易等过程. ⑵.掌握B2B中采购商的采购信息的发布.交易洽谈.网上支付和收货等过程. [实验条件] ⑴ ...
- java读取中文乱码解决方法
Java读取文本文件(例如csv文件.txt文件等),遇到中文就变成乱码.读取代码如下: List<String> lines=new ArrayList<String>(); ...