请选择 进入手机版 | 继续访问电脑版

STM32电源管理、复位、时钟

[复制链接]
陈雪霜 发表于 2020-12-31 20:30:52 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
第二篇文章——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 阀值)比力,根据设置可产生外部中断。这一特性可用于执行告急关闭任务。

低功耗模式

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

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


  • 低沉系统时钟;
  • 关闭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复位);
  • 从待机模式中返回。

上图,上拉电阻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.如下图:

备份区域复位

备份区域复位只影响备份区域,它会使备份区域寄存器复位。
当以下事件中之一发生时,产生备份区域复位:


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

STM32F10X的时钟树:

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 函数

  1. 默认设置下,尺度外设库是使用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寄存器。

上式中,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
  

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

来源:https://blog.csdn.net/u012864480/article/details/85965498
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )