你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于 STM 32 建立时钟方案(附代码)

[复制链接]
eefishing 发布时间:2020-2-28 13:54
这里必须阐明系统时钟的简历对于系统运行的重要性。系统所有的运行都是建立在时钟的正常运行上的,没有稳健的系统时钟,就不可能有稳定的系统。
4 U. G7 o# L- a, e) z" }0 {6 C
在系统中,复位后首要的任务是建立系统时钟,以下是建立系统时钟的基本步骤:

5 X" V: o* r- U# v+ x: }9 y

% E# K8 n6 S: c# }0 c$ j
1. 将所有的 RCC 外设寄存器重设为默认值;
& s2 p$ y' F8 ]5 D- o/ v# v) _
2. 启用外部高速晶振;
6 {  @7 h9 y$ ]( k- @, R/ X
3. 等待,知道外部高速晶振稳定;

1 E  j2 y, W& }
4. 设置欲取指缓存使能和代码延时值;

8 y( m# H' M! p1 V7 `1 t7 s' N
5. 设置 AHB(HCLK)等于系统时钟;
  M% W1 o# @0 l: q
6. 设置高速 APB2(PCLK2)为系统时钟;
0 a# Y6 F, T# x6 l3 t
7. 设置低速 APB1(PCLK1)为系统时钟的 1/2,APB2 最高是 38MHz;
; W, t* S- P- K& w- ]4 I, b; L
8. 设置 PLL 时钟源及倍频系数,使能 PLL,经过 PLL 被频后最高时钟只能 72MHz;
" p1 i; j6 E* C+ O0 |
9. 等待 PLL 初始化;
# O1 E; f8 R( R5 F
10. 设置 PLL 为系统时钟;
8 S% T* G& d1 M# Z; M3 X: I% P' _
11. 等待 PLL 成功作为系统时钟源。

9 y! P' ], t7 I; z- _5 k- T
以下通过实例代码表征上述的使用方法。主要就是根据以上的系统时钟配置的顺序来做代码处理:
) f  i( f) K( f* H$ \# c- S
ErrorStatus HSEStatusUpStatus;
// 将外设 RCC 寄存器重设为默认值
RCC_DeInit();
// 设置外部高速晶振
RCC_HSEConfig(RCC_HSE_ON);
// 等待 HSE 起振
HSEStatusUpStatus = RCC_WaitForHSEStatusUp();
if(HSEStatusUpStatus == SUCESS)
{
// 预取指缓存使能
FLASH_PrefetchBufferCmd(FLASH_PertchBuffer_Enable);
// 设置代码延时值,FLASH_Latency_2,2 延时周期
FLASH_SetLatency(FLASH_Latency_2);
// 设置 AHB 时钟(HCLK)
//RCC_SYSCLK_Div1 AHB 时钟 = 系统时钟
RCC_HCLKConfig(RCC_SYSCLK_Div1);
// 设置高速 AHB2 为系统时钟
RCC_PCLK2Config(RCC_HCLK_Div1);
// 设置低速 AHB 时钟
RCC_PCLK2Config(RCC_HCLK_Div2);
// 设置 PLL 时钟
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
// 使能 PLL
RCC_PLLCmd(enable);
// 等待指定 RCC 标志位设置成功,等待 PLL 初始化成功
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
// 设置 PLL 为系统时钟
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK)
//0x00 HSI,0X04 HSE,0X08 PLL
while(RCC_GetSYSCLKSource() != 0x08)
{
}
}
赞 收藏 评论0 发布时间:2020-2-28 13:54

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版