STM32F407标准库时钟设置详解
创作时间:
作者:
@小白创作中心
STM32F407标准库时钟设置详解
引用
CSDN
1.
https://blog.csdn.net/qq_38295600/article/details/144429802
本文介绍STM32F407微控制器使用标准库进行时钟设置的具体步骤和代码实现。通过外部晶振(HSE)配置PLL(锁相环)以达到168MHz的系统时钟,并提供了完整的函数实现和注释说明。
(注:原文包含一张图片,但在抓取时已丢失)
RCC_DeInit();
/*这里选择 外部晶振(HSE)作为 时钟源,因此首先打开外部晶振*/
RCC_HSEConfig(RCC_HSE_ON);
/*等待外部晶振进入稳定状态*/
while( RCC_WaitForHSEStartUp() != SUCCESS );
/* 到这一步为止,已有 HSE_VALUE = 8 MHz.
PLL_VCO input clock = (HSE_VALUE or HSI_VALUE / PLL_M),
根据文档,这个值被建议在 1~2MHz,因此我们令 PLL_M = 8,
即 PLL_VCO input clock = 1MHz */
PLL_M = 8;
/* 到这一步为止,已有 PLL_VCO input clock = 1 MHz.
PLL_VCO output clock = (PLL_VCO input clock) * PLL_N,
这个值要用来计算系统时钟,我们 令 PLL_N = 336,
即 PLL_VCO output clock = 336 MHz.*/
PLL_N = 336;
/* 到这一步为止,已有 PLL_VCO output clock = 336 MHz.
System Clock = (PLL_VCO output clock)/PLL_P ,
因为我们要 SystemClock = 168 Mhz,因此令 PLL_P = 2.
*/
PLL_P = 2;
/*这个系数用来配置SD卡读写,USB等功能,暂时不用,根据文档,暂时先设为7*/
PLL_Q = 7;
/* 配置PLL并将其使能,获得 168Mhz 的 System Clock 时钟*/
RCC_PLLConfig(RCC_PLLSource_HSE, PLL_M, PLL_N, PLL_P, PLL_Q);
RCC_PLLCmd(ENABLE);
/*到了这一步,我们已经配置好了PLL时钟。下面我们配置Syetem Clock*/
/*选择PLL时钟作为系统时钟源*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
根据上面的块说明我们进行程序修改
第一步:
打开系统文件.c,将这一行屏蔽
第二步:
修改你的外部晶振值,看你板载晶振大小填写
第三步:写时钟配置代码
/*
* 使用HSE时,设置系统时钟的步骤
* 1、开启HSE ,并等待 HSE 稳定
* 2、设置 AHB、APB2、APB1的预分频因子
* 3、设置PLL的时钟来源
* 设置VCO输入时钟 分频因子 m
* 设置VCO输出时钟 倍频因子 n
* 设置PLLCLK时钟分频因子 p
* 设置OTG FS,SDIO,RNG时钟分频因子 q
* 4、开启PLL,并等待PLL稳定
* 5、把PLLCK切换为系统时钟SYSCLK
* 6、读取时钟切换状态位,确保PLLCLK被选为系统时钟
*/
/*
* m: VCO输入时钟 分频因子,取值2~63
* n: VCO输出时钟 倍频因子,取值192~432
* p: PLLCLK时钟分频因子 ,取值2,4,6,8
* q: OTG FS,SDIO,RNG时钟分频因子,取值4~15
* 函数调用举例,使用HSE设置时钟
* SYSCLK=HCLK=168M,PCLK2=HCLK/2=84M,PCLK1=HCLK/4=42M
* HSE_SetSysClock(25, 336, 2, 7);
* HSE作为时钟来源,经过PLL倍频作为系统时钟,这是通常的做法
* 系统时钟超频到216M爽一下
* HSE_SetSysClock(25, 432, 2, 9);
*/
void HSE_SetSysClock(uint32_t m, uint32_t n, uint32_t p, uint32_t q)
{
__IO uint32_t HSEStartUpStatus = 0;
// 使能HSE,开启外部晶振,野火F407使用 HSE=25M
RCC_HSEConfig(RCC_HSE_ON);
// 等待HSE启动稳定
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if (HSEStartUpStatus == SUCCESS)
{
// 调压器电压输出级别配置为1,以便在器件为最大频率
// 工作时使性能和功耗实现平衡
RCC->APB1ENR |= RCC_APB1ENR_PWREN;
PWR->CR |= PWR_CR_VOS;
// HCLK = SYSCLK / 1
RCC_HCLKConfig(RCC_SYSCLK_Div1);
// PCLK2 = HCLK / 2
RCC_PCLK2Config(RCC_HCLK_Div2);
// PCLK1 = HCLK / 4
RCC_PCLK1Config(RCC_HCLK_Div4);
// 如果要超频就得在这里下手啦
// 设置PLL来源时钟,设置VCO分频因子m,设置VCO倍频因子n,
// 设置系统时钟分频因子p,设置OTG FS,SDIO,RNG分频因子q
RCC_PLLConfig(RCC_PLLSource_HSE, m, n, p, q);
// 使能PLL
RCC_PLLCmd(ENABLE);
// 等待 PLL稳定
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
/*-----------------------------------------------------*/
//开启 OVER-RIDE模式,以能达到更高频率(F429才有该功能)
// PWR->CR |= PWR_CR_ODEN;
// while((PWR->CSR & PWR_CSR_ODRDY) == 0)
// {
// }
// PWR->CR |= PWR_CR_ODSWEN;
// while((PWR->CSR & PWR_CSR_ODSWRDY) == 0)
// {
// }
// 配置FLASH预取指,指令缓存,数据缓存和等待状态
FLASH->ACR = FLASH_ACR_PRFTEN
| FLASH_ACR_ICEN
| FLASH_ACR_DCEN
| FLASH_ACR_LATENCY_5WS;
/*-----------------------------------------------------*/
// 当PLL稳定之后,把PLL时钟切换为系统时钟SYSCLK
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
// 读取时钟切换状态位,确保PLLCLK被选为系统时钟
while (RCC_GetSYSCLKSource() != 0x08)
{
}
}
else
{ // HSE启动出错处理
while (1)
{
}
}
}
第四步:主函数调用,完成时钟配置
热门推荐
携手五载,歌德学院PASCH项目组到访万科梅沙书院
吃什么可预防头头皮长痘痘?5大健康食物推荐给你!
揭秘控油小技巧,让你的肌肤重现清爽自然之美
四川新高考成绩怎么算、等级赋分怎么弄?
腹部锻炼减肥方法 腹部锻炼9个动作初学者
并非偶然,U20国足如何实现华丽蜕变?原因找到,不只是实战锻炼
尼龙家族全解析:性能、应用与未来趋势
深入了解AI数字人:概念、应用、发展趋势及未来展望
“残健融合”构建无障碍就业与生活新生态 为残疾人点亮希望之光
第二届中医药产业生态论坛揭晓“2024中药老字号品牌TOP50”榜单
烧香时,3根,6根,9根,分别代表什么?你确定烧对了吗?
行间距的重要性与调整技巧:提升阅读体验的关键因素
记忆力衰退怎么办?专家解析原因及改善方法
为什么我们会忘记事?这是记忆力下降的征兆吗?
普洱茶与山楂:健康益处、饮用方法及搭配建议
“钱潮”涌动:巨额人寿保险市场的机会,我们能接住吗?
王者荣耀瑶玩法攻略:从“挂件”到团队关键助力
确认之诉和形成之诉有区别吗?
轮合金轮毂的优点
【健康科普】司美格鲁肽的秘密:如何安全使用这款新型降糖药
股市风向标 | CPI报告对市场的深刻影响
如何提高孩子的记忆力?小技巧+吃什么
欧美低空交通发展经验与启示
关注脊柱侧弯,让孩子少走弯路
复旦华山医院:726例白癜风患者细胞治疗总有效率达82.81%
老人将财产赠与子女后,该如何保障自己的权益?
按时间顺序观看龙珠的完整指南
魔芋粉的功效与作用 魔芋粉怎么吃
新手做魔芋,如何避免失败?六大实用技巧让你轻松做出美味魔芋
以茶为曲:别样的宋韵与京腔