历史上的今天
今天是:2025年01月04日(星期六)
2021年01月04日 | STM32时钟系统与时钟启动顺序详解
2021-01-04 来源:eefocus
概念基础:
STM32时钟系统基本一致,不同系列之间有细微差别。此文档主要针对STM32F446的时钟系统进行介绍。
1. 时钟树概述
为何不是采用一个系统时钟?如51
因为STM32本身非常复杂,外设非常多,但是并非所有外设都需要系统时钟这么高的频率,比如看门狗和RTC只需要几十K的时钟即可。同一个电路,时钟越快,功耗越大,同时抗电磁干扰能力也会越弱,所以对于较为复杂的MCU一般采用多时钟源的方法来解决这些问题。主要时钟源:
5个最主要的时钟源:
高速时钟源:HSI、HSE、PLL
低速时钟源:LSI、LSE
其中PLL实际又分为3个时钟源:主PLL、I2S部分专用PLLI2S、SAI部分专用PLLASI。
详解:
LSI是低速内部时钟,RC振荡器,频率为32K,供独立看门狗和自动唤醒单元使用。
LSE是低速外部时钟,接频率为32.768Khz的石英晶体,这个主要是RTC的时钟源。
HSE是高速外部时钟,频率范围为4Mhz-26Mhz,可以直接作为系统时钟或PLL输入。
HSI是高速内部时钟,RC振荡器,频率为16Mhz,可以直接作为系统时钟或PLL输入。
PLL为锁相环倍频输出,STM32F4有三个PLL:
a、 主PLL由HSE或HSI提供时钟信号,并具有两个不同的输出时钟。
第一个输出PLLP用于生成高速的系统时钟(最高180Mhz)
第二个输出PLLQ为48M,用于USB OTG FS时钟,随机数发生器的时钟和SDIO时钟。
b、 第一个专用PLL(PLLSAI)用于生成精确时钟,用作SAI输入时钟。Q是SAI时钟分频系数。P可以生成PLL48CLK用于给USB FS或SDIO提供48M时钟。
c、 第二个专用PLL(PLLI2S)用于生成精准时钟,在I2S和SAI上实现高品质音频性能。R是I2S时钟的分频系数,Q是SAI时钟的分频系数。
2. 常用时钟源选择
看门狗时钟:看门狗时钟只能是低速的LSI时钟,32Khz。
RTC时钟源:可以选择LSI(32Khz)、LSE(32.768Khz)、HSE分频后提供(2-31分频)
系统时钟SYSCLK:可选择HSE、HSI和PLL
USB高速设备会有外部PHY提供60Mhz
NOTE:
在上述的很多时钟输出中,有很多是带使能控制的,例如AHB总线时钟、内核时钟、各种APB1外设、APB2外设等。
APB1是外设低速总线
APB2是外设高速总线
一般时钟总线是设备总线的2倍
时钟主频可以设置为168Mhz,通过设置Over-driver模式可以超频到180Mhz
FLASH Latency 延时配置参考:
3. 时钟源使能和配置
在配置好时钟系统之后,如果我们要使用某些外设,例如GPIO、ADC,还要使能这些外设时钟,如果在使用外设之前没有使能外设时钟,这个外设是不可能正常运行的。
IO引脚复用器和映射
一个GPIO如果可以复用为内置外设的功能引脚,那么这个GOIO作为内置外设使用的时候,就叫做复用。
4. 寄存器配置
RCC_CFGR,时钟配置寄存器

Bit2 bit3代表使用的时钟源,具体可查参考手册,系统刚上电时默认为内部HSI。RCC_PLLCFGR,PLL时钟配置寄存器

上电默认情况为HSI做为主PLL和I2SPLL的时钟入口。RCC_CR,RCC时钟控制寄存器

通过Bit16可以切换为外部晶振。在时钟初始化的时候被调用。时钟切换之后,根据时钟设置逻辑,如果外部晶振使能了,则等待外部晶振正常起震。起震后查看RCC_CFRG寄存器,当前使用的还是HSI。下一步需要判断程序中是否要使用PLL,若使用,则继续进行PLL配置。
配置结束PLL的各种分频后,一块进行寄存器配置。此时再切换到外部HSE工作。
时钟配置过程:
(1)AHB配置预分频,得到HCLK时钟,分频值写入RCC_CFGR bit4-bit7
(2)系统时钟配置 RCC_CFGR bit0-bit1
(3)检查系统时钟状态是否切换成功 RCC_CFGR bit2-bit3
(4)APB1、APB2配置预分频,得到PCLK1、PCLK2时钟RCC_CFGR bit10-bit15
(5)更新系统全局变量SystemCoreClock
5. I2S时钟配置
(1)选择I2S外设的时钟源
(2)配置各项时钟分频系数,一般情况下使用PLLI2SR时钟
(3)计算时钟分频,需要在PLLI2SR上获得需要的48K
下列公式为参考手册提供:
When the master clock is generated (MCKOE in the SPIx_I2SPR register is set):
fS = I2SxCLK / [(16*2)*((2*I2SDIV)+ODD)*8)] when the channel frame is 16-bit wide
fS = I2SxCLK / [(32*2)*((2*I2SDIV)+ODD)*4)] when the channel frame is 32-bit wide
When the master clock is disabled (MCKOE bit cleared):
fS = I2SxCLK / [(16*2)*((2*I2SDIV)+ODD))] when the channel frame is 16-bit wide
fS = I2SxCLK / [(32*2)*((2*I2SDIV)+ODD))] when the channel frame is 32-bit wide
将计算额I2SDIV和奇数值ODD写入相应寄存器。
此例中,I2SxCLK为192MHz,使用48K时可以被整除,时钟准确,但是96K时不能被整除,造成时钟偏移。所以若需要进行I2S时钟动态调节,需要好好计算I2SxCLK。
史海拾趣
|
WINDOWS CE .NET WINDOWS CE .NET是一个功能强大的实时嵌入式操作系统,也是微软第一个能够全面支持中文的WINDOWS CE操作系统,适用于快速构建新一代内存少体积小的智能设备,例如手持式设备、智能电话、机顶盒、零售点设备和显示器等。不仅如此, ...… 查看全部问答> |
|
现在一个设计xc3s400,ise10.1,综合器为SynplifyERROR:$ar:228 - At least one timing constraint is impossible to meet because component delays alone exceed the constraint. A timing constraint summary below shows the failing ...… 查看全部问答> |
|
NMAKE : U1073: don't know how to make 'F:\WINCE420\public\common\sdk\lib\ARMV4I 在编译一个网卡驱动时出现 NMAKE : U1073: don\'t know how to make \'F:\\WINCE420\\public\\common\\sdk\\lib\\ARMV4I\\retail\\ndis.lib\',我到这个目录下找找不到这个文件 SOURCES文件: DM9CE_SOURCENAME=DM9000 DM9CE_TARGET= ...… 查看全部问答> |
|
★★★★★- 诚聘【MSP430】单片机设计工程师 -★★★★★ 诚聘单片机设计工程师: 1,会msp430,有设计经验 2,有msp430 C语言开发经验 3,懂信号处理,会用matlab 4,最好有工作经验1年以上 电话:010-81504648 公司网站:www.safezx.com 注:工作地点北京… 查看全部问答> |
|
你好!我看过一个帖子:\\"请教:这样的波形是怎样编程的呢\\".(2006年6月10日12:37发的帖子) 其中有您的回帖.您给的这个程序(产生PWM波的) #include \\"LF2407Regs.h\\" unsigned int actrb[6] = {0x0c30,0x03c,0x030c,0x03c0,0x00c3,0x0 ...… 查看全部问答> |




