目录
一、架构与对比
二、启动过程
三、供电系统
四、时钟树
一、架构与对比
二、启动过程
启动文件主要完成如下工作,即程序执行过程:
- - 设置堆栈指针 SP = __initial_sp。
- - 设置 PC 指针 = Reset_Handler。
- - 设置中断向量表。
- - 配置系统时钟。
- - 配置外部 SRAM/SDRAM 用于程序变量等数据存储(这是可选的) 。
- - 跳转到 C 库中的 __main ,最终会调用用户程序的 main()函数。
Cortex-M 内核处理器复位后,处于线程模式,指令权限是特权级别(最高级别),堆栈设置为使用主堆栈 MSP。
硬件复位之后,CPU 内的时序逻辑电路首先完成如下两个工作( 程序代码下载到内部 flash 为例,flash首地址 0x0800 0000)
- - 将 0x08000000 位置存放的堆栈栈顶地址存放到 SP 中(MSP)。
- - 将 0x08000004 位置存放的向量地址装入 PC 程序计数器。
- - CPU 从 PC 寄存器指向的物理地址取出第 1 条指令开始执行程序,也就是开始执行复位中断服务程序Reset_Handler。
- - 复位中断服务程序会调用SystemInit()函数来配置系统时钟、配置FMC总线上的外部SRAM/SDRAM,然后跳转到 C 库中__main 函数。由 C 库中的__main 函数完成用户程序的初始化工作(比如:变量赋初值等),最后由__main 函数调用用户写的 main()函数开始执行 C 程序。
三、供电系统
VDD: 用于 I/O 引脚和系统模拟部分供电,比如复位、 电源管理、 振荡器等。
VDDA: 用于 ADC、 DAC、 运放、 比较器和电压基准供电, 这部分供电是独立的。
VREF+, VREF-:用于 ADC 和 DAC 的基准电压, 当使能了 STM32F4 内部的电压基准,将使用内部基准供 VREF+, VREF-。如果没有使能的话,通过外置电压基准提供。
VBAT:当 VDD 不供电的时候, 由 VBAT 为备份域供电。
VDDLDO:电压稳压器供电。
VCAP:数字核心域供电。
VSS:所有电源和模拟稳压器的地端。
四、时钟树
STM3F429 有如下时钟可供使用:
HSI 是内部的高速 RC 振荡器,频率 16MHz,可被用于系统时钟。优势是低成本,无需外部时钟,快速启动(仅需几个微秒),缺点是精度差,即使经过校准。
HSE 是外部的高速振荡器,通过外接时钟源,有源或者无源晶振驱动,时钟范围 4-26MHz。优势是精度高,缺点是增加成本。
LSE 是外部的低速振荡器,通过外接时钟源,有源或者无源晶振驱动,一般接 32.768KHz,主要用于RTC 实时时钟。
LSI 是内部的低速 RC 振荡器,频率约是 32KHz,主要用于独立看门狗和自动唤醒,也可以用于 RTC实时时钟。
系统上电复位后由内部HSI运行,配置完所有的东西后,才会进行驱动系统时钟的运行。
晶振8MHz→主频168MHz:
在 stm32f4xx_hal_conf.h 文件配置 HSE_VALUE
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
SystemInit函数配置了PLL锁相环,实现工作到168MHz