【STM32】SYSCLK配置|学习笔记
一、RCC原理
所有stm32的外设都是挂载在相应的时钟上的,如下
挂载在AHB上的外设
挂载在APB1上的
APB2上的
所以RCC很重要,特别像TIM这种对时钟特别敏感的外设就必须把SYSCLK确定好,才能正常使用TIM外设。
那么问题来了,SYSCLK如何产生,或者如何配置?
其实不做任何配置芯片外设也是可以正常工作的,一般是默认设置,使用SYSCLK=HSI。对于F1就是8M,F2就是16M。
要配置自己想要的SYSCLK频率其实很简单。
1.确定好时钟源
RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);
不难发现这里可以选择的时钟有三种HSI/HSE/PLLCLK三种。
前两种很好理解,HSE或HSI频率是多少SYSCLK的频率就是多少,直等关系。缺点是可选的频率少。
2.使用PLL产生需要的时钟频率
锁相环PLL理论上可以生成任意频率的时钟,PLL不产生时钟他也需要时钟源,如下图PLL可选HSI或SHE作为其时钟源。
RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP, uint32_t PLLQ);
然后需要设置其倍频分频系数,暂且设PLL的时钟源为S
PLLCLK = S*N/M*P
举个例子S=16M,需要PLLCLK=120M,怎么选择系数。
120 = 16N/M*P, N/M*P = 120/16(因为N要>192) = 240/32 = 240/16*2 = 240/8*4 配置方法不一
要注意的是时钟振荡频率不能大于120M对于F2系列来说。
二、代码实现(HSE版)
1.清除之前设置,还原默认值 RCC_DeInit();
2.打开HSE RCC_HSEConfig(RCC_HSE_ON);
3.等待起振 RCC_WaitForHSEStartUp() == SUCCESS
4.设置AHB RCC_HCLKConfig(RCC_SYSCLK_Div1);//AHB = 120M
设置高速AHB RCC_PCLK1Config(RCC_HCLK_Div1);//APB2 = 120M
设置低速AHB RCC_PCLK2Config(RCC_HCLK_Div1);//APB2 = 120M
5.设置PLL RCC_PLLConfig(RCC_SYSCLKSource_HSI,8,240,4,0);//PLL=120M(NOTICE:CAN NOT OVER 120M)
开启PLL RCC_PLLCmd(ENABLE);
等待PLL RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET
6.选择SYSCLK为PLL RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
等待SYSCLK启动 (RCC_GetSYSCLKSource() != 0x08
HSI版:
void RCC_Config()
{
RCC_DeInit();
// RCC_HSEConfig(RCC_HSE_ON);外部晶振不准暂不启用
// if(RCC_WaitForHSEStartUp() == SUCCESS)
// {
// }
RCC_HCLKConfig(RCC_SYSCLK_Div1);//AHB = 120M
RCC_PCLK1Config(RCC_HCLK_Div1);//APB2 = 120M
RCC_PCLK2Config(RCC_HCLK_Div1);//APB2 = 120M
// /*设置FLASH存储器延时时钟周期数*/
// FLASH_SetLatency(FLASH_Latency_2);//FLASH_Latency_2 2延时周期
// /*选择FLASH预取指缓存的模式*/
// FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); // 预取指缓存使能
RCC_HSICmd(ENABLE);
RCC_PLLConfig(RCC_SYSCLKSource_HSI,8,240,4,0);//PLL=120M(NOTICE:CAN NOT OVER 120M)
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)//等待PLL启动
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08)//等待SYSCLK启动
{
}
}
【STM32】SYSCLK配置|学习笔记的更多相关文章
- stm32寄存器版学习笔记07 ADC
STM32F103RCT有3个ADC,12位主逼近型模拟数字转换器,有18个通道,可测量16个外部和2个内部信号源.各通道的A/D转换可以单次.连续.扫描或间断模式执行. 1.通道选择 stm32把A ...
- stm32寄存器版学习笔记06 输入捕获(ETR脉冲计数)
STM32外部脉冲ETR引脚:TIM1-->PA12;TIMER2-->PA0:TIMER3-->PD2;TIMER4-->PE0… 1.TIM2 PA0计数 配置步骤 ①开启 ...
- stm32寄存器版学习笔记05 PWM
STM32除TIM6和TIM7外都可以产生PWM输出.高级定时器TIM1和TIM8可以同时产生7路PWM,通用定时器可以产生4路PWM输出. 1.TIM1 CH1输出PWM配置步骤 ①开启TIM1时钟 ...
- stm32寄存器版学习笔记03 外部中断
stm32的每个I/O口都可以作为中断输入,要把I/O口设置为外部中断输入,必须将I/O口设置为上拉/下拉输入 或 浮空输入(但浮空的时候外部一定要带上拉或下拉电阻,否则可能导致 中断不停的触发),干 ...
- Chapter 2. OpenSSL的安装和配置学习笔记
Chapter 2. OpenSSL的安装和配置学习笔记 2.1 在linux上面安装OpenSSL我还是做点No paper事情比较在行,正好和老师的课程接轨一下.以前尝试过在Windows上面安装 ...
- redis 安装配置学习笔记
redis 安装配置学习笔记 //wget http://download.redis.io/releases/redis-2.8.17.tar.gz 下载最新版本 wget http://downl ...
- stm32寄存器版学习笔记01 GPIO口的配置(LED、按键)
STM32的I/O口可以由软件配置成如下8种模式:输入浮空.输入上拉.输入下拉.模拟输入.开漏输出.推挽输出.推挽式复用功能及开漏复用功能.每个I/O口由7个寄存器来控制:配置模式的端口配置寄存器CR ...
- STM32嵌入式开发学习笔记(六):串口通信(上)
本文我们将了解STM32与外部设备通过串口通信的方式. 所谓串口通信,其实是一个类似于计算机网络的概念,它有物理层,比如规定用什么线通信,几伏特算高电平,几伏特算低电平.传输层,通信前要发RTS,CT ...
- Elasticsearch的配置学习笔记
文/朱季谦 Elasticsearch是一个基于Lucene的搜索服务器.它提供一个分布式多用户能力的全文搜索引擎,基于RESTful web接口,Elasticsearch是用Java语言开发的. ...
- stm32寄存器版学习笔记08 DMA
DMA(Direct Memory Access),直接存储器访问.DMA传输方式无需CPU直接控制传输,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU效率大大提高.stm32f10 ...
随机推荐
- vue项目引用vue-pdf打包多出worker.js文件
问题描述:项目要用到pdf预览功能,因为是vue项目就是直接导入了vue-pdf组件,但是在进行打包的时候在dist文件夹下面多个worker.js文件,导致项目部署后预览pdf直接报了404 方案一 ...
- jquery实现多图片上传
在做后台管理的时候,遇到这样一个需求,实现多张图片上传并按选中的顺序显示.PS:图片上传的时候是即时上传到服务器,后台返回图片在服务器上的地址,在最后点击提交按钮的时候,把地址传给后端写入数据库即可. ...
- java中overload与override的区别
1.综述 重写(Override)也称覆盖,它是父类与子类之间多态性的一种表现,而重载(Overload)是一个类中多态性的一种表现. override从字面就可以知道,它是覆盖了一个方法并且对其重写 ...
- Linux 服务器内存异常问题记录
一.内存异常 1. 问题描述:服务器内存一会儿就增加1G,但也没有看到有消耗内存较大的进程:最后联想到项目最近做ARM架构适配,有变更代码,立马想到使用的SSH组件,一查看就发现有大量的进程: 解决办 ...
- macos 安装多版本PHP,composer
PHP版本切换网上有写博客用 brew-php-switcher 切换实际没生效,博客也是相互抄,看了袭浪费时间.讲一下我的思路,因为php 可以cli 和fpm 的方式.安装php 将不同版本添加命 ...
- Linxu后台运行Java的jar包
1.直接运行 java -jar myjar-0.0.1-SNAPSHOT.jar 这种方式需要一直挂载终端(Ctrl+C会结束进程.关闭shell也会结束进程),故不符合需求 2.后台运行 A.Ct ...
- GridView.RowCellClick Event
Fires when a user clicks a data cell. If data is editable and the ColumnViewOptionsBehavior.EditorSh ...
- python菜鸟学习: 15 GUI界面化记事本
# -*- coding: utf-8 -*-import tkinter as tkdef getNewCreate(): passdef getCharcount1(sss): # 添加字数统 s ...
- ubuntu 20.04 ibus添加五笔输入法
ubuntu 20.04 ibus添加五笔输入法:虽然现在五笔输入法已经没有什么新人使用,如果还有一两个人,找不到系统自带的极点五笔输入,可以按如下方式操作:以前是用ibus-setup,点添加,现在 ...
- Python学习笔记(五)if分支语句
一.if语法 示例: 1 money = int(input('请输入余额:')) 2 if money >= 5: 3 print('买得起!') 4 5 if True: 6 print(' ...