stm32之RCC寄存器学习

RCC(Reset Clock Controller) —— 复位与时钟控制

一、复位

STM32F10xxx支持三种复位形式,分别为系统复位、上电复位和备份区域复位。

系统复位:除了时钟控制器的RCC_CSR寄存器中的复位标志位和备份区域中的寄存器以外,系统
复位将复位所有寄存器至它们的复位状态。

电源复位:将复位除了备份区域外的所有寄存器。

备份区域复位:备份区域拥有两个专门的复位,它们只影响备份区域。

二、时钟

有四种时钟:高速外部时钟信号(HSE)—— HSE外部晶体/陶瓷谐振器 、HSE用户外部时钟

      高速内部时钟信号(HSI)—— 由内部8MHz的RC振荡器产生

      低速外部时钟信号(LSE)—— 32.768kHz的低速外部晶体或陶瓷谐振器

      低速内部时钟信号(LSI)—— LSI时钟频率大约40kHz(在30kHz和60kHz之间)

时钟的输出:微控制器允许输出时钟信号到外部MCO引脚。 可以时钟配置寄存器来选择输出的时钟。

其中:

PLLMUL 用于设置 STM32 的 PLLCLK, STM32 支持 2~16 倍频设置。我们常用
的是 8M 外部晶振+9 倍频设置,刚好得到 72Mhz 的 PLLCLK。

SW 是 STM32 的 SYSCLK(系统时钟)切换开关,从上图可以看出, SYSCLK 的
来源可以是 3个:HSI、PLLCLK和 HSE。

CSS是时钟安全系统,可以通过软件被激活。一旦其被激活,时钟监测器将在HSE振荡器启动延迟后被
使能,并在HSE时钟关闭后关闭 。

三、时钟启动过程

1、开机或复位时使用内部时钟
2、用软件进行切换,尝试开启外部时钟
3、如果开启成功,则使用外部时钟,否则使用内部

四、配置时钟的步骤

1、APB1、APB2的外设接口复位结束(即RESET),关闭APB1、APB2的外设时钟

  打开内部8MHz振荡器,复位RCC->CFGR中的SW[1:0]、HPRE[3:0]、PRE1[2:0]、PRE2[2:0]、ADCPRE[2:0]、MCO[2:0]

  复位RCC->CR中的HSEON、CSSON、PLLON、HSEBYP

  复位RCC->CFGR中的PLLSRC、PLLXTPRE、PLLMUL[3:0]USBPRE

  关闭RCC->CIR中的所有中断

2、使能外部高速时钟晶振HSE

3、等待外部高速时钟晶振工作稳定

4、设置AHB时钟的预分频(在这之前要先执行FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); FLASH_SetLatency(FLASH))

5、设置APB1时钟的预分频

6、设置APB2时钟的预分频

7、设置PLL的时钟源以及PLL的倍频数,然后使能PLL

8、等待PLL工作稳定

9、选择SYSCLK的时钟源

10、判断PLL是否是系统时钟(若选择SYSCLK的时钟源是PLL的话)

11、打开要使用的外设时钟

时间: 2024-10-12 19:08:25

stm32之RCC寄存器学习的相关文章

stm32之RCC

stm32时钟系统的意义: 1.电源的开关作用,达到低功耗效果: 2.调节时钟的速度: 对于每个外设,都要设置设置,stm32的时钟系统为了更低功耗: STM32时钟系统框图分析: 时钟源: 时钟是STM32的脉搏,是驱动源.使用任何一个外设都必须打开相应的时钟.这样的好处就是,如果不是用一个外设的时候,就把它的时钟关掉,从而可以降低系统的功耗,达到节能,实现低功耗的效果: stm32的时钟可以有以下4个时钟源提供: 1.HSI:高速内部时钟信号stm32单片机内带的时钟(8M频率),缺点是精度

stm32和cortex M3学习内核简单总结

1.stm32综述 2.寄存器组 3.操作模式和特权级别 4.存储器映射 5.中断和异常 6.其他 Stm32综述 这可以说是我第一款认真学习的单片机了,学完这个就要开启我通往arm9的大门了,接下来把我学到的东西做一个系统的概述: 上图是stm32的系统结构. 使用哈弗体系结构,取指和取数据分离, ICODE指令总线连接到flash闪存指令存储区,这个存储区的地址在0x00000000-0x1FFFFFFF之间,负责取指操作. DCODE数据总线负责在0x00000000-0x1FFFFFFF

STM32 BKP备份寄存器介绍

1.  BKP可以用来保存数据 BKP中包括了42个16位的寄存器,共可保存84字节的内容,它们由VBAT的供电来维挂. 2.  BKP内保存的数据可以被毁灭(如果有人希望恶意得到这些数据的话,令其丢失比保护数据更重要).STM32提供了一种称之为TAMPER的机制来完成.中文译为“侵入检测”,这需要占用一个外部引脚(PC13). 3.  如果不用侵入检测功能,那么这个外部引脚可以用作RTC校准功能,这个稍后再研究. 4.  当有系统复位/电源复位/待机模式下被唤醒这三种情况时,BKP中的值不会

OV Camera AE相关的寄存器学习配置记录

自动AEC相关的寄存器配置的原理如上图.主要设置如下: {0x3a0f, 0x40},    {0x3a10, 0x38},    {0x3a1b, 0x48},    {0x3a1e, 0x30},    {0x3a11, 0x90},    {0x3a1f, 0x10}, band_step60 = preview_sysclk * 100/preview_HTS * 100/120; OV5640_write_i2c(0x3a0a, (band_step60 >> 8)); OV5640

汇编之寄存器学习

一般寄存器:AX.BX.CX.DX AX:累积暂存器,BX:基底暂存器,CX:计数暂存器,DX:资料暂存器 索引暂存器:SI.DI SI:来源索引暂存器,DI:目的索引暂存器 堆叠.基底暂存器:SP.BP SP:堆叠指标暂存器,BP:基底指标暂存器 EAX.ECX.EDX.EBX:為ax,bx,cx,dx的延伸,各為32位元 ESI.EDI.ESP.EBP:為si,di,sp,bp的延伸,32位元 eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言

STM32先设置寄存器还是先使能时钟

http://zhidao.baidu.com/link?url=gdVNuIgLOJcV37QzbCx0IrFip5pskiPQDWpoZayr_xBEe120p4d_iWtrfDl1d4tSFaHnQxF5gvjgy7lkPIkKA_

一步步学习操作系统(2)——在STM32上实现一个可动态加载kernel的"my-boot"

如果要做嵌入式Linux,我们首先要在板子上烧写的往往不是kernel,而是u-boot,这时需要烧写工具帮忙.当u-boot烧写成功后,我们就可以用u-boot附带的网络功能来烧写kernel了.每当板子上电时,u-boot一般会被加载到内存的前半段,如果我们的kernel之前就已经被烧写到开发板了,那么u-boot会加载kernel到内存的后半段并跳转到kernel的起始地址处执行(或者直接跳转到kernel的起始地址处执行,如果kernel可以直接在flash上执行的话.) 如上图所示,绿

STM32学习笔记6(TIM通用模块生成PWM)

1.     TIMER输出PWM基本概念   脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术.简单一点,就是对脉冲宽度的控制.一般用来控制步进电机的速度等等. STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出. 1.1   PWM输出模式 S

4.RCC外设的学习和理解

RCC时钟模块并不好理解,初次接触我也是一头雾水,而且我真正掌握它的时候也比较晚,是我在学习用寄存器控制开发板时才真正了解他的运行原理和规律,但我为什么重新修订后却放在了前列,因为这是整个嵌入式的基础之一,初学者是比较难,但是我还是希望最好能够掌握,因为实时性对于嵌入式系统很重要,而基础正是要了解从系统时钟到你选定的每一个模块它的时钟频率,理解这个模块对于学习以后所有模块都很有用,闲话不多说,进入正题: 初看此图是不是感觉太复杂了,事实上我第一次看这张图的时候也是的,完全理不清结构,但是下面我带