| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 嵌入式 -> STM32启动文件startup_stm32f407xx.s -> 正文阅读 |
|
|
[嵌入式]STM32启动文件startup_stm32f407xx.s |
环境:代码由来:STM32CUBEMX-linux版V6.5.0 + STM32Cube_FW_F4_V1.27.0 + Makefile方式 目标SOC:STM32F407ZET6 参考启动文件简介:???????? 在嵌入式系统中,启动文件是整个系统非常关键的部分,它会进行一些底层的初始化。在此阶段,C语言是没法运行的,所以需要用到汇编语言编写的启动文件去构建C语言程序运行的必要环境,然后再跳转到main函数到达C语言的世界。 ????????Makefile工程和KEIL工程下的启动文件内容上会有差异,主要体现在堆栈大小和位置的定义上,Makefile工程的在链接脚本中,而KEIL工程的可以在启动文件中找到。 startup_stm32f407xx.s代码分析
? ? ? ? 上图是startup_stm32f407xx.s启动文件的开头注释,从中看出作了如下几个事情:
继续往下看,
????????.word 指令表示产生32位的值,从注释中可以看出 _sdata, _edata…的意义和定义的位置在链接脚本中,这些变量后面会用到。 Reset_Handler
????????在Reset_Handler上方还有一段注释,这里太长就没有截取出来。大概意思是这部分的代码在芯片复位后,会被调用来执行一些必要的操作,然后再调用main函数。
默认中断服务函数
????????注释说明如果处理器接受到一个出乎意料的中断,将会进入到这个死循环中,即Default_Handler ????????.section .text.Default_Handler表示定义的是.text段中的Default_Handler段,ax表示权限,allocation and execute,表示该节区可分配并且可执行,progbits是type,不深究。 中断向量表?
? ? ? ? 上图为中断向量表部分截图。注释部分,表示中断向量表需要在物理地址0X00000000上,这里可以在编译出的 STM32F407ZET6.map 文件中看出 g_pfnVectors 的起始地址为 0x08000000,刚好为 Flash 的起始地址(定义在链接脚本中),所以的确是在Flash的物理地址0上。 ????????g_pfnVectors后面的程序意思就是以 g_pfnVectors为初始地址,然后依次以字为单位写入相应的数据。 中断服务函数
?????????注释部分,表示为每个异常处理都提供了一个弱属性的函数并将其关联到Default_Handler,也就是默认这个弱函数执行与Default_Handler同样的功能。 ????????如果不重新弱别名,那么就是默认执行Default_Handle,反之执行重写的中断服务函数。 ????????至此,startup_stm32f407xx.s的启动代码大致分析完毕。在重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。然后进入startup_stm32f407xx.s启动文件,所做的重要内容和文件开头注释中所述一致。 |
|
|
| 嵌入式 最新文章 |
| 基于高精度单片机开发红外测温仪方案 |
| 89C51单片机与DAC0832 |
| 基于51单片机宠物自动投料喂食器控制系统仿 |
| 《痞子衡嵌入式半月刊》 第 68 期 |
| 多思计组实验实验七 简单模型机实验 |
| CSC7720 |
| 启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
| STM32初探 |
| STM32 总结 |
| 【STM32】CubeMX例程四---定时器中断(附工 |
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年12日历 | -2025/12/1 3:04:38- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |