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.mzph.cn/web/9633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web实时通信的学习之旅:WebSocket入门指南及示例演示

文章目录 WebSocket的特点1、工作原理2、特点3、WebSocket 协议介绍4、安全性 WebSocket的使用一、服务端1、创建实例:创建一个webScoket实例对象1.1、WebSocket.Server(options[,callback])方法中options对象所支持的参数1.2、同样也有一个加密的 wss:/…

C++ NetworkToHostOrder、HostToNetworkOrder 模板函数

其作用类型&#xff1a;ntohl、htonl、ntohs、htons 函数的作用&#xff0c;因为要考虑兼容 int128、int64 等数据类型。 IPV6 肯定是 int128 了&#xff0c;使用这两个函数可以帮助人们计算IPV6的地址范围等。 template <class T> static T …

在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?

在 Hibernate 中&#xff0c;getCurrentSession 和 openSession 是两种不同的方法来获取 Session 对象&#xff0c;它们之间存在一些关键的区别。 事务管理方式&#xff1a; getCurrentSession&#xff1a;它依赖于当前的事务上下文&#xff0c;通常与 Spring 等框架集成&…

报表-设计器的使用

1、设计器目录结构 报表设计器以压缩包的方式提供&#xff0c;解压后&#xff0c;目录结构如下&#xff1a; 目录说明&#xff1a; 1、jdk-17&#xff1a;压缩包中自带的windows平台下的jdk17 2、lite-report&#xff1a;报表文件和数据源配置文件的保存位置 3、lite-repor…

Spring MVC(三) 参数传递

1 Controller到View的参数传递 在Spring MVC中&#xff0c;把值从Controller传递到View共有5中操作方法&#xff0c;分别是。 使用HttpServletRequest或HttpSession。使用ModelAndView。使用Map集合使用Model使用ModelMap 使用HttpServletRequest或HttpSession传值 使用HttpSe…

在AI大模型中全精度和半精度参数是什么意思?

环境&#xff1a; 大模型中 问题描述&#xff1a; 在AI大模型中全精度和半精度参数是什么意思&#xff1f; 解决方案&#xff1a; 在深度学习和高性能计算领域&#xff0c;"全精度"和"半精度"通常指的是模型中使用的数值表示的精度&#xff0c;具体涉…

hadoop学习---基于Sqoop的文件导入导出操作

在本地数据库创建数据库表&#xff1a; create database sqoop_test default character set utf8; use sqoop_test; CREATE TABLE emp ( EMPNO int(4) NOT NULL, ENAME varchar(10), JOB varchar(9), MGR int(4), HIREDATE date, SAL int(7), COMM int(7), DEPTNO int(2), PRI…

eslint关闭的方法总结

package.json关闭eslint 直接注释package.json文件中eslint的配置 "eslintConfig": {"root": true,此项是用来告诉eslint找当前配置文件不能往父级查找"env": {"node": true//此项指定环境的全局变量&#xff0c;下面的配置指定为nod…

Mysql实现双机bin-log热备份

在执行前务必停止对主服务器的mysql数据写入&#xff01;&#xff01;&#xff01; 1.修改主机/etc/my.cnf配置,在mysqld下增加配置&#xff1a; log-bin mysql-bin server-id 1 2.获取MASTER_LOG_FILE、MASTER_LOG_POS信息 登录主机mysql&#xff0c;执行&#xff1a; …

【python基础】python经典题目100题

文章目录 前言初阶题目1.字符串2.列表3.元组4.字典5.运算6.random 模块7.open函数8.time模块时间9.其他 进阶题目 前言 本文主要是python经典题目100题&#xff0c;适合入门的新手。仅作自己学习的记录。 初阶题目 1.字符串 题目1&#xff1a;怎么找出序列中的最⼤最⼩值&am…

STM32使用ESP01S连接阿里云物联网平台

一、ESP01S烧录MQTT固件准备 首先准备好烧录工具&#xff0c;可以从官网上进行下载。 MQTT固件官网网址&#xff1a;AT固件汇总 | 安信可科技 (ai-thinker.com) 进去后如下图界面&#xff0c;向下翻找找到MQTT固件&#xff08;1471&#xff09;下载固件即可。 烧录工具光网地…

windows连接CentOS数据库或Tomcat报错,IP通的,端口正常监听

错误信息 数据库错误&#xff1a; ERROR 2003 (HY000): Cant connect to MySQL server on x.x.x.x (10060) Tomcat访问错误&#xff1a; 响应时间过长 ERR_CONNECTION_TIMED_OUT 基础排查工作 【以下以3306端口为例&#xff0c;对于8080端口来说操作是一样的&#xff0c;只需…

【java毕业设计】基于Spring Boot+vue的网上商城购物系统设计与实现(程序源码)-网上商城购物系统

基于Spring BootVue的网上商城购物系统设计与实现&#xff08;程序源码毕业论文&#xff09; 大家好&#xff0c;今天给大家介绍基于Spring BootVue的网上商城购物系统设计与实现&#xff0c;本论文只截取部分文章重点&#xff0c;文章末尾附有本毕业设计完整源码及论文的获取方…

Oracle闪回数据库【Oracle闪回技术】(二)

理解Oracle闪回级别【Oracle闪回技术】(一)-CSDN博客 Oracle默认是不开启闪回数据库的。如果开启闪回数据库的前提条件是,开启Oracle归档模式并启用闪回恢复区。 因为闪回日志文件存放在闪回恢复区中,如果在RAC环境下,必须将闪回恢复区存储在集群文件或者ASM文件中。 一…

揭秘APP广告变现:轻松赚取额外收入!

在移动应用&#xff08;APP&#xff09;的世界中&#xff0c;变现能力是衡量一个应用成功与否的关键指标之一。无论是个人开发者还是企业团队&#xff0c;如何通过应用创造收入&#xff0c;始终是一个备受关注的话题。今天&#xff0c;我们将深入探讨APP广告变现的路径&#xf…

使用nmcli命令在各Linux系统上统一的配置网络

前言&#xff1a;原文在我的博客网站中&#xff0c;持续更新数通、系统方面的知识&#xff0c;欢迎来访&#xff01; 使用nmcli命令在各Linux系统上统一的配置网络https://myweb.myskillstree.cn/123.html 你是否会遇到在不同的Linux系统中配置网络时&#xff0c;修改的配置文…

Element UI 表单验证详解与实践

Element UI 作为一款流行的Vue.js UI框架&#xff0c;提供了丰富的表单组件和强大的表单验证功能&#xff0c;极大地简化了前端开发中的表单处理流程。本文将深入探讨Element UI的表单验证机制&#xff0c;包括基本的验证规则、自定义验证规则、以及一些高级应用场景&#xff0…

C语言初阶(6) - 指针

目录 1.指针是什么&#xff1f; 2. 指针和指针类型 2.1 指针 - 整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 常量指针和指针常量 (const) 4.1.常量指针 4.2.指针常量 5. 指针运算 5.1 指针-整数 5.2 指针-指针 5.3指针的关系运算 6.…

[openwrt-21.02]MT7981+MT7976 WiFi debug指令

openwrt版本信息 NAME="OpenWrt" VERSION="21.02-SNAPSHOT" ID="openwrt" ID_LIKE="lede openwrt" PRETTY_NAME="OpenWrt 21.02-SNAPSHOT" VERSION_ID="21.02-snapshot" HOME_URL="https://openwrt.org/&qu…