【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启动 { } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!