人生倒计时
-
今日已经过去小时
-
这周已经过去天
-
本月已经过去天
-
今年已经过去个月
关于STM32启动过程,你想知道的都在这里了
STM32启动过程是指系统上电后,从复位中断入口函数开始执行,到调用用户的main函数的这一段过程。STM32启动过程主要包括以下几个步骤:
设置栈顶指针和程序计数器:系统上电后,硬件会根据向量表的地址找到向量表的具体位置,然后根据向量表中的第一个数据,设置栈顶指针SP的值。栈顶指针指向内部SRAM的最高地址,用于存储局部变量、函数调用、函数参数等。然后根据向量表中的第二个数据,设置程序计数器PC的值,即复位中断入口函数的地址。程序计数器指向当前要执行的指令的地址。
初始化系统时钟:根据向量表中的第二个数据,程序跳转到复位中断入口函数Reset_Handler,该函数首先调用SystemInit函数,用于设置系统时钟。系统时钟是指系统内部的时钟源,用于驱动CPU和外设的工作。系统时钟可以选择内部的HSI(高速内部时钟)或外部的HSE(高速外部时钟),也可以通过PLL(锁相环)对时钟进行倍频或分频,以达到不同的频率。
重定位数据段和清除BSS段:SystemInit函数返回后,复位中断入口函数调用__main函数,该函数是系统自带的库函数,用于完成数据段的重定位和清除BSS段的工作。数据段是指已经初始化的全局变量或静态变量,它们在Flash中有初始值,但需要复制到SRAM中才能被程序访问。BSS段是指没有初始化或初始化为0的全局变量或静态变量,它们在Flash中没有初始值,但需要在SRAM中分配空间,并清零。这两个段的重定位和清除是为了让程序能够正确地使用全局变量和静态变量。
调用用户的main函数:__main函数完成数据段的重定位和清除BSS段后,最终会调用用户的main函数,进入到用户程序。main函数是用户编写的程序的入口,通常包含一些初始化和配置的代码,以及一个无限循环的代码,用于实现用户的功能需求。