STM32(M4)入门: 概述、keil5安装与模板建立(价值 3w + 的嵌入式开发指南)

news2025/4/18 19:47:43

前言:本教程内容源自信盈达教培资料,价值3w,使用的是信盈达的405开发版,涵盖面很广,流程清晰,学完保证能从新手入门到小高手,软件方面可以无基础学习,硬件学习支持两种模式:一是可以自己买一个405的核心板直接连杜邦线到模块就可以学习了,本教程循环递进,一次不会使用到很多模块,可以不用担心杜邦线太乱,所以不用使用面包板。二:需要一点硬件基础,根据原理图画板,如果很多人不会后续会考虑单独出一篇嘉立创的画图教程。教程配套原理图与接线配置将在 GPIO 章节呈现。有什么疑问多评论交流。

一、嵌入式系统的概念

嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪的专用计算机系统,严格满足功能、可靠性、成本、体积、功耗等要求。

  • 概念理解:与通用计算机不同,嵌入式系统专注特定场景。如智能门锁控制系统,聚焦身份识别与开关控制,兼顾成本、体积与可靠性。
  • 应用领域:工业控制、智能家居、汽车电子、医疗设备等。如工业自动化生产线监控、汽车发动机控制等

二、常见处理器

嵌入式领域处理器多样,按性能与应用场景可分为:

  • 8 位处理器:8051(教学为主)、AVR/PIC/STM8(简单系统适用)。
  • 16 位处理器:MSP430(超低功耗,智能手环等续航敏感设备)。
  • 32 位处理器:ARM 占据 80% 以上市场(手机、工业机器人等)。
  • 专用处理器:DSP(数字信号与音视频处理)、FPGA(灵活可编程,高速数据采集)。

三、ARM 及其处理器简介

1. ARM 简介

ARM(Advanced RISC Machine)是一家微处理器行业的知名企业,该企业设计了大量高性能、廉价、低功耗的 RISC(精简指令集计算机)处理器。ARM 公司只负责处理器的设计,并不生产芯片,而是将处理器的技术授权给世界上许多半导体公司,如 ST(意法半导体)、三星、高通等,并为这些公司提供技术服务。凡是采用 ARM 内核设计的芯片均可称为 ARM 处理器。

2. 典型 ARM 处理器系列

ARM7 系列

ARM7 系列是早期的 ARM 处理器,具有低功耗、低成本的特点,适用于对性能要求不高的嵌入式系统。例如,一些早期的电子词典、简单的工业控制器等可能会使用 ARM7 处理器。

ARM9 系列

ARM9 系列在性能上比 ARM7 有了显著提升,支持更多的功能和更高的时钟频率。它常用于工业控制、网络设备等领域,如一些小型的网络路由器可能会采用 ARM9 处理器。

ARM11 系列

ARM11 系列进一步提高了性能和功能,在智能手机、平板电脑等移动设备的早期发展阶段有较多应用。例如,一些早期的 Android 手机就使用了 ARM11 处理器。

Cortex - A 系列

Cortex - A 系列主要用于高性能应用,如智能手机、平板电脑、智能电视等。以 Cortex - A8 和 Cortex - A9 为例,它们具有较高的主频和强大的计算能力,可以运行复杂的操作系统和应用程序。

Cortex - R 系列

Cortex - R 系列侧重于实时应用,如汽车电子、工业控制等对实时性要求很高的领域。例如,在汽车的发动机控制系统中,需要实时处理各种传感器的数据,并及时做出响应,Cortex - R4 处理器可以满足这种实时性要求。

Cortex - M 系列

Cortex - M 系列针对低成本、低功耗的嵌入式应用,如智能家居设备、可穿戴设备等。其中,Cortex - M0、M3、M4、M7 各有特点。Cortex - M0 是低成本、低功耗的入门级产品;Cortex - M3 性能适中,应用广泛;Cortex - M4 集成了单周期 DSP 指令和 FPU(浮点单元),提升了计算能力;Cortex - M7 则是高性能版本,适用于对性能要求较高的嵌入式系统。

一、家族标识:区分 32 位与 8 位阵营

  • STM32:代表 32 位 MCU/MPU(微控制器 / 微处理器),适用于高性能、多任务的嵌入式场景,如工业控制、智能家居中枢等。
  • STM8:代表 8 位 MCU,常用于对成本、功耗敏感且功能需求相对简单的场景,如简单传感器节点、低端家电控制。

二、特定功能:定位芯片系列特性

该字段为 3 位数字(如 051、103 等),依据产品系列划分,不同数字对应不同特性:

  • STM32 系列
    • 051:入门级,适合学习与简单应用;
    • 103:基础型,经典且应用广泛;
    • 303:带 DSP 和模拟外设,适用于信号处理场景;
    • 407:高性能(集成 DSP 和 FPU),满足复杂计算需求;
    • 152:超低功耗,适合电池供电设备。
  • STM8 系列
    • 103:主流型,平衡性能与成本;
    • L31:低端汽车级,满足汽车电子特定需求。

三、闪存容量:直观了解存储能力

通过数字或字母标识(单位:Kbytes),快速定位芯片存储容量:

  • 数字标识:如 0 → 1KB1 → 2KB2 → 4KB,依此类推,最大到 9 → 72KB
  • 字母标识A → 96 或 128KBB → 128KBZ → 192KBC → 256KBD → 384KBE → 512KBF → 768KBG → 1024KBH → 1536KBJ → 2048KB(部分仅针对 STM8A)。

四、封装形式:匹配硬件设计需求

不同字母对应不同封装,影响芯片的物理形态与焊接方式:

  • B:Plastic DIP(塑料双列直插,适合手工焊接与调试);
  • D:Ceramic DIP(陶瓷双列直插,耐高温);
  • G:Ceramic QFP(陶瓷方形扁平,高密度封装);
  • H:LFBGA/TFBGA(薄型 / 微型球栅阵列,节省 PCB 空间);
  • M:Plastic SO(塑料小外形,常见于小规模电路);
  • P:TSSOP(薄型缩小型,兼顾空间与引脚密度);
  • Q:Plastic QFP(塑料方形扁平,性价比高)。

五、固件版税:明确特殊功能授权

  • U:Universal(不用于生产,如样品、开发工具);
  • V:MP3 解码器(集成 MP3 解码功能);
  • W:MP3 编码器(支持 MP3 编码操作);
  • J:IS2T JAVA(特定 Java 功能,适用于相关应用开发)。

六、选项代码:定制化配置标识

通过代码组合表示特殊配置,例如:

  • xTR:No RTC(无实时时钟,仅 STM8L);
  • Dxx:BOR OFF(电源复位功能关闭,分标准或特殊配置);
  • Sxx:BOR OFF with Boot I2CS(特殊引导配置,用于特定启动场景);
  • bxx:BOR ON(电源复位功能开启,带标准配置)。

七、引脚数:适配电路设计规模

不同字母对应引脚数量,决定芯片的接口丰富度与应用场景:

  • D:140 引脚(适合高集成度、多外设场景);
  • C:48 或 49 引脚(常见于中等规模应用);
  • U:63 引脚(特定系列的标准配置);
  • Y:20 引脚(仅 STM8,适合极简设计);
  • A:169 引脚(高端型号,支持大量外设与接口)。

八、温度范围:适应不同工作环境

  • 6 和 A:-40℃ 到 +85℃(常规工业级温度范围);
  • 7 和 B:-40℃ 到 +105℃(适用于稍高温环境);
  • 3 和 C:-40℃ 到 +125℃(工业高温场景);
  • D:-40℃ 到 +150℃(极端高温环境,如特殊工业设备)。

四、STM32F4 介绍

1. 概述

ST(意法半导体)推出了以基于 ARM® Cortex™ - M4 为内核的 STM32F4 系列高性能微控制器。该系列采用了 90 纳米的 NVM 工艺和 ART(自适应实时存储器加速器,Adaptive Real - Time Memory Accelerator™),具有出色的性能和丰富的外设资源。

2. 性能优势

自适应实时加速器(ART)

自适应实时加速器能够完全释放 Cortex - M4 内核的性能。当 CPU 工作于所有允许的频率(≤168MHz)时,在闪存中运行的程序,可以达到相当于零等待周期的性能,大大提升了程序执行的效率,使得 STM32F4 系列可达到最大 168MHz。例如,在一个需要快速处理大量数据的应用中,ART 加速器可以让程序更快速地从闪存中读取指令和数据,提高系统的响应速度。

计算能力提升

STM32F4 系列微控制器集成了单周期 DSP 指令和 FPU(浮点单元),提升了计算能力,可以进行一些复杂的计算和控制。在电机控制应用中,需要进行大量的数学运算来精确控制电机的转速和扭矩,STM32F4 的 DSP 指令和 FPU 可以大大提高计算效率,实现更精确的控制。

3. 产品特性

兼容性

STM32F4 系列兼容于 STM32F2 系列产品,便于 ST 的用户扩展或升级产品,而保持硬件的兼容能力。这意味着用户在开发新产品时,如果之前使用过 STM32F2 系列,只需要对软件进行适当的修改,就可以轻松迁移到 STM32F4 系列,降低了开发成本和时间。

先进技术和工艺

  • 存储器加速器:自适应实时加速器(ART Accelerator™ ),让程序在闪存中的运行速度更快。
  • 多重 AHB 总线矩阵和多通道 DMA:支持程序执行和数据传输并行处理,数据传输速率非常快。例如,在进行大数据量的存储或传输时,DMA 可以直接在内存和外设之间进行数据传输,而不需要 CPU 的干预,大大提高了数据传输的效率。
  • 90nm 工艺:使得芯片的功耗更低,集成度更高。

高性能

  • 210DMIPS@168MHz:在 168MHz 的主频下能达到 210DMIPS 的处理能力,性能强劲。
  • 程序运行效率:由于采用了 ST 的 ART 加速器,程序从 FLASH 运行相当于 0 等待。
  • 更多的存储器:多达 1MB FLASH(将来 ST 计划推出 2MB FLASH 的 STM32F4),192Kb SRAM(128KB 在总线矩阵上,64KB 在专为 CPU 使用的数据总线上),可以满足更复杂的程序和数据存储需求。
  • 高级外设与 STM32F2 兼容:如 USB OTG 高速 480Mbit/s、IEEE1588、以太网 MAC 10/100、PWM 高速定时器(168MHz 最大频率)、加密 / 哈希硬件处理器(32 位随机数发生器(RNG))、带有日历功能的 32 位 RTC(<1 μA 的实时时钟,1 秒精度)。

更多的提升

  • 低电压:1.8V 到 3.6V VDD,在某些封装上,可降低至 1.7V,适应不同的电源环境。
  • 全双工 I2S:可用于音频数据的传输。例如,在一个音频播放系统中,I2S 接口可以方便地与音频编解码器进行连接,实现高质量的音频传输。
  • 12 位 ADC:0.41us 转换 / 2.4Msps(7.2Msps 在交替模式),能快速、准确地采集模拟信号。在一个温度采集系统中,ADC 可以将温度传感器输出的模拟信号转换为数字信号,供处理器进行处理。
  • 高速 USART:可达 10.5Mbits/s,方便与其他设备进行高速数据通信。
  • 高速 SPI:可达 37.5Mbits/s,常用于与外部设备如 SPI 接口的传感器、存储器等进行高速数据传输。
  • Camera 接口:可达 54M 字节 /s,可用于连接摄像头进行图像采集。

五、软件的安装

1. 获取安装包

软件的安装包可以去官网下载最新的软件安装包,也可以使用已有的安装包(链接: https://pan.baidu.com/s/1pDtqZbdj_TkMgAyve-FwcQ 提取码: xydc),就是版本没那么新,但是旧版的会适合学习一点,学习资料比较多而且又不容易出现新版的设置问题。例如,要安装 Keil MDK 软件,可以到 Keil 官方网站(Keil 下载)上下载适合自己操作系统的版本。

2. 软件安装

这里我们双击 MDK517 之后,安装程序,按引导操作一步一步做,来到安装路径选择界面。

路径建议选非系统盘(仅改盘符),更改盘符即可,不要随便更改路径,不然容易出现很多不必要的麻烦,因为跟着教程没有师傅可以随时指导,这样后续学习起来就会卡在软件下载部分了,软件下载不是难事,没必要过多纠结。

电子邮箱之类的信息随便填写即可,因为我们不需要去注册也可以使用。

出现相应界面之后只需要玩手机等待安装完成就可以了。

3. 安装芯片驱动

芯片驱动的安装路径会自动选择到软件安装的路径的,所以我们什么都不用管,只需要双击下面图片的 2 个安装包后一直点下一步就好了。例如,安装 STM32F4 系列芯片的驱动,安装过程会比较简单,按照提示操作就可以了。

4. 软件解码

以管理员身份运行 Keil5 软件。一定要以管理员。鼠标右键。

然后在启动的软件中点击左上角的File点击license Management。

进入到license Management界面后,如果没有解码是看不到 ID code 的。所以需要解码。

解码首先需要打开软件安装包中的 Keygen 软件(这里记得先关声音,会很吵,当然你好奇,喜欢听歌也可以听听)。

接下来的操作有点复杂,需要仔细一点操作,操作①首先 要把CID复制到软件中,②选择 Target 为 ARM,③点击 Generate 生成 code,④将生成的 code 复制到keil 5的ID Code位置⑤点击 Add LIC添加就完成了。

5. 下载器驱动

在这里下载运行代码我们使用的是下载器,因为下载器下载代码的速度相对较快而且方便,可以去买一个ST-Link,比较便宜一点。在安装包中找到安装路径下的指定位置,根据电脑选择驱动

现在一般都是 64 位的,不知道的话可以跟着操作做,知道的直接往后看就可以了,

1.打开系统设置。

2.选择系统

3.下拉找到系统信息

4.在设备规格中查看

选择好操作系统后双击安装就可以了。比如我们使用 ST-Link下载器,就需要安装对应的ST-Link 驱动。

6. 安装 CH340 驱动

首先找到图片路径下的文件,双击然后点击安装就可以了,显示预安装成功就代表没问题了。CH340 驱动CH340 是 USB 转串口芯片,实现接口转换,让设备经 USB 完成串口通信。在后面的语言模块和wifi模块中会使用到,现在先不安装也可以。

六、工程模板的建立

1. 文件准备

新的文件建议放在桌面,里面存放全部的工程文件,工程文件不用hal库,本次教程是库函数,不会有很大的内存,可以放心放到桌面,方便后续的查找

系统函数库和启动文件已经放在了keil5安装包的压缩中了,直接拿来用就可以了,这里不用教学,因为都是自带的文件,这里新手不要自己去下载,弄不好会比较麻烦,用户自定义文件我们先创建,之后我们自定义的文件都是放在里面。

这些3种文件都是会被分为头文件.h和源文件.c的,一般情况下我们会对这些文件进行分开存在,方便我们查看,但是移植很不方便,还有一种直接把.c和. h放在一起,这样移植会很方便,但是加头文件就比较麻烦,各有所长,这里我们使用定义 inc 和 src 文件夹。

例如,系统函数库文件可能会放在 src 文件夹下的一个子文件夹中,而对应的头文件则放在 inc 文件夹下的相应子文件夹中。

2. 创建工程

都准备好了之后,我们就开始正式创建一个工程。也是我们迈向嵌入式软件工程师的第一步,梦开始的地方。

打开Keil ,选择左上角的Project,点击 New Project 创建一个工程。

保存选择存放路径和工程名称,这里每个人都有每个人的习惯,我们学习的话跟着步骤操作即可。后面创建工程基本就都是复制粘贴了,工程文件复制就可以了,都很少自己创建工程了,除非是教学需要.......

接下来是选择芯片的型号,我们这次教程用到的是 STM32F405RGT6的芯片型号,选他。这里要下好芯片驱动才会有,你发现你没有肯定是你芯片驱动没下好,往上滑重新看看。

这里是询问你是否选择系统提供的启动文件,不必理会,直接关掉就可以了。

3. 配置工程

设置工程中文件的路径

打开三个小方块

在 Keil 中,需要设置工程中各个文件的路径,让编译器能够找到相应的文件。例如,要将系统函数库文件和启动文件的路径添加到工程中。

添加对应的文件

将准备好的源文件添加到工程中,而头文件是使用加载的方式,不需要手动添加。比如将 main.c 文件添加到工程中,编译器会根据头文件的包含语句自动找到相应的头文件。

设置输出位置,点击魔法棒

指定编译后生成的文件(如 hex 文件)的存放位置,方便后续下载和使用。

定义固件库的宏和添加头文件加载路径

定义固件库的宏(USE_STDPERIPH_DRIVER,STM32F40_41xxx)和添加头文件加载路径,让编译器能够正确识别和使用固件库。

修改下载方式

这个根据自己的情况而定,我们使用的是 STLink。

设置好了之后选择下载之后复位和运行,这样就不用下载完代码再按复位了。要是不选的话你会发现你的程序一直没法跑起来,大多数都是因为没设置,所以每次都要手动复位。

全部设置完成点击 OK。

4. Main 函数

创建一个文件后点击保存改名成 main.c

然后在里面添加如下代码:

#include "stm32f4xx.h"

int main() {

    while (1) {

    }
}

在文件里面右键可以出现添加头文件的提示。

点击编译如果是 0 Error 0 Warning 就代表着工程没有问题。

下载器连接方式

根据下载器的线选择链接

  • VCC —— 3.3V
  • SWD —— DIO
  • CLK —— CLK
  • GND —— GND

通过以上步骤,你已经对 STM32(M4)有了一个初步的了解,并完成了开发环境的搭建和工程模板的建立。接下来,你可以基于这个基础,进一步学习和开发更复杂的应用程序。希望这篇文章能帮助你顺利入门 STM32(M4)开发!

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

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

相关文章

采用若依vue 快速开发系统功能模块

文章目录 运行若依项目 科室管理科室查询-后端代码实现科室查询-前端代码实现科室名称状态搜索科室删除-后端代码实现科室删除-前端代码实现科室新增-后端代码实现科室新增-前端代码实现科室修改-后端代码实现前端代码实现角色权限实现 运行若依项目 运行redis 创建数据库 修改…

HTML:表格数据展示区

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>人员信息表</title><link rel"styl…

Oracle测试题目及笔记(单选)

所有题目来自于互联网搜索 当 Oracle 服务器启动时&#xff0c;下列哪种文件不是必须的&#xff08;D&#xff09;。 A&#xff0e;数据文件 B&#xff0e;控制文件 C&#xff0e;日志文件 D&#xff0e;归档日志文件 数据文件、日志文件-在数据库的打开阶段使用 控制文件-在数…

Jmeter创建使用变量——能够递增递减的计数器

Jmeter创建使用变量——能够递增递减的计数器 如下图所示&#xff0c;创建一个 取值需限定为0 2 4这三个值内的变量。 Increment&#xff1a;每次迭代后 递增的值&#xff0c;给计数器增加的值 Maximum value&#xff1a;计数器的最大值&#xff0c;如果超过最大值&#xff0…

数据结构之BFS广度优先算法(腐烂的苹果)

队列这个数据结构在很多场景下都有使用&#xff0c;比如在实现二叉树的层序遍历&#xff0c;floodfill问题(等等未完成)中&#xff0c;都需要借助队列的先进先出特性&#xff0c;下面给出这几个问题的解法 经典的二叉树的层序遍历 算法图示&#xff0c;以下图所示的二叉树为例…

火车头采集动态加载Ajax数据(无分页瀑布流网站)

为了先填充好数据在上线&#xff0c;在本地搭建了一个网站&#xff0c;并用火车头采集数据填充到里面。 开始很上手&#xff0c;因为找的网站的分类中是有分页的。很快捷的找到页面标识。 但是问题来了&#xff0c;如今很多网站都是采用的Ajax加载数据&#xff0c;根本没有分…

Node.js模块化与npm

目录 一、模块化简介 二、CommonJS 规范 1. 基本语法 2. 导出模块 3. 导入模块 三、ECMAScript 标准&#xff08;ESM&#xff09; 1. 启用 ESM 一、默认导出与导入 1. 基本语法 2. 默认导出&#xff08;每个模块仅一个&#xff09; 3. 默认导入 二、命名导出与导入…

nginx中的代理缓存

1.缓存存放路径 对key取哈希值之后&#xff0c;设置cache内容&#xff0c;然后得到的哈希值的倒数第一位作为第一个子目录&#xff0c;倒数第三位和倒数第二位组成的字符串作为第二个子目录&#xff0c;如图。 proxy_cache_path /xxxx/ levels1:2 2.文件名哈希值

【前端vue生成二维码和条形码——MQ】

前端vue生成二维码和条形码——MQ 前端vue生成二维码和条形码——MQ一、安装所需要的库1、安装qrcode2、安装jsbarcode 二、使用步骤1、二维码生成2、条形码生成 至此&#xff0c;大功告成&#xff01; 前端vue生成二维码和条形码——MQ 一、安装所需要的库 1、安装qrcode 1…

flutter 桌面应用之窗口自定义

在开发桌面软件的时候我们经常需要配置软件的窗口的大小以及位置 我们有两个框架选择:window_manager和bitsdojo_window 对比bitsdojo_window 特性bitsdojo_windowwindow_manager自定义标题栏✅ 支持❌ 不支持控制窗口行为&#xff08;大小/位置&#xff09;✅&#xff08;基本…

华为OD机试真题——MELON的难题(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析&#xff1b; 并提供Java、python、JavaScript、C、C语言、GO六种语言的最佳实现方式&#xff01; 2025华为OD真题目录全流程解析/备考攻略/经验分享 华为OD机试真题《MELON的…

【C++】深入浅出之继承

目录 继承的概念及定义继承的定义继承方式和访问限定符protected与private的区别 默认继承方式继承类模板基类和派生类对象赋值兼容转换继承中的作⽤域(隐藏关系)相关面试题⭐ 派生类的默认成员函数⭐构造函数拷贝构造赋值重载析构函数 继承与友元继承与静态成员继承的方式菱形…

在 macOS 上切换默认 Java 版本

下载javasdk 打开android studio -> setting -> build.execution,dep -> build tools -> gradle -> Gradle JDK -> download JDK… 点击下载&#xff0c;就下载到了 ~/Library/Java/JavaVirtualMachines/ 安装 jenv brew install jenv将 jenv 集成到 Shell …

【安卓开发】【Android Studio】Menu(菜单栏)的使用及常见问题

一、菜单栏选项 在项目中添加顶部菜单栏的方法&#xff1a; 在res目录下新建menu文件夹&#xff0c;在该文件夹下新建用于菜单栏的xml文件&#xff1a; 举例说明菜单栏的写法&#xff0c;只添加一个选项元素&#xff1a; <?xml version"1.0" encoding"ut…

jenkins凭据管理(配置github密钥)

凭据分类 Jenkins可以保存下面几种凭证&#xff1a; Secret text&#xff1a;例如 API Token&#xff08;例如GitHub的个人access token&#xff09;。Username with password&#xff1a;指的是登录GitHub的用户名和密码&#xff0c;可以作为单独的组件处理&#xff0c;也可以…

数据结构|排序算法(三)选择排序 堆排序 归并排序

一、选择排序 1.算法思想 选择排序&#xff08;Selection Sort&#xff09;是一种简单直观的排序算法&#xff0c;其基本思想是&#xff1a;每次都从待排序部分中选出最小的一个数据和待排序的第一个数据交换。 将待排序序列分为已排序和未排序两部分&#xff0c;初始时已排…

MAC Mini M4 上测试Detectron2 图像识别库

断断续续地做图像识别的应用&#xff0c;使用过各种图像识别算法&#xff0c;一开始使用openCV 做教室学生计数的程序。以后又使用YOLO 做医学伤口检测程序。最近&#xff0c;开始使用meta 公司的Detectron2.打算做OCR 文档结构分析 Detectron2 的开发者是 Meta 的 Facebook AI…

OpenCv高阶(四)——角点检测

一、角点检测 在计算机视觉中&#xff0c;角点检测是识别图像中局部区域&#xff08;角点&#xff09;的关键技术&#xff0c;这些区域通常是两条或多条边缘的交点&#xff0c;具有丰富的结构信息&#xff0c;常用于图像匹配、跟踪、三维重建等任务。 Harris角点检测算法是一…

TOA与AOA联合定位的高精度算法,三维、4个基站的情况,MATLAB例程,附完整代码

本代码实现了三维空间内目标的高精度定位,结合到达角(AOA) 和到达时间(TOA) 两种测量方法,通过4个基站的协同观测,利用最小二乘法解算目标位置。代码支持噪声模拟、误差分析及三维可视化,适用于无人机导航、室内定位等场景。订阅专栏后可获得完整代码 文章目录 运行结果…

揭秘大数据 | 23、软件定义网络

软件定义网络将网络的边缘从硬件交换机推进到了服务器里面&#xff0c;将服务器和虚拟机的所有部署、管理的职能从原来的系统管理员网络管理员的模式变成了纯系统管理员的模式&#xff0c;让服务器的业务部署变得简单&#xff0c;不再依赖于形态和功能各异的硬件交换机&#xf…