STM32学习总结之启动文件

学习目标:

学习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()函数。

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jory&W

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值