最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255

第14章       STM32F407的电源,复位和时钟系统

本章教程继续为大家讲解学习STM32F407的必备知识点电源,复位和时钟系统。掌握这三方面的知识点对后面的学习大有裨益。

目录

第14章       STM32F407的电源,复位和时钟系统

14.1 初学者重要提示

14.2 电源

14.2.1 电源供电

14.2.2 电源去耦电容的选择

14.3 硬件复位

14.3.1 上电复位和手动复位

14.3.2 复位序列

14.4 软件复位

14.5 RCC时钟控制

14.5.1 HSE和LSE硬件设计

14.5.2 时钟配置

14.6 总结


14.1 初学者重要提示

  1. 电源管理部分涉及到的各种低功耗方式会在后面章节中为大家讲解,当前阶段仅需了解低功耗属于电源管理部分即可。

14.2 电源

电源是系统稳定运行的根本,主要分为以下几个知识点,电源供电、供电监控、电源管理和低功耗。当前阶段主要了解电源供电和硬件上电时序。

14.2.1 电源供电

学习STM32F407的电源供电,往往被一堆电源标识Vdd,Vdda,Vcap,Vss等搞迷糊,这些标识整明白了,电源供电部分也就理解了,首先看下面的框图:

这些常用标识的解释如下:

对于电源供电部分了解了这些知识点就够用。

14.2.2 电源去耦电容的选择

每个电源对 (VDD/VSS, VDDA/VSSA ...)必须使用下述的滤波陶瓷电容去耦。这些电容必须尽量靠近芯片引脚,以确保器件正常工作。不建议去掉滤波电容来降低PCB 尺寸或成本,这可能导致器件工作不正常。

14.3 硬件复位

所有数字计算机系统都是由某种形式的震荡时钟电路驱动的。这种电路被称为系统的“脉搏”,是系统正确运行的关键。如果振荡器失灵,系统将完全无法运行,如果振荡器运行不规律,系统执行的所有与时间有关的计算都会有误差。

所有微控制器的启动流程都不通用。由于硬件的复杂性,必须运行一段由厂家定义的短小的“复位程序”来使硬件处于一种正确的状态,然后再开始执行用户程序。运行这个复位程序需要时间并且要求微控制器的振荡器已经运行。

当系统由可靠的电源供电时,一旦通电,电源迅速地达到额定输出电压,一旦断电,电源迅速地下降到0V,并且在接通的时候,电压不会降低。这时能够可靠地使用基于一个电容和一个电阻的低成本硬件复位。这种形式的复位电路称为阻容复位。

如果电源不够可靠,而涉及安全性,这种简单的阻容解决方案就不合适了。

14.3.1 上电复位和手动复位

STM32F407开发板的硬件复位原理图如下:

  • STM32这款CPU的复位引脚是低电平有效,即NRST为低电平时,CPU处于复位状态。
  • R84和C53组成简单的RC复位电路。当系统上电瞬间,C114电容两端电压可以认为是0,CPU处于复位状态。3.3V电源通过R84给C53充电,当C53的电压升到CPU的高电平门槛电压时,CPU退出复位状态转入运行状态。
  • 在设计电路时,需要选择适当的R值和C值,以保证NRST低电平持续时间满足CPU复位最小脉宽的要求。
  • 当按下S4轻触开关时,C53两端被短路接地,可实现手动复位CPU。

注,根据需要,大家也可以使用STM32F407 NRST引脚的内部上拉:

http://www.armbbs.cn/forum.php?mod=viewthread&tid=93144

14.3.2 复位序列

前面第11章的13.3.1小节讲解了复位系列的相关知识,再结合本章节的上电复位和下电复位,大家会对其有一个较全面的认识,更多复位序列的知识直接看13.3.1小节即可。

14.4 软件复位

除了上电和手动复位,程序设计设置中还经常要用到软件复位,即调用一条函数就可以实现复位功能。此函数已经由CMSIS软件包中的core_cm4.h文件提供,函数如下:

/**\brief   System Reset\details Initiates a system reset request to reset the MCU.*/
__STATIC_INLINE void __NVIC_SystemReset(void)
{__DSB();                                  /* Ensure all outstanding memory accesses includedbuffered write are completed before reset */SCB->AIRCR  = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos)    |(SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |SCB_AIRCR_SYSRESETREQ_Msk    );        /* Keep priority group unchanged */__DSB();                                                         /* Ensure completion of memory access */for(;;)                                                          /* wait until reset */{__NOP();}
}

软件复位反映到实际硬件上,就是给硬件复位部分发一个复位信号:

14.5 RCC时钟控制

STM32F407有如下六种时钟可供使用:

  • HSI (High-speed internal oscillator) :

HSI是内部的高速RC振荡器,频率16MHz,可被用于系统时钟。优势是低成本,无需外部时钟,快速启动(仅需几个微秒),缺点是精度差,即使经过校准。

  • HSE (High-speed external oscillator):

HSE是外部的高速振荡器,通过外接时钟源,有源或者无源晶振驱动,时钟范围4-26MHz。优势是精度高,缺点是增加成本。

  • LSE (Low-speed external oscillator)

LSE是外部的低速振荡器,通过外接时钟源,有源或者无源晶振驱动,一般接32.768KHz,主要用于RTC实时时钟。

  • LSI (Low-speed internal oscillator)

LSI是内部的低速RC振荡器,频率约是32KHz,主要用于独立看门狗和自动唤醒,也可以用于RTC实时时钟。

通过下面的时钟树再进一步的认识这几个时钟:

14.5.1 HSE和LSE硬件设计

  • HSE时钟

当前V5开发板是用的25MHz晶振为HSE提供时钟,硬件设计如下:

晶振和负载电容需要尽可能近地靠近F4的晶振引脚,以减小输出失真和启动稳定时间。负载电容值必须根据选定的晶振进行调节。

对于C46和C47,我们推荐使用高质量陶瓷电容,这种电容是设计用于需要高频率的场合,并且可以满足晶体或谐振器的需求。C46和C47通常具有相同的值。

这里再额外补充一个知识点,HSE旁路时钟和外置晶振区别:当前V5板子是采用的外置晶振模式,高速外部 (HSE) 时钟可以使用一个4到26MHz 的晶振 / 陶瓷谐振振荡器产生:

而bypass 旁路的意思就是不使用它,绕过它。具体到HSE旁路的话,用户直接提供4-26MHz的时钟源即可,可以使用有源晶振或者FPGA提供时钟等方式:

  • LSE时钟

当前V5开发板是用的32768Hz晶振为LSE提供时钟,硬件设计如下:

STM32的LSE晶振起振难(又称RTC起振)是老毛病了,选取晶振和配套电容比较讲究,最好按照ST提供的厂家和配套电容选取:http://www.armbbs.cn/forum.php?mod=viewthread&tid=87673 。

14.5.2 时钟配置

STM32F4开发板使用的外部晶振频率是25MHz,下面分步说明如何让其通过这个频率工作到168MHz的主频。

  • 第1步:在stm32f4xx_hal_conf.h文件配置HSE_VALUE

配置的大小要跟板子的实际晶振大小匹配。

#if !defined  (HSE_VALUE)
#define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
  • 第2步:系统上电后,在启动文件startup_stm32f429xx.s的复位中断服务程序里面会调用函数SystemInit。
Reset_Handler    PROCEXPORT  Reset_Handler                    [WEAK]IMPORT  SystemInitIMPORT  __mainLDR     R0, =SystemInitBLX     R0LDR     R0, =__mainBX      R0ENDP

以往STM32F1和STM32F4系列都会在函数SystemInit里面配置PLL锁相环,使用了HAL后,需要在main函数里面配置。当前SystemInit函数实现的功能如下:

1.    /**
2.      * @brief  Setup the microcontroller system
3.      *         Initialize the FPU setting, vector table location and External memory
4.      *         configuration.
5.      * @param  None
6.      * @retval None
7.      */
8.    void SystemInit(void)
9.    {
10.      /* FPU settings ------------------------------------------------------------*/
11.      #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
12.        SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */
13.      #endif
14.      /* Reset the RCC clock configuration to the default reset state ------------*/
15.      /* Set HSION bit */
16.      RCC->CR |= (uint32_t)0x00000001;
17.
18.      /* Reset CFGR register */
19.      RCC->CFGR = 0x00000000;
20.
21.      /* Reset HSEON, CSSON and PLLON bits */
22.      RCC->CR &= (uint32_t)0xFEF6FFFF;
23.
24.      /* Reset PLLCFGR register */
25.      RCC->PLLCFGR = 0x24003010;
26.
27.      /* Reset HSEBYP bit */
28.      RCC->CR &= (uint32_t)0xFFFBFFFF;
29.
30.      /* Disable all interrupts */
31.      RCC->CIR = 0x00000000;
32.
33.    #if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
34.      SystemInit_ExtMemCtl();
35.    #endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */
36.
37.      /* Configure the Vector Table location add offset address ------------------*/
38.    #ifdef VECT_TAB_SRAM
39.      SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
40.    #else
41.      SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
42.    #endif
43.    }

第12行:使能FPU单元。

第16 – 31行:复位RCC相关寄存器。

第69 – 73行:设置中断向量表的位置。

  • 第3步:在main函数的外设驱动初始化函数里面完成时钟初始化,主要是PLL锁相环,让芯片最终工作到168MHz。

14.6 总结

本章节就为大家讲解这么多,本章节的知识点相对比较多,比较杂,不容易一下子都掌握了。随着后面章节的进行,还会深入的讲解这些知识点。

【STM32F407开发板用户手册】第14章 STM32F407的电源,复位和时钟系统相关推荐

  1. 【STM32F407开发板用户手册】第19章 STM32F407的GPIO应用之按键FIFO

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第19章       STM32F407的GPIO应用之按键FIF ...

  2. 【STM32F407开发板用户手册】第26章 STM32F407的定时器应用之TIM1-TIM14的中断实现

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第26章       STM32F407的定时器应用之TIM1-T ...

  3. 【STM32F407开发板用户手册】第27章 STM32F407的定时器应用之TIM1-TIM14的PWM实现

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第27章       STM32F407的定时器应用之TIM1-T ...

  4. 【STM32F407开发板用户手册】第35章 STM32F407的FSMC总线应用之驱动AD7606(8通道同步采样, 16bit, 正负10V)

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第35章       STM32F407的FSMC总线应用之驱动A ...

  5. 【STM32F407开发板用户手册】第1章   初学STM32F407的准备工作

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第1章   初学STM32F407的准备工作 俗话说万事开头难,学 ...

  6. 【STM32F407开发板用户手册】第7章 STM32F407下载和调试方法(IAR8)

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第7章   STM32F407下载和调试方法(IAR8) 本章教程 ...

  7. 【STM32F429开发板用户手册】第33章 STM32F429的SPI总线应用之驱动DAC8563(双通道,16bit分辨率,正负10V)

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第33章       STM32F429的SPI总线应用之驱动DA ...

  8. 【STM32F429开发板用户手册】第34章 STM32F429的SPI总线应用之驱动DAC8501(双路输出,16bit分辨率,0-5V)

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第34章       STM32F429的SPI总线应用之驱动DA ...

  9. 【STM32F429开发板用户手册】第35章 STM32F429的FMC总线应用之驱动AD7606(8通道同步采样, 16bit, 正负10V)

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第35章       STM32F429的FMC总线应用之驱动AD ...

  10. 【STM32F429开发板用户手册】第46章 STM32F429的DMA2D应用之刷色块,位图和Alpha混合

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第46章       STM32F429的DMA2D应用之刷色块, ...

最新文章

  1. python爬取微博评论_用 python 爬取微博评论并手动分词制作词云
  2. poj Going from u to v or from v to u? 强联通缩点+拓扑排序(或搜索)
  3. ES6的Promise -- 逻辑执行的顺序
  4. 2021-08-01
  5. java学习(六)多线程 中
  6. coding.net及git的使用方式
  7. Apache详细的安装和配置
  8. 2019川大计算机在福建录取分数线,电子科技大学录取分数线2019(在各省市录取数据)...
  9. 腾讯云 + picgo图床功能
  10. dw相对路径怎么改_Dreamweaver绝对路径和相对路径
  11. DOORS 和Reqtify — 需求管理和需求追溯工具
  12. linux ping结果中mdev,ping之mdev值
  13. 加载PNG图片的处理方式
  14. uni-app 在mac电脑连接安卓手机进行真机调试
  15. layui table点击tr更改当前行颜色
  16. 经济基础知识(初级)【16】
  17. 圣诞节计算机老师贺卡祝福语,给老师的圣诞节贺卡祝福语
  18. centos 7和redhat 7的区别及如何安装
  19. SqlServer 获取当年时间的时间戳
  20. 华硕win10U盘重装系统进入pe

热门文章

  1. 信息化案例:国家电投
  2. javascript 图像二值化处理
  3. 详谈APP移动端 - 加壳与脱壳
  4. AHCI驱动下载与手动安装图解
  5. mysql如何批量添加数据_mysql如何大批量插入数据 mysql大批量插入数据4种方法
  6. java 双三次线性插值_双线性及双三次插值
  7. 基于机器视觉技术的表面缺陷检测技术综述
  8. vue axios封装及使用
  9. 如何避免IE浏览器自动升级到版本11
  10. 搜索引擎为什么不收录原创文章