完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
01
STM32的三种启动模式 STM32有三种启动模式:FLASH启动、SRAM启动和系统存储器启动,通常三种启动方式由外部引脚boot0和boot1的电平决定。每个系列boot0和boot1电平对应的意义可能不同,下表是STM32F4xx系列的启动方式选择 当STM32上电时,无论哪种启动模式,程序都将会从地址0x0000 0000开始执行,三种启动模式只是将各自存储空间映射到地址0x0000 0000。事实上,原存储空间的内容仍然被保留,也就是说从地址0x0000 0000和原存储地址都可以开始访问程序。 1) Flash启动,将Flash地址0x0800 0000映射到0x0000 0000,这样启动以后程序相当于是从0x0800 0000开始的,这是我们最常用的模式; 2) SRAM启动,将SRAM地址0x2000 0000映射到0x0000 0000,这样启动以后程序相当于是从0x2000 0000开始的; 3) 系统存储器启动,将系统存储器地址0x1FFF F000映射到0x0000 0000,这样启动以后就相当于从0x1FFF F000开始执行的,值得注意的是这个系统存储器里面存储的其实是STM32自带的Bootloader代码,其实是一个官方的IAP,它提供了可以通过UART1接口将用户的代码下载到Flash中的功能,下载完以后再切换到从Flash中启动就可以正常运行了。 02 启动文件 STM32同其它单片机和DSP一样,虽然是从main函数开始编程的,其实上电后并不是从main函数开始执行的,在进入main函数之前,STM32的CPU会最先设置SP(栈指针)、PC(程序计数器指针),然后执行“启动文件”,这个启动文件就是工程文件夹中的startup_stm32xxxx.s文件。 启动文件由汇编编写,是系统上电复位后第一个执行的程序。主要做了以下工作: 1、初始化堆栈指针SP=_initial_sp 2、初始化程序计数器指针PC =Reset_Handler 3、初始化中断向量表 4、配置系统时钟 5、调用C库函数__main(__main并不是main函数)初始化用户堆栈,从而最终调用main函数去到C的世界 03 上电启动流程 我们以Flash启动模式为例。上电后,地址0x0800 0000开始的程序被映射到地址0x0000 0000,然后程序从0x0000 0000开始执行。 CPU会从地址0x0000 0000读取32位长度的值,并赋值给栈指针SP;然后从地址0x0000 0004读取32位长度的值复制给程序计数器指针PC,程序将会从PC指针内容处开始执行。 为了验证这一点,我们用在线仿真的方式查看地址0x0000 0000开始的数据: 想了解启动映射过程的朋友可以在这里分别查看地址0x0000 0000和地址0x08000 0000开始的存储区域,会发现两个完全是复制粘贴的关系。 那么由上图可以看出SP=0x20000738,PC=0x08000165,也就是说程序会从地址0x08000165开始执行。 打开map文件(如何生成map文件,公众号“iFTrue未来已来”中有对应的文章讲解),查看0x08000165这个地址处放的是什么程序? 可以看到这里是复位入口地址Reset_Handler,这个入口地址在前面提到的“启动文件”startup_stm32xxxx.s中会有定义。打开工程中的启动文件,找到Reset_Handler的位置: 这段函数将会首先调用SystemInit函数对系统时钟进行初始化配置,这个函数可以在system_stm32fxxx.c中找到。然后会继续调用__main库函数(__main并不是main函数),主要的功能是软件设置SP、加载.data.bss并初始化栈区。 在执行到__main函数的最后,会跳转到mian()函数,这时便来到了我们的C语言环境。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1781 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1085 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1680 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
732浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
596浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
557浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 08:26 , Processed in 0.744020 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号