STM32入门周边知识(为什么要装MDK,启动文件是什么,为什么要配置时钟等等)

目录

  • MDK
    • MDK与C51共存
    • 为什么要安装MDK
  • 启动文件是什么,为什么要添加许多文件
  • 为什么要添加头文件路径
  • 为什么是寄存器配置
  • 魔术棒中的define
  • 为什么必须先配置时钟
  • 杂例

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文件和1个C文件
stm32f10x.h就是stm32的外设寄存器描述文件,作用就和51单片机的REGX52.H的作用一样,是用来描述STM32有哪些寄存器和他对应的地址的。
system文件是用来配置时钟的。
在这里插入图片描述
core文件是内核描述文件,都是创建工程必备的文件(采用标准库开发的时候)
在这里插入图片描述
以上这些文件都是一些必备的文件,基于寄存器开发的话这写就够了,但是我们大部分时候都是基于库函数开发的,这就只需要添加一些官方的库就可以了。
需要额外说的是,库函数中有一个misc.c的文件是一些杂项,一些内核的库函数,其他的是外设的库函数。
在这里插入图片描述

为什么要添加头文件路径

在这里插入图片描述

在建立过程的时候要在魔术棒里的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内核是上个世纪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内部设计不同,说架构不同,就类似于51单片机CPU和外设在一条系统总线上交互,而32有APB1,APB2,AHB等总线,还有片上外设不同。有时候我也会认为架构和内核是一个东西,统指芯片内部。具体概念并不是很清楚。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/611786.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

队列的实现(使用C语言)

完整代码链接:DataStructure: 基本数据结构的实现。 (gitee.com) 目录 一、队列的概念: 二、队列的实现: 使用链表实现队列: 1.结构体设计: 2.初始化: 3.销毁: 4.入队: 5.…

青动CRM源码搭建/部署/上线/运营/售后/更新

CRM是一款基于thinkphpfastadmin开发的客户管理系统。旨在助力企业销售全流程精细化、数字化管理,全面解决企业销售团队的全流程客户服务难题,帮助企业有效盘 活客户资源、量化销售行为,合理配置资源、建立科学销售体系,提升销售业…

工作中遇见的问题总结

1. 当我执行下面代码的时候,下边的的代码还是会执行 if(name"aaa"){console.log("111");}

普通人可以抓住黄金价格大涨的投资机会吗?

黄金价格的波动对于投资者来说,总是充满了诱惑和挑战。近期,全球经济形势变化多端,地缘政治冲突频发,这些因素无不对黄金市场造成影响,使得黄金价格出现大幅波动。那么,作为普通人,能否抓住黄金…

重生我是嵌入式大能之串口调试UART

什么是串口 串口是一种在数据通讯中广泛使用的通讯接口,通常我们叫做UART (通用异步收发传输器Universal Asynchronous Receiver/Transmitter),其具有数据传输速度稳定、可靠性高、适用范围广等优点。在嵌入式系统中,串口常用于与外部设备进…

文心一言 VS 讯飞星火 VS chatgpt (255)-- 算法导论18.3 1题

一、请说明依次从图18-8(f)中删除C、P和V后的结果。如果要写代码,请用go语言。 文心一言: 首先,让我们明确一点:由于您没有提供具体的图18-8(f)的内容,我只能假设它是一个数据结构(可能是图、树或列表等&…

神经网络与空间变换关系

神经网络的隐藏层实际上就是在进行一次空间变换,隐藏层中神经元的个数就是变换后空间的维度,代表可以升维也可以降维。 不同是 神经网络的一层运算不只有矩阵乘法,还会有一个加法。以及 进行完线性计算后,还要经过非线性的激活函…

Oracle体系结构初探:闪回技术

在Oracle体系结构初探这个专栏中,已经写过了REDO、UNDO等内容。觉得可以开始写下有关备份恢复的内容。闪回技术 — Oracle数据库备份恢复机制的一种。它可以在一定条件下,高效快速的恢复因为逻辑错误(误删误更新等)导致的数据丢失…

Python运维之定时任务模块APScheduler

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 目录 定时任务模块APScheduler 一、安装及基本概念 1.1、APScheduler的安装 1.2、涉及概念 1.3、APScheduler的工作流程​编辑 二、配置调度器 …

26、Qt使用QFontDatabase类加载ttf文件更改图标颜色

一、图标下载 iconfont-阿里巴巴矢量图标库 点击上面的链接,在打开的网页中搜索自己要使用的图标,如:最大化 找到一个自己想用图标,选择“添加入库” 点击“购物车”图标 能看到刚才添加的图标,点击“下载代码”(需要…

Android 屏幕适配全攻略(中)-从九宫格到矢量图,揭秘Android多屏幕适配的正确打开方式

在移动互联网时代,无论是小小的手机屏幕,还是大大的平板显示器,Android 应用都必须做到完美适配,给用户以极佳的体验。本文将剖析 Android 多屏幕适配背后的种种技术细节,为您揭开最佳实践的正确打开方式,让…

教你解决PUBG绝地求生打完一把游戏无法返回大厅的问题

《绝地求生》(PUBG)作为风靡全球的战术竞技大作,凭借其高度还原的战场氛围和扣人心弦的生存挑战吸引了大量游戏玩家。不过,部分玩家在经历了一场紧张激烈的比赛后,遭遇了一个小困扰:游戏未能顺畅过渡到结算…

人大金仓报The connection attempt failed.Reason:Connection reset解决办法

在连接人大京仓数据库 的时候报下面的错误 解决办法: 更换这里的IP地址就行,不要用127.0.0.1,然后就可以了

keil5软件安装教程(MDKv5.39)

keil5软件安装分为三部分: 目录 1.安装mdk 2.激活mdk 3.安装STM32芯片包 1.安装mdk 安装包链接:https://pan.baidu.com/s/1StkkTQ5lmOz_99Qop4l8Gw?pwdrlmc 提取码:rlmc 1、下载keil5的压缩包并解压,鼠标右击【Setup】选…

利用函数视图实现精细化管控:DolphinDB 非标权限管理指南

1. 前言 DolphinDB 提供的用户权限管理功能管控的最小粒度是表级别,无法设置小于表粒度的数据访问权限管控,如限制用户仅能访问表中某些行或某些列的数据。为了满足客户更精细的权限管控需求,我们编写了本教程。 2. 概述 函数视图是封装了…

安卓通信方式简介

目录 一、Binder二、Socket三、Binder与Socket四、Handler 一、Binder Binder作为Android系统提供的一种IPC机制,无论从系统开发还是应用开发,都是Android系统中最重要的组成。 二、Socket Socket通信方式也是C/S架构,比Binder简单很多。在…

数据库开启远程连接

服务器端添加一个允许远程连接的root用户: mysql -u root -p create user root192.168.10.20 identified by admin; //创建一个192.168.10.20地址远程连接的root用户 grant all privileges on *.* to root192.168.10.20; //赋予远程root用户所有的权…

Linux文本处理工具【tr、cut、sort、uniq】

1. tr 命令——替换、压缩、删除 tr (Text Replacer) 命令常用来对来自标准输入的字符进行替换、压缩和删除。 命令格式 :tr [选项]... SET1 [SET2] (SET 是一组字符串,一般都可按照字面含义理解) 选项: -d 删除 -s 压…

01面向类的讲解

指针指向类成员使用 代码&#xff1a; #include<iostream> using namespace std;class Test { public:void func() { cout << "call Test::func" << endl; }static void static_func();int ma;static int mb; //不依赖对象 }; void Test::static…

DDS Blockset Shapes Demo

此示例演示DDS模块集Blockset形状演示应用程序。Shapes Demo是一个常见的数据分发服务&#xff08;DDS&#xff09;应用程序&#xff0c;用于介绍DDS概念&#xff0c;你可以使用它发布和订阅以简单形状&#xff08;圆形、方形和三角形&#xff09;表示的主题&#xff0c;并观察…