STM32F407重要外设学习(基于《野火STM32库开发实战指南》)——01启动文件详解

本文档为记录自己以STM32407为媒介学习关于Cortex-M4内核及其重要外设应用的学习记录

目录

前言

一、启动文件的作用

二、一些汇编指令集

三、启动文件部分代码解释

3.1 栈Stack

3.2 堆Heap

3.3 向量表

3.4 复位程序

3.5 中断服务程序

3.6 用户堆栈初始化

总结


前言

        启动文档解释


一、启动文件的作用

  • 初始化堆栈指针SP;
  • 初始化PC指针,指向复位程序;
  • 初始化中断向量表;
  • 配置系统时钟;
  • 调用C库函数_main初始化用户堆栈;

二、一些汇编指令集

三、启动文件部分代码解释

3.1 栈Stack

  •   栈的作用——局部变量,函数调用,函数形参等开销;
  •   栈不能超过内部SRAM的大小。若程序变量过多,需要适当修改栈的大小;

  ps:若程序出现硬fault(硬件错误)状态时,可以考虑是否栈溢出了。

3.2 堆Heap

  •   堆的作用——用来进行动态内存分配,如函数malloc()申请的内存就在堆上;

3.3 向量表

  • 向量表实际上是一个32位整型数组,一个元素对应一个异常(ESR),数组元素存的即为ESR的入口地址;
  • 向量表在地址空间中的位置可以设置,通过NVIC中的一个重定位寄存器之处向量表的地址;
  • 向量表复位后,重定位寄存器的值为0,故需要在FLASH地址0处必须包含一张向量表,用于初始时的异常分配。

        向量表源码片段:

3.4 复位程序

3.5 中断服务程序

  • 启动文件中已经有空的中断函数,对应的真正的中断服务程序需要在主程序中实现;
  • 若在主程序中开启了某个中断,但并没有编写对应的中断服务函数,则当进入该服务函数时,程序会死在空的中断函数中。

        ps: 这也说明了为什么在写中断函数时,函数名字被限定了~

3.6 用户堆栈初始化


总结

        以上就是今天要讲的内容,本文仅仅简单介绍了STM32F407的启动文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值