找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3348|回复: 9
收起左侧

STM32启动代码研究

[复制链接]
ID:255072 发表于 2017-12-11 13:09 | 显示全部楼层 |阅读模式

对于熟悉电脑的伙伴们来说,BIOS(那个蓝色的界面)可能不会太陌生吧,这货就是电脑的启动代码。没有BIOS的电脑,那注定是一块板砖!BIOS主要是做一些开机前的准备工作,例如系统时间设定、启动顺序。。。扯远了

    其实电脑本身就是从单片机而来,那么单片机也是有启动代码的,只是我们绝大部分情况 不去关心它。

    启动代码究竟都干了些什么工作,为何需要它?想想你在c语言中用到了什么东西,而这些东西却是拿来就可以用的?堆、栈!没错,就是他们。我们知道堆和栈是内存中划分出的一块区域,那为什么我们没有亲自划分呢,因为启动代码帮了你的忙!!!再想想单片机工作的时候,有哪些配置被我们忽略了,而它却可以用?时钟,就是这货,我们可以不配置时钟,而你发现它竟然有默认值!还是启动代码帮了你

    接下来仔细研究一下stm32的启动代码,首先要知道启动代码藏在哪里:一个叫做startup的汇编文件。启动代码是对硬件的一个最初级的配置,它必须用汇编语言来实现,汇编是真正的硬件编程语言。

    从上到下解读启动代码

1、定义栈大小

2-1G10Q5403H06.png


2、定义堆大小

2-1G10Q54102532.png


3、中断向量地址

2-1G10Q54124512.png

ps:Cortex-M4内核要求内存的第一个地址是栈指针,第二个地址开始为中断向量。而中断向量的第一个必须是复位,因为代码是从上到下执行,开机首先遇到的就是复位


4、复位中断处理函数

2-1G10Q54522512.png

ps1:仔细那看有两个东西需要注意:“SystemInit”这个是时钟初始,“__main”这一句代表跳转到“main”函数。正因为复位这样的写法,所以程序都是从main函数开始执行的

ps2:“SystemInit”具体实现过程在stm32fxxx.c,“__main”也是在某个地方与真正的main关联起来


5、其他中断处理函数

2-1G10Q5454H56.png

ps1:绝大部分中断的实现系统没有给出,等待程序猿去写。但是中断的名字我们都可以看到的,每一个名字都和上面向量表中对应着。我们知道函数名其实就是一个地址,而中断的入口地址是固定的,只要找对名字,那地址也就找对了。

ps2:中断的入口地址由内核和芯片决定,无法更改。因此不要改启动代码中的中断向量表


6、初始化堆、栈

2-1G10Q54613100.png

ps:正因为堆和栈已经被初始化,所以你的C语言才可以顺利的执行


    启动代码是非常关键的,所有的CPU都有启动代码。这里完成了最基本的初始化功能,尤其是中断向量表,程序猿每一个中断函数的名字都要与启动代码中的向量表对应,否则中断是无法进入的。

回复

使用道具 举报

ID:255072 发表于 2017-12-16 17:05 | 显示全部楼层
对于新手来说还是先把51单片机学差不多了再来学习STM32
回复

使用道具 举报

ID:194656 发表于 2017-12-16 22:39 | 显示全部楼层
32对于新手来说还是有点难度啊!!
回复

使用道具 举报

ID:255072 发表于 2017-12-20 17:29 | 显示全部楼层
还是那句话,首先要学习C语言基础,就相当于80%会单片机了,因为现在所有8/16/32位(51系列,MSP430系列,ARM系列)都是使用C语言。
回复

使用道具 举报

ID:264486 发表于 2017-12-20 20:38 | 显示全部楼层
研究研究
回复

使用道具 举报

ID:255072 发表于 2017-12-28 09:52 | 显示全部楼层
建议你现在不要纠结这个问题,刚开始对着手册教程等学习用单片机,各种外设。等你熟了后再去理解它们各自的内核,存储结构之类的。
回复

使用道具 举报

ID:255072 发表于 2018-1-4 11:06 | 显示全部楼层
如果是真 的要学stm32,建议还是从stm32F103开始学吧,资料多,开发板也很多,用的也非常广,学习单片机当然是C语言了,你要是溜,玩c++也行。
回复

使用道具 举报

ID:255072 发表于 2018-1-10 11:33 | 显示全部楼层
单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域的广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的32位300M的高速单片机。
回复

使用道具 举报

ID:168857 发表于 2018-1-10 14:29 | 显示全部楼层
楼主应该是大神,可否建群共同讨论,这样效率更高,诚恳受邀QQ:593976107
回复

使用道具 举报

ID:281751 发表于 2018-3-2 13:47 | 显示全部楼层
謝謝樓主分享 !
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表