STM32学习总结之启动文件

  • Post author:
  • Post category:其他




学习目标:

学习STM32单片机之学习总结


  • 掌握 STM32 基础知识



学习内容:

  1. 学习新建工程之启动文件

    用KEIL5 新建一个工程,把工程放在一个事先建好的文件夹内,工程命名为REG 后保存。然后在工程目录下添加

    启动文件:startup_stm32f10x_hd.s

    ,该文件可以从KEIL5 安装目录找到,也可以从ST 库里面找到,然后把启动文件添加到工程里面。


    启动文件很重要

    单片机运行前,需要检查硬件,启动硬件使硬件唤醒。

    启动文件的作用:

    STM32 的启动文件主要实现了:1、设置初始SP 。2、设置初始PC=Reset_Handler3、设置向量表入口地址,并初始化向量表。4、调用库函数SystemInit,把系统时钟配置成72M,SystemInit 在库文件system_stm32f10.c 定义。5、跳转到标号_mian,最终来到C 的世界。

    该启动文件中有重要的十行代码

    1 ; Reset handler

    2 Reset_Handler PROC

    3 EXPORT Reset_Handler [WEAK]

    4 IMPORT __main

    5 IMPORT SystemInit

    6 LDR R0, =SystemInit

    7 BLX R0

    8 LDR R0, =__main

    9 BX R0

    10 ENDP

第一行是程序注释,在

汇编

里面

注释

用的是**“;”**,跟C 语言不一样。

第二行是定义了一个子程序:Reset_Handler

第三行EXPORT 表示Reset_Handler 这个子程序可供其他模块调用。

第四行和第五行IMPORT 说明SystemInit 和__main 这两个标号在其他文件,在链接的时候需要到其他文件去寻找。

//SystemInit 在库文件system_stm32f10x.c 实现,用来初始化STM32 的一系列时钟,把系统时钟设置为72MHZ。STM32 的时钟需要经过一系列的配置才能达到稳定运行的状态。

//__main 其实不是我们定义的,当编译器编译时,只要遇到这个标号就会定义这个函数,该函数的主要功能是:负责初始化栈、堆,配置系统环境,并在最后跳转到用户自定义的main 函数,从此来到C 的世界。

第六行把SystemInit 的地址加载到寄存器R0。

第七行程序跳转到R0 中的地址执行程序,之后系统的时钟就被设置成72MHZ。

第八行把_main 的地址加载到寄存器R0。

第九行程序跳转到R0 中的地址执行程序,执行完毕之后就去到我们熟知的C 世界。

第十行表示子程序的结束。

//系统时钟分为内部时钟LSI和外部时钟LSE



学习总结:

总结下就是,Reset_Handler 这个函数执行了两个函数调用,一个是SystemInit,把系统时钟设置成72M,令一个是__main,初始化好系统环境,最终调用C 的main,从此去到C 的世界。

_main函数由编译器生成,负责初始化栈、堆等,并在最后跳转到用户自定义的main()函数。



版权声明:本文为weixin_52135350原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。