欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

STM32电源管理、复位、时钟

程序员文章站 2022-09-21 15:47:19
第二篇文章——STM32电源、复位、时钟电源管理电源电压调节器可编程电压监测器(PVD: Programmable voltage detector )低功耗模式复位Cortex-M3的复位信号STM32F10的复位信号系统复位软件复位低功耗管理复位电源复位上电/掉电复位备份区域复位时钟HSE(高速外部时钟信号)外部时钟源(HSE旁路)外部晶体/陶瓷谐振器(HSE晶体)HSI时钟PLLLSE时钟L......

电源管理

电源

电源框图,如下:
STM32电源管理、复位、时钟
STM32的工作电压Vdd为2.0~3.6V,通过内置的电压调节器提供所需的1.8V电源。Vdd与1.8V的供电区域如上图所示。Vss表示工作电压Vdd的地。

Vdda 和Vssa从Vdd和Vss中独立开来,是为了获得更少干扰的电源供这部分模拟电路使用。它们在芯片外部还是与Vdd和Vss相连接的。

外部参考电压Vref+和Vref-是为了使ADC获得更好的精度,由用户提供的独立的外部参考电压。如果封装中没有这两个引脚,他们在芯片内部与ADC的电源Vdda和地Vssa相联。

Vbat的供电区域除上图所示外,PC13至PC15也由Vbat供电。

如果Vdd电压正常,后备供电区域将由Vdd供电,此时内部模拟开关连接到Vdd。当低电压检测器将检测到Vdd掉电时,掉电复位模块中的掉电复位功能将内部模拟开关切换到Vbat,如果Vbat连接了电池或其他电源,则可以保存住备份寄存器的内容、维持RTC运行等功能。

具体是由Vbat还是Vdd供电,PC13~PC15的功能使不一样的。具体见《STM32中文参考手册 4.12》。

电压调节器

电压调节器有三种不同的工作模式:

  • 运转模式:供1.8V给CPU核心、SRAM、核内数字外设。复位后默认模式。正常功耗。
  • 停止模式:只给寄存器和SRAM供电,保存其内容。低功耗。
  • 待机模式:停止供电。寄存器、SRAM内容丢失。

可编程电压监测器(PVD: Programmable voltage detector )

PVD监控Vdd的电压,与可编程的电压比较值(PVD 阀值)比较,根据设置可产生外部中断。这一特性可用于执行紧急关闭任务。
STM32电源管理、复位、时钟

低功耗模式

在系统或电源复位后,微控制器处于运行状态。当CPU不需继续运行时,可以利用多种低功耗模式来节省功耗。STM32F10xxx有三种低功耗模式,如下表:
STM32电源管理、复位、时钟

如果想在运行模式下,想降低功耗,可通过下列方式:

  • 降低系统时钟;
  • 关闭APB和AHB总线上未被使用的外设时钟。

复位

Cortex-M3的复位信号

CM3提供三种复位信号:

  • 上电复位(nPORESET):复位处理器核心和调试系统;
  • 系统复位(nSYSRESET):只复位处理器核心、NVIC(与调试系统相关的除外)、MPU,不复位调试系统;
  • 测试复位(nTRST):只复位调试系统。

STM32F10的复位信号

STM32F10xxx支持三种复位形式:系统复位、上电复位、备份区域复位。

系统复位

除了RCC_CSR寄存器中的复位标志位(用来识别复位事件来源)和备份区域中的寄存器外,系统复位将复位所有的寄存器至它们的复位状态。
当发生以下任一事件时,产生一个系统复位:

  • NRST引脚上的低电平(外部复位);
  • 窗口看门狗计数终止(WWDG复位);
  • 独立看门狗计数终止(IWDG复位);
  • 软件复位(SW复位);
  • 低功耗管理复位。

软件复位

将SYSRESETREQ位置1,可实现软件复位。

低功耗管理复位

通过设置用户选择字节中的nRST_STDBY=1或nRST_STOP=1,在进入待机模式或停止模式时产生低功耗管理复位,而不是进入相应低功耗模式。

电源复位

电源复位将复位除了备份区域外的所有寄存器。
当以下事件之一发生时,产生电源复位:

  • 上电/掉电复位(POR/PDR复位);
  • 从待机模式中返回。

STM32电源管理、复位、时钟
上图,上拉电阻Rpu式System reset信号默认为高电平,非有效复位信号。当NRST拉低时,System reset有效,产生复位信号。另外,当WWDG reset/IWDG reset/Power reset/Software reset/Low-power management reset其中之一(或门)产生低电平复位信号时,Pulse generator产生至少20us的复位低电平,三级管导通,System reset有效,同时NRST也置位低。

上电/掉电复位

系统上电时,如果Vdd或Vdda大于Vpor,将在延迟Trettempo产生上电复位。如果Vdd/Vdda下降到Vpdr以下时,产生掉电复位。

Vpor和Vpdr是不一样的,Vpor-Vpdr=40mv.如下图:
STM32电源管理、复位、时钟

备份区域复位

备份区域复位只影响备份区域,它会使备份区域寄存器复位。

当以下事件中之一发生时,产生备份区域复位:

  • 备份区域软件复位:设置RCC_BDCR的BDRST位;
  • 在Vdd和Vbat都掉电的前提下,Vdd或Vbat上电将引发备份区域复位。

时钟

STM32F10X的时钟树:

STM32电源管理、复位、时钟
SYSCLK可以从HIS、PLLCLK、HSE三者之一选择。PLLCLK的源为HSI/2、HSE或HSE/2二者之一,然后经过PLL倍频器产生的。SYSCLK最大值为72MHz(当HIS/2作为PLL时钟源时,SYSCLK最大为64MHz),经过AHB预分频器分频及各子系统分频器分频后,提供各种时钟信号供芯片子系统使用。

Cortex System timer(SysTick)的外部时钟可从HCLK/8或HCLK中选择。

FCLK acts as Cortex-M3’s free-running clock,意思是与CM3核的运行时钟HCLK独立开来,即使HCLK停止了,FCLK也可独立运行。

LSE供RTC使用,LSI可供RTC和独立看门狗使用。

HSE(高速外部时钟信号)

HSE可由两种时钟源产生:外部时钟或晶体/陶瓷振荡器,它们的连接方式如下:

外部时钟源(HSE旁路)

当使用外部时钟源时,时钟源的最高频率最高可达25MHz,输入到SOC_IN脚,OSC_OUT脚悬空。通过时钟控制寄存器的HSEBYP和HSEON位来选择此模式。

外部晶体/陶瓷谐振器(HSE晶体)

外部谐振器的频率为4~16MHz。RCC_CR:HSERDY、RCC_CIR、RCC_CR:HSEON为相关寄存器位。

HSI时钟

HSI时钟信号由内部8MHz的RC振荡器产生,能够在不需要任何外部器件的条件下提供系统时钟,但其时钟频率精度较差。
HSICAL[7:0],HSITRIM[4:0]为HSI校准相关寄存器。HSIRDY、HSION为HSI工作相关寄存器。

PLL

内部PLL可用来倍频HIS RC或HSE晶体的输出时钟。PLL的设置(选择HSI振荡器除2或HSE晶体为PLL的输入时钟,选择倍频因子)必须在其被激活前完成。一旦PLL被激活,这些参数就不能被改动了。
PLL准备就绪后可产生中断,PLL中断在时钟中断寄存器里设置。

LSE时钟

LSE时钟源也与HSE时钟源一样,可从外部时钟或LSE晶体中选择,二者都须为32.768kHz。LSE为RTC或其他定时功能提供时钟源。

使用LSE晶体时,相关寄存器为RCC_BDCR:LSEON、RCC_BDCR:LSERDY、时钟中断寄存器相关位。

使用外部时钟源时,相关寄存器为RCC_BDCR:LSEBYP和LSEON。

LSI时钟

LSI由RC振荡器产生,大约为40kHz,可以在停机和待机模式下保持运行,为独立看门狗和自动唤醒单元提供时钟。
LSI的相关寄存器为:RCC_CSR:LSION、RCC_CSR:LSIRDY、RCC_CIR相关位。

系统时钟(SYSCLK)的选择

系统复位后,HSI振荡器被选为系统时钟,只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或PLL稳定),才会切换到目标时钟源上。
相关寄存器:RCC_CR

RTC时钟

RTCCLK的时钟源可由HSE/128、LSE或LSI提供,通过RCC_BDCR: RTCSEL[1:0]来选择,除非备份域复位,此选择不能被改变。

看门狗时钟

IWDG的时钟由LSI振荡器提供。

STM32F4XX时钟配置

配置简述

上电时先使用内部时钟(HIS)运行程序,然后在程序里面配置使用外部时钟(HSE)作PLL的时钟源,并设置HSE分频系数M、PLL倍频系数N、PLL分频系数P后得到所需的PLL时钟SYSCLK, 系统时钟HCLK、APB1、APB2。

使用标准外设库设置PLL时钟。

以STM32F427芯片为例。

上电时,进入复位中断,执行Startup_stm32f427x.s:Reset_Handler中断例程。

Reset_Handler调用system_stm32f4xx.c:SystemInit进行时钟初始化,SystemInit函数里面设置使用HSI作为系统时钟,disable HSE 和 PLL(HSE和PLL只能在disable状态下才能进行设置),然后调用system_stm32f4xx.c:SetSysClock设置PLL时钟。

SetSysClock 函数

默认配置下,标准外设库是使用HSE作为PLL时钟源,对PLL进行倍频分频后得到所需的HSE/APB1/APB2等时钟。
 
HCLK/ APB1/ APB2分频系数
STM32F427 HCLK的分频为1,即不对PLL输出的时钟SYSCLK进行分频,HCLK=SYSCLK。
 
APB2的分频为2,即APB2 CLK = SYSCLK/2.
 
APB1的分频为4,即APB1 CLK = SYSCLK/4.

PLL系数设置

PLL配置在RCC_PLLCFGR寄存器。
STM32电源管理、复位、时钟
上式中,PLL clock input即HSE时钟,一般为外部晶振的时钟。
PLL general clock output即SYSCLK。PLLN, PLLM, PLLP, PLLQ为真实的分频or倍频系数,非寄存器里的编码。

外设标准库中,PLLN, PLLM, PLLP, PLLQ在system_stm32f4xx.c中进行宏定义,定义的数值为真实的分频/倍频数,非寄存器里的编码值。

  • PLLM: PLL clock input首先进行PLLM(M = [2, 63])分频,分频后的时钟作为VCO的输入。必须保证分频后时钟在1MHz~2MHz之间,一般设置为2MHz.

  • PLLN: PLL clock input M分频后,进行N(N = [192, 432])倍频。N倍频后的时钟必须在100MHz~432MHz直接,为VCO的输出时钟(VCO clock)。

  • PLLP: VCO输出时钟再进行P(P = 2, 4, 6, 8)分频,作为系统时钟SYSCLK. SYSCLK不能超过180MHz(超频模式下为180MHz,正常模式下最大为168MHz).

  • PLLQ: VCO clock Q分频后,作另一路时钟,供USB OTG FS, SDIO, RNG clock output。

SystemCoreClock 、SystemCoreClockUpdate、RCC_GetClocksFreq

要得到当前的系统时钟(HCLK),可以将SystemCoreClock初始化为正确的HCLK值,直接调用SystemCoreClock变量即可。

或者,设置好正确的HSE_VALUE(stm32f4xx.h或IAR中设置),调用SystemCoreClockUpdate得到正确的SystemCoreClock。

或者,设置好正确的HSE_VALUE(stm32f4xx.h或IAR中设置),调用RCC_GetClocksFreq(stm32f4xx_rcc.c中)得到SYSCLK, HCLK, ABP1CLK, APB2CLK。

Reference

  1. DM00031020_RM0090 F4 参考手册 Rev4.pdf
  2. DM00031020 RM0090 F4 Reference Manual Rev11.pdf
  3. STM32F4x StdPeriph Library

本文地址:https://blog.csdn.net/u012864480/article/details/85965498