打印
[STM32]

不得不知的单片机知识

[复制链接]
1610|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
对我而言|  楼主 | 2017-12-20 09:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
对于熟悉电脑的伙伴们来说,BIOS(那个蓝色的界面)可能不会太陌生吧,这货就是电脑的启动代码。没有BIOS的电脑,那注定是一块板砖!BIOS主要是做一些开机前的准备工作,例如系统时间设定、启动顺序。。。扯远了

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

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

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

    从上到下解读启动代码

1、定义栈大小





2、定义堆大小





3、中断向量地址



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



4、复位中断处理函数



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

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



5、其他中断处理函数



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

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



6、初始化堆、栈



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



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

获取更多学习资料+源码+笔记请加QQ3522655328(点击直接加QQ)

相关帖子

来自 2楼
对我而言|  楼主 | 2018-1-16 08:59 | 只看该作者
更多单片机学习: superedu.com.cn

使用特权

评论回复
板凳
对我而言|  楼主 | 2017-12-20 17:23 | 只看该作者
本帖最后由 对我而言 于 2017-12-27 13:32 编辑

首先要学习C语言基础,就相当于80%会单片机了,因为现在所有8/16/32位(51系列,MSP430系列,ARM系列)都是使用C语言。更多的话可以去这里去了解下superedu.com.cn

使用特权

评论回复
地板
对我而言|  楼主 | 2017-12-25 09:56 | 只看该作者
单片机基本结构
  单片机由运算器、控制器、存储器、输入输出设备构成。

使用特权

评论回复
5
caijie001| | 2017-12-25 10:05 | 只看该作者
比较基本的知识,但是确实不多人去了解

使用特权

评论回复
6
一路向北lm| | 2017-12-28 08:06 | 只看该作者
感谢分享,知识很基础。

使用特权

评论回复
7
mcuzone| | 2017-12-28 12:21 | 只看该作者
这其实也是IDE进化的结果。在C51阶段其实初始化代码都要自己写的,从ARM7开始,IDE就把初始化工作帮你完成了

使用特权

评论回复
8
ifxz0123| | 2018-1-2 09:38 | 只看该作者
赞一个

使用特权

评论回复
9
haibao1213| | 2018-1-3 15:55 | 只看该作者
赞一个。。

使用特权

评论回复
10
cactus0117| | 2018-1-4 16:11 | 只看该作者

使用特权

评论回复
11
对我而言|  楼主 | 2018-1-5 17:08 | 只看该作者
嵌入式操作系统,建议先从单片机做起,了解GPIO、定时器啥的,理解怎么用C语言操作硬件。然后再去学Linux操作系统,shell语法等,然后再买一个ARM开发板(初期买2410足够),学驱动开发啥的,建议去星创客学习。学完了以后,做几个驱动,就可以找工作了。

使用特权

评论回复
12
对我而言|  楼主 | 2018-1-8 11:41 | 只看该作者
嵌入式系统作为除PC端外的另一种系统,应用领域极其广泛,分为单片机、ARM、FPGA、DSP、IC设计、微处理器体系结构几个方面。

使用特权

评论回复
13
gx_huang| | 2018-1-8 12:19 | 只看该作者
其实,PC的BIOS,不仅仅是启动代码,有对所有基础硬件的驱动。

使用特权

评论回复
14
对我而言|  楼主 | 2018-1-12 10:23 | 只看该作者
嵌入式:Linux 开源 ,软硬件相结合,加上物联网、互联网、移动互联网的增加,嵌入式开发也成为现在的主流,智能家居、智能小车、智能农业 都是需要这些开发作为基础的

使用特权

评论回复
15
对我而言|  楼主 | 2018-1-12 10:24 | 只看该作者
嵌入式:Linux 开源 ,软硬件相结合,加上物联网、互联网、移动互联网的增加,嵌入式开发也成为现在的主流,智能家居、智能小车、智能农业 都是需要这些开发作为基础的

使用特权

评论回复
16
liyanshun| | 2018-1-12 20:45 | 只看该作者
熟练的掌握单片机应用像FLUK公司那样一系列的产品就出来了。

使用特权

评论回复
17
一路向北lm| | 2018-1-13 12:27 | 只看该作者
认真看完了,确实不错

使用特权

评论回复
18
alexzhou88| | 2018-1-13 21:35 | 只看该作者
谢谢分享。收藏了

使用特权

评论回复
19
zqx1000| | 2018-4-10 19:33 | 只看该作者
kankan

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

37

帖子

0

粉丝