【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 ...
随机推荐
- httpRunner使用汇总
接口测试框架Python:Requests.HttpRunner 文章目录 环境准备 录制接口 生成用例 运行用例 设置变量 提取响应字段 hook机制 用例分层 用例参数化 报告 性能locust ...
- Markdown格式文档图片设置居右
在Typora中设置图片居右 <p><img src="[图片路径]" align="right" /></p> left ...
- VMware-共享文件夹挂载
[root@localhost jiangyinuo]# cd /cdromobash: cd: /cdromo: 没有那个文件或目录[root@localhost jiangyinuo]# cd / ...
- SQLServer中使用between查询日期
SQL Server中字段是Datetime型 以" YYYY-MM-DD 00:00:00" 存放的 between and是包括边界值的,not between不包括边界值,不 ...
- sping入门介绍-bean标签的属性
bean标签的属性 1 .基础属性 <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl" ...
- 在centos环境下利用docker安装kail
配置好国内阿里云镜像 vim /etc/docker/daemon.json {"registry-mirrors":["https://cq20bk8v.mirror ...
- Software_programming_Config_HOCON
05:09:37 HOCON github https://github.com/lightbend/config/blob/master/HOCON.md 相较于 XML, JSON, YAML 更 ...
- Kubernetes--Pod节点选择器nodeSelector(标签)
Pod节点选择器是标签及标签选择器的一种应用,它能够让Pod对象基于集群中工作节点的标签来挑选倾向运行的目标节点. Kubernetes的kube-scheduler守护进程负责在各工作节点中基于系统 ...
- Mysql 无法使用注释 带注释执行报错 Dbeaver
一.场景 执行时,前面带一段注释,在dbeaver执行报语法错误 二.解决办法 在注释后面插入一个空格,识别注释后变成灰色,执行成功
- wsl2 的安装与使用
wsl2 简介 wsl2 是 window 自家做的虚拟机,如果初次接触,可以建立的理解为 vmware.只不过他是 window 公司自己开发的,所以从兼容性上来讲,会更好一些. 我个人选择使用 w ...