STM32入门周边知识(为什么要装MDK,启动文件是什么,为什么要配置时钟,pack包是什么,51内核与32内核的区别等等)

MDK

MDK与C51共存

在最开始学习51单片机的时候,当时安装keil的时候,认为就是针对于51单片机的写程序的软件。后来学习32发现要安装MDK,MDK和C51安装在一个目录里面就可以直接使用,就产生了为什么两个软件可以共存的疑问。
我们常说的keil其实是Keil uVision
电脑上安装的也是Keil uVision5
在这里插入图片描述
1985年4月,Keil 公司正式成立。2005年10月,Keil 公司被英国的 ARM 公司收购,ARM公司用来开发用于ARM架构的芯片的编译器。现在keil公司也是ARM公司的一部分。Keil其实就是公司的名字

uVision是由keil公司开发的集成开发环境(IDE),可以进行代码编辑,文件管理,程序的编译调试等。
目前uVision的版本有uVision2、uVision3、uVision4、uVision5。我们常说的keil4指的是uVision4,keil5指的是uVision5。
每一个uVision版本下都有4个独立的软件:C51、C251、C166、ARM。
打开公司官网可以看到有四款软件,学习51的时候下载的就是C51,不过大部分人下载的都是盗版的,正版的要钱。学习32的时候下载的就是第一个MDK。
在这里插入图片描述
uVision ARM就是MDK,或者可以称为MDK-ARM。
这一款软件主要支持ARM7,ARM9,Cortex等ARM内核。
uVision C51这款软件主要支持51单片机这类芯片的内核。
uVision C251与uVision C166这两款软件主要支持其他两类内核。

我们右键keil的图标,进入文件所在位置,锁定的是UV4.exe,所有不能误认为UV4文件夹里面就是IDE,就是uVision内核。
在这里插入图片描述

可以认为这是一个启动程序,除去圈起来的ARM和C51,剩下的是一体的,用来启动对应的IDE(集成开发环境)。而真正的基于uVision的集成开发环境我们装了两套,就是ARM一套,用来编译ARM架构的芯片程序,而C51是另一套,用来编译51内核对应的芯片程序。
在这里插入图片描述

MDK:(Microcontroller Development Kit),也称MDK-ARM、KEIL MDK、RealView MDK、KEIL For ARM,都是同一个东西。ARM公司现在统一使用MDK-ARM的称呼,MDK的设备数据库中有很多厂商的芯片,是专为微控制器开发的工具,为满足基于MCU进行嵌入式软件开发的工程师需求而设计,支持ARM7,ARM9,Cortex-M4/M3/M1,Cortex-R0/R3/R4等ARM微控制器内核。
KEIL C51:,亦即PK51,KEIL公司开发的基于uVision IDE,支持绝大部分8051内核的微控制器开发工具。
通过上述大概可以知道,MDK和C51其实是两款软件。
MDK、KEIL C51、KEIL C166、KEIL C251,它们都是KEIL公司品牌下的产品,都基于uVision集成开发环境。
Keil C51使用【ANSI C】编译器。Keil MDK使用【ARM Compiler】编译器。对应的【汇编器】、【链接器】等也不同。 所以才说真正的两款不同的IDE,是在ARM和C51文件夹中。就是在我们下载MDK和C51的时候下载的。而剩下的类似编辑器和引导文件,我们把C51和MDK放在同一个文件夹的时候就只有一份,在第一次下载的时候就下载了,如果放在两个文件夹里就会有两个。
我们打开ARM文件夹,会发现里面有一个ARMCLANG文件夹,而我们知道clang是一款编译器,这就可以确定编译器是在下载MDK的时候才有的。
我们下载C51和下载MDK都是在下载对应的集成开发环境。
在这里插入图片描述

总结:
Keil 软件是一种统称准确来说是Keil uVision,更准确来说是它包含编辑器、编译器、链接器、调试器等众多工具为一体的集成开发环境(IDE)。
Keil C51 和 MDK 是针对不同类型 MCU 的两款集成开发工具。
Keil C51是针对51内核单片机,比如:AT89C51、 STC89C51等。
Keil MDK,也叫MDK-ARM,是针对【ARM内核】单片机,比如:STM32F1、 LPC1788等。
Keil C51 和 Keil MDK 都集成了 uVision 这套开发环境,只是二者略有一些差异。最直观的感受就是界面一样,编辑、工程管理等这些操作一样。
个人理解uVision更像是一个内核,C51和MDK都是在这个内核套上不同的环境。我们选择芯片后就调用了不同的环境,就是调用C51文件夹里面的东西还是ARM里面的东西。
在这里插入图片描述
在这里插入图片描述
这两个文件夹其实就是对应需要调用的文件。
但是需要注意的是:我们有两个基于uVision的环境,分别在两个文件夹里面,分别是ARM和C51,这两个是内核,剩下的是编辑器和引导文件。

为什么要安装MDK

MDK(Microcontroller Development Kit),也称MDK-ARM、KEIL MDK、RealView MDK、KEIL For ARM,都是同一个东西。ARM公司现在统一使用MDK-ARM的称呼,MDK的设备数据库中有很多厂商的芯片,是专为微控制器开发的工具,为满足基于MCU进行嵌入式软件开发的工程师需求而设计,支持ARM7,ARM9,Cortex-M4/M3/M1,Cortex-R0/R3/R4等ARM微控制器内核。
安装MDK一方面是为了安装芯片资料,另一方面也是安装ARM架构芯片的程序编译环境,毕竟C51和ARM架构的编译器,汇编器等等都不同。

启动文件是什么,为什么要添加许多文件

我们创建stm32工程的时候需要先添加许多文件,其中就包括启动文件,那这个启动文件是什么作用呢。
在这里插入图片描述

stm32的程序就是从启动文件开始的
启动文件由汇编编写,是系统上电复位后第一个执行的程序。主要做了以下工作:
1、初始化堆栈指针SP=_initial_sp
2、初始化PC指针=Reset_Handler
3、初始化中断向量表
4、配置系统时钟
5、调用C库函数_main初始化用户堆栈,从而最终调用main函数
其中中断服务函数中有个复位中断,
当32上电复位或按下复位按键后就会进入复位中断函数执行SystemInit函数和mian函数,就是整个程序的入口。
在这里插入图片描述

在这个startup文件夹同一目录下还有2个h文件和1个C文件
stm32f10x.h就是stm32的外设寄存器描述文件,作用就和51单片机的REGX52.H的作用一样,是用来描述STM32有哪些寄存器和他对应的地址的。
system文件是用来配置时钟的。stm32主频72Mhz就是在这个文件中配置的
在这里插入图片描述
stm32是内核加外围的芯片,core文件就是是内核寄存器描述文件,也包括一些内核的配置函数,都是创建工程必备的文件
在这里插入图片描述
以上这些文件都是一些必备的文件,基于寄存器开发的话这写就够了,但是我们大部分时候都是基于库函数开发的,这就只需要添加一些官方的库就可以了。
需要额外说的是,库函数中有一个misc.c的文件是一些杂项,一些内核的库函数,其他的是外设的库函数。
在这里插入图片描述

pack包是什么

pack中包含了芯片的基本信息,MDK从pack中获得芯片的基本信息,那么可能就有疑问了,MDK怎么知道我们有没有pack的,在最开始安装MDK的时候就有一个步骤是,选择MDK的安装路径和pack的安装路径。在这里插入图片描述
我们可以通过网上的别人分享的pack包下载,也可以通过keil直接下载,下图左面就是自己当时学习江科大视频下载的,右面是keil在线下载。
在这里插入图片描述
pack处理包含芯片的基本信息,还包含库函数,但不是所有的芯片包都有自己的库函数,学习时最开始常用的c8t6固件库是做的比较好的,有了pack就可以使用它的库函数,但是有的芯片就没有库函数。最开始学的是手动添加固件库,各种启动文件和外设还有库函数之类的。这时和pack就没什么关系,但是如果不手动添加,就可以在keil里面直接选择所需要的外设,这是就自动配置好了,启动文件,外设和库函数全部都会自动添加。在这里插入图片描述

区别就是自己添加的固件库版本是固定的,而keil里面选择外设直接配置的,是可以联网更新的。

库函数可以一个系列是通用的,一个系列内核规则相同,而且外设全部都声明了,在#include "stm32f10x.h" 源码里面,声明了f10系列所有的io口,打开源码可以看到io口有a到g,而c8t6芯片没有那么多io口,多的就是其他芯片,例如zet6包含的io口。在这里插入图片描述
如果换一个系列的就要换一套库函数了。这里要注意一下,库函数是在一个系列里面通用,而pack包是每个芯片都不同的。

为什么要添加头文件路径

在这里插入图片描述

在建立过程的时候要在魔术棒里的C/C++选项下面的Include Paths下添加一些文件夹,这些文件夹是用来添加头文件路径的,像现在使用的Visual Studio是不需要添加头文件路径的,会自动取当前文件夹下找头文件,找不到的话就去对应的库问价路径下找,但是Keil这款软件比较老,无法自己寻找路径,就需要添加头文件路径,去指定头文件所在路径。

为什么是寄存器配置

之前学习微机原理的时候知道CPU内部有通用寄存器和段寄存器等等一些寄存器,但是学习32的寄存器配置的时候发现有好多寄存器,因为之前学习说过寄存器存在的很少,速度很快,但是现在却出现了很多寄存器。
搜索后发现,其实是内存中有一些存外设地址的内存块,说是寄存器配置,其实配置的还是在内存里面,并不是真正的寄存器。

魔术棒中的define

我们添加的文件中有一个conf文件,它包含了所有库函数的头文件。
在这里插入图片描述
而在stm32f10x.h中包含了此头文件,而且有一个条件编译。那么我们有个宏的话就只需要添加一个头文件就可以使用所有的库函数了。
在我们没看到的其他文件中也有包含了stm32f10x.h的,那么如果没有这个条件编译就无法包含stm32f10x_conf.h,那么如果要使用库函数的时候就会报错。同时我们的主函数最上面也是包含的stm32f10x.h。
在这里插入图片描述
这个define相当于在整个工程中都添加了这个宏,这样就不需要在每个文件中都添加这个宏了。而且有的添加的文件是只读文件,没办法添加宏,但是这里添加的宏同样适用。
在这里插入图片描述

为什么必须先配置时钟

所有寄存器都需要时钟才能配置,寄存器是由D触发器组成的,只有送来了时钟,触发器才能被改写值。我们配置时钟是多少兆赫兹,也就是一秒钟送去或者读取寄存器的电平的次数。相当于读写的频率。由晶振来控制,倍频或者分频。但是主函数的执行就只有晶振一个频率,震一下执行一次。
任何MCU的任何外设都需要有时钟,8051也是如此;STM32为了让用户更好地掌握功耗,对每个外设的时钟都设置了开关,让用户可以精确地控制,关闭不需要的设备,达到节省供电的目的。
ARM的芯片都是这样,外设通常都是给了时钟后,才能设置它的寄存器(即才能使用这个外设)

杂例

51内核与32内核的区别

51单片机:
我们说的51一般是指51系列的单片机,型号有很多,常见的有STC89C51、AT89C51,其中国内用的最多的是STC89C51或STC89C52,之所以说是51单片机,就是使用的51内核的单片机。
在这里插入图片描述
51单片机由一个IP核和片上外设组成,IP核(内核)就是上图中的CPU,片上外设就是上图中的:时钟电路、SFR和RAM、ROM、定时/计数器、并行I/O口、串行I/O口、中断系统。IP核跟外设之间由系统总线连接,且是8bit的,速度有限。

51内核是上个世纪70年代Intel公司设计的,速度只有12M,外设是IC厂商(STC)在内核的基础上添加的,不同的IC厂商会在内核上添加不同的外设,从而设计出各具特色的单片机。这里Intel属于IP核厂商,STC属于IC厂商。我们后面要讲的STM32也一样,ARM属于IP核厂商,ARM给ST授权,ST公司在Cortex-M3内核的基础上设计出STM32单片机。

STM32单片机:
STM32单片机则是ST(意法半导体)公司使用arm公司的cortex-M3为核心生产的32bit系列的单片机,他的内部资源(寄存器和外设功能)较8051要多的多,基本上接近于计算机的CPU了,适用于手机、路由器等等。
在这里插入图片描述

指令集: 指令集主要是指CPU硬件和软件之间的接口描述,它本质上是一段二进制机器码,cpu只能识别机器码,但是机器码是一串无意义的字符串,程序员很难看看懂这些语句,用它来开发软件,所以后面就发明了汇编语言,汇编语言本质上跟机器码一一对应的,现在有很多不同版本的汇编语言,本质上就是有不同的指令集,指令集可以简单的分为复杂指令集和精简指令集。最近比较火的RISC-V,也是指令集的一种。

架构: 架构主要是指某一个处理器所使用的具体指令集,比如说m6ull,他是基于ArmV7架构的,就是指它是使用armV7指令集,在大部分场合,架构等于指令集。
指令集架构是计算机体系架构的一部分。指令集是一个很虚的东西,是一个标准规范。例如我们的交通规则,红灯停、绿灯行、黄灯亮了等—等,只有行人和司机都去遵守这套交通规则我们的交通系统才能有条不紊地运行下去。指令集也一样,芯片工程师在设计CPU时也要以指令集中规定的指令格式为标准实现不同的译码电路来支持指令集各种指令的运行。指令集最终的实现就是微架构,就是CPU内部的各种译码和执行电路。

处理器内核: 是芯片内部的核心单元模块,是在硬件层面按照指令集的设计规范,把它实现出来,可以把内核当作指令集的实物化,但是硬件的设计方案各有不同,(个人理解是,有的方案乘法用乘法器,有的乘法用加法器累加实现)。所以同一个版本的指令集可能也有不同版本的内核,我们经常说的cotex-m3,cotex-m4,cotex-A7等等就是属于内核层面的概念。

我们说使用了不同的内核,可以理解为CPU内部设计不同。不同架构就是使用了不同的指令集,和不同的内核,可以简单理解为,架构不同内核肯定不同,架构相同,内核可能不同。

以上均是个人浅显理解,可能存在存在错误,了解后会及时更新。

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值