当前位置: 首页 > news >正文

STM32 RCC功能说明 复位和时钟控制RCC

目录

背景

RCC配置时钟主要涉及两方面

程序

第1步、RCC默认初始化

第2步、等待HSE工作稳定

第3步、设置PLL时钟源以及倍频数

第4步、设置AHB总线时钟(HCLK)

第5步、设置PCLK1(APB1总线)

第6步、设置PCLK2(APB2总线)

第7步、FLASH存储器的配置

第8步、使能PLL

第9步、等待PLL就绪

第10步、设置系统SYSCLK

第11步、等待切换到系统时钟为PLL


背景

在本篇文章会对stm32(STM32F103C8T6)的时钟系统进行配置。

RCC配置时钟主要涉及两方面


1)设置单片机的时钟输入源
2)CPU和各种总线(AHB、APB1、APB2)的频率

开发板是使用8M的HSE晶振再进行8倍频作为系统时钟源。配置系统时钟(即MCU主频)和三个总线时钟的时候,需要根据stm32数据手册中的时钟树来进行配置。以SYSCLK为分界点,左边部分为产生主频部分;右边部分为分频主频部分!

程序

void RCC_Configuration(void){ //RCC时钟的设置  
	ErrorStatus HSEStartUpStatus;   
	RCC_DeInit();              /* RCC system reset(for debug purpose) RCC寄存器恢复初始化值*/   
	RCC_HSEConfig(RCC_HSE_ON); /* Enable HSE 使能外部高速晶振*/   
	HSEStartUpStatus = RCC_WaitForHSEStartUp(); /* Wait till HSE is ready 等待外部高速晶振使能完成*/   
	if(HSEStartUpStatus == SUCCESS){   
		/*设置PLL时钟源及倍频系数*/   
		RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //RCC_PLLMul_x(枚举2~16)是倍频值。当HSE=8MHZ,RCC_PLLMul_9时PLLCLK=72MHZ   
		/*设置AHB时钟(HCLK)*/   
		RCC_HCLKConfig(RCC_SYSCLK_Div1); //RCC_SYSCLK_Div1——AHB时钟 = 系统时钟(SYSCLK) = 72MHZ(外部晶振8HMZ)   
		/*注意此处的设置,如果使用SYSTICK做延时程序,此时SYSTICK(Cortex System timer)=HCLK/8=9MHZ*/   
		RCC_PCLK1Config(RCC_HCLK_Div2); //设置低速AHB时钟(PCLK1),RCC_HCLK_Div2——APB1时钟 = HCLK/2 = 36MHZ(外部晶振8HMZ)   
		RCC_PCLK2Config(RCC_HCLK_Div1); //设置高速AHB时钟(PCLK2),RCC_HCLK_Div1——APB2时钟 = HCLK = 72MHZ(外部晶振8HMZ)   
		/*注:AHB主要负责外部存储器时钟。APB2负责AD,I/O,高级TIM,串口1。APB1负责DA,USB,SPI,I2C,CAN,串口2,3,4,5,普通TIM */  
		FLASH_SetLatency(FLASH_Latency_2); //设置FLASH存储器延时时钟周期数   
		/*FLASH时序延迟几个周期,等待总线同步操作。   
		推荐按照单片机系统运行频率:
		0—24MHz时,取Latency_0;   
		24—48MHz时,取Latency_1;   
		48~72MHz时,取Latency_2*/   
		FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //选择FLASH预取指缓存的模式,预取指缓存使能   
		RCC_PLLCmd(ENABLE);	//使能PLL
		while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //等待PLL输出稳定   
		RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //选择SYSCLK时钟源为PLL
		while(RCC_GetSYSCLKSource() != 0x08); //等待PLL成为SYSCLK时钟源   
	}  
	/*开始使能程序中需要使用的外设时钟*/   
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |   
//	RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE); //APB2外设时钟使能      
//	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //APB1外设时钟使能  
//	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);   
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);   	 
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);    
}  

第1步、RCC默认初始化

第2步、启用HSE

第2步、等待HSE工作稳定

方法1:

方法2:

通过在while条件中调用RCC_GetFlagStatus,等待HSE工作就绪

第3步、设置PLL时钟源以及倍频数

实现箭头部分功能

HSE的频率为8MHZ,通过PLLMUL 八倍倍频之后就可以达到SYSCLK 70MHZ的意图!

第4步、设置AHB总线时钟(HCLK)

HCLK,提供给高速总线AHB的时钟信号

实现箭头部分,属于分配主频(SYSCLK)

第5步、设置PCLK1(APB1总线)

APB1(PCLK1)的时钟频率是72/2=36MHZ

第6步、设置PCLK2(APB2总线)

第7步、FLASH存储器的配置

第8步、使能PLL

第9步、等待PLL就绪

通过在while的条件中调用该函数等待PLL就绪

第10步、设置系统SYSCLK

第11步、等待切换到系统时钟为PLL

相关文章:

  • 【Uniapp】关于实现下拉刷新的三种方式
  • R18 XR L1 enhancement
  • 【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)
  • 【大语言模型】最新ChatGPT、DeepSeek等大语言模型助力高效办公、论文与项目撰写、数据分析、机器学习与深度学习建模等科研应用
  • 【故障处理】- RMAN-06593: platform name ‘Linux x86 64-bitElapsed: 00:00:00.00‘
  • 【清晰教程】本地部署DeepSeek-r1模型
  • 基于STM32设计的粮食仓库(粮仓)环境监测系统
  • 常用的python库-安装与使用
  • CTF-WEB: 利用Web消息造成DOM XSS
  • DeepSeek接口联调(postman版)
  • 使用pocketpal-ai在手机上搭建本地AI聊天环境
  • 使用spring-web 和 不是用spring-web各自的最小依赖
  • 3d pose 学习笔记2025
  • vscode无法ssh连接远程机器解决方案
  • 大模型chagpt原理(持续更新)
  • 新数据结构(4)——Java继承
  • springboot配置https
  • 【Prometheus】prometheus结合cAdvisor监控docker容器运行状态,并且实现实时告警通知
  • 编码格式大全解释以及相关编码特性
  • Spring Boot整合DeepSeek实现AI对话(API调用和本地部署)
  • 上海高院与上海妇联签协议,建立反家暴常态化联动协作机制
  • 证监会发布《上市公司募集资金监管规则》,6月15日起施行
  • 被前男友泼汽油致残后,一个女孩经历的双重灼烧
  • 古巴外长谴责美国再次将古列为“反恐行动不合作国家”
  • 崔登荣任国家游泳队总教练
  • 4台肺癌手术,2名“90后”患者,这届年轻人的肺怎么了?