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

STM32中的时钟系统

[复制链接]
STMCU小助手 发布时间:2022-12-27 18:00
STM32中的时钟系统概述

1dfa787f80984cc0a9a3743540fba491.png

5个蓝色背景的是时钟源

SYSCLK是系统时钟,最重要的时钟,可以看到其他的外设的时钟都来源于系统时钟

HSI RC高速内部
约为8MHz,但不太稳定,可以作为系统时钟,灰色背景的梯形表示选择器

HSE Os高速外部
接晶振,例如8MHz,其可以直接作为选择器的输入,也可以分频后作为选择器输入,PLL表示锁相环,用于倍频,可以选择2-16,通过锁相环寄存器配置,产生的时钟为PLL_CLK

CSS时钟监控系统
一旦HSE失效,则自动切换到SYSCLK=HSI

LSE Os低速的外部时钟
通过外接晶振产生,一般为32.768kHz,用于RTCCLK

RTCCLK还可以来自于HSE的128分频

LSI RC低速内部
由内部的RC振荡器产生,约为40kHz

主要是用于STM32的独立watch dog提供时钟


MCO输出内部时钟引脚PA8
可以来自于系统时钟SYSCLK

可以来自于HSI

可以来自于HSE

可以来自于PLLCLK的2分频

USB时钟
48MHz,可以来自于PLL时钟经过USB分频器,除以1或者1.5

72MHz和48MHz之间的倍数就是1.5

AHB Prescaler AHB预分频器
AHB预分频器的分频因子有9种选择:
1,2,4,8,16,64,128,256,512

分频后产生HCLK这个时钟最高可以到72MHz

APB1 Prescale APB1预分频器
产生PCLK1,用于挂低速外设,例如通用定时器

APB2 Prescale APB2预分频器
产生PCLK2,可以供对于时钟要求高的外设

注意:任何一个外设使用前,必须首先使能其相应的时钟


stm32中的时钟配置RCC
如下图所示,为STM32工程中对于时钟的配置文件

99851e60f018412a8651f4f8bf598a39.png

首先打开寄存器地址名称映射头文件

这个头文件中对于大部分寄存器的映射都会在这里通过一个结构体来定义

4671e13f8dbe4c0e8c1f459c856b6370.png

如下图所示,这个结构体中的成员变量映射了对应的寄存器

78e1d7015a7848bd8b34505eba25d43a.png

对于RCC寄存器的详细描述,可以参考STM32中文参考手册

4a26bce9037041b787657de7edb60174.png


RCC时钟控制寄存器
HSI,HSE,LSI,LSE,PLL这5个时钟源,使用前需要使能,使能后还不稳定,稳定后会产生稳定标志位

30131992d96f4ed9b02432ba835e7ba4.png


RCC时钟配置寄存CFGR

配置选择器,PLL倍频系数,Scaler的分频系数

32dfbfb4fe0941ce94851a80f25423a0.png


35598cb4ab344e148de79574e53e755a.png

RCC外设时钟使能寄存器
AHBENR AHB外设时钟使能寄存器
包括SDIO,FSMC,CRC,FLITF,SRAM,DMA1,DMA2

6bc5947e2ade4e11a3932fa655659f4a.png

2e3c85c1ad1c4c129962e4eede3a4e2c.png

APB2ENR APB2外设时钟使能寄存器
包括ADC3,USART1,TIM8,SIP1,TIM1,ADC2,ADC1,IO ABCDEFG等

cda89437598745288343d4382b0d3eaf.png

d2308d5111c447f5874938378a6f5fb8.png


0768d25641454a7382bbf06dd145f662.png

APB1ENR APB1外设时钟使能寄存器
包括DAC接口,电源接口,备份接口,CAN时钟,USB时钟,I2C时钟,UART2345时钟,SPI23时钟,看门狗时钟,Timer 234567时钟等

56a3d818a8794e08bb27a85a72e85844.png

021834f2395b48cbae24197de9f8abe0.png

bd0a2909dca1438496c594a3f183171e.png

72949a1987ba4e1cb28c4ee51e46b116.png

RCC寄存器的操作
可以通过相关的库函数,对于这些RCC寄存器进行操作

b5a3ccb26dce4dd796b258f4d6b8c43d.png

这些库函数可以分为以下几类:


时钟使能配置

void RCC_LSEConfig(uint8_t RCC_LSE);

void RCC_HCLKConfig(uint32_t RCC_SYSCLK);

void RCC_HSEConfig(uint32_t RCC_HSE);

void RCC_HSICmd(FunctionalState NewState);

void RCC_LSICmd(FunctionalState NewState);

...


时钟来源配置

void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);

void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);

void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource);

分频系数选择配置

void RCC_HCLKConfig(uint32_t RCC_SYSCLK);

void RCC_PCLK1Config(uint32_t RCC_HCLK);

void RCC_PCLK2Config(uint32_t RCC_HCLK);


外设时钟使能

void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);

其他外设时钟配置

void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);

void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);

状态参数获取

void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks);

uint8_t RCC_GetSYSCLKSource(void);

FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);

RCC中断

void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);

ITStatus RCC_GetITStatus(uint8_t RCC_IT);

void RCC_ClearITPendingBit(uint8_t RCC_IT);
————————————————
版权声明:CodeForCoffee

收藏 评论0 发布时间:2022-12-27 18:00

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版