【STM32+CubeMX】 新建一个工程(STM32F407)
相关文章:
【HAL库】 STM32CubeMX 教程 1 --- 下载、安装
目录
第一部分、新建工程
第二部分、工程文件解释
第三部分、编译验证工程
友情约定:本系列的前五篇,为了方便新手玩家熟悉CubeMX、Keil的使用,会详细地截图每一步CubeMX、Keil的操作,并做上标记。之后的篇章,仅截图主要步骤页面。希望新手玩家熟记本篇的基本操作。
第一部分、新建工程
步骤 8-1:新建工程(基于芯片型号)

步骤 8-2:搜索芯片型号
- 输入芯片型号,在搜索列表里,双击目标型号,即可进入配置。

步骤 8-3:配置Debug调试方式
- 最多人出问题、易漏易错的 4 项中,这是其一;
- 养成习惯,新建工程时,先配置Debug选项, 即调试模式。
- 默认是关闭的,配置为:Serial Wire,通用STLink、JLink、CMSIS DAP等仿真器。
- 如果忘了配置,将会导致:烧录一次程序后,芯片无法再烧录(按图中操作解锁芯片)。

步骤 8-4:设置晶振源
- 易漏易错的 4 项中,这是其二;
- HSE,外部高速晶振: Crystal/Ceramic Resonator
- LSE ,外部低速晶振:用于实时时钟,不使能,以后用到时再打开CubeMX增加配置置。

步骤 8-5:配置时钟树
- 下图参数,通用STM32F407xx系列 。
- 易漏易错的 4 项中,这是其三; 特别是F4, 经常有人填错晶振值,导致各种无法排查的问题。
- 下图中 1、3 这两项值,注意填写真实晶振值。可以查看晶振上丝印, 也可以查看原理图。
- 在配置F407芯片时,软件上默认是25M的值,但是,市面上F407板子,常用 8M、25M 这两种不同的晶振,一定要注意区分。如果搞错了,程序可能无法运行、通信失败等等。
| 晶振值 | 输入分频 | 输出倍频 | 输出分频 | USB分频 | APB1分频 | APB2分频 | 系统时钟 |
|---|---|---|---|---|---|---|---|
| 8 或 25 | 8 或 25 | 336 | 2 | 7 | 4 | 2 | 168MHz |

平时是灰色不可选状态。当使能了USB功能时,才会变成可设置状态。
步骤 8-6:工程管理
进入工程管理页面,这一页要设置3个地方:工程名称、存放目录、开发环境。
- 易漏易错的 4 项中,这是其四!
- 重点1:工程生成位置、工程名称,不能使用中文! 否则,生成时会缺少文件,工程无效。
- 重点2:开发环境,默认是EWARM,改 MDK-ARM, 即Keil工程。
- 重点3:Stack Size, 栈空间大小,改 0x1000。Heap Size, 默认,除非你用到malloc申请空间。

栈空间大小 - Stack Size。
在单片机开发中,栈空间大小是一个非常重要的概念。与Java、Python等高级语言不同,单片机的内存资源非常有限,通常只有几十K到几百K。因此,开发者需要特别留意局部数组、变量等占用栈空间的大小,避免栈溢出,导致程序跑飞、卡死。
为避免以后无意间使用了大数组作为函数变量、函数传参,或者要移植FreeRTOS、LVGL等功能,在配置工程时,先把Stack设置大一点,有备无患。
注意,栈溢出是编译时无法发现的,这类bug较难排查。
步骤 8-7:代码文件配置
打勾两个选项:
- 标记2:只复制需要的库文件, 可以有效控制代码体积。
- 标记3:为各种外设生成独立的C、h文件:倘若不打勾,外设的生成代码会堆在main.c中。

至此,基础工程所需,配置完毕。
步骤 8-8:生成工程

稍等片刻,会弹窗:

操作技巧:
- 在刚才的软件配置中,我们使用的是英文的目录路径、英文的工程名称。
- 工程在第一次生成时,必须是英文路径、名称 。否则生成时,会缺失文件。
- 当工程生成后,可以把工程文件夹,修改成中文名称。也可以,把工程文件夹复制到其它带中文的路径中存放,方便管理。
- 但是,不能修改:工程内的子文件夹名称、文件名称!否则工程无法正常打开。
第二部分、工程文件解释
双击打开工程目录,不管哪种STM32芯片, 文件结构都基本相同:

这个目录下,常用的是 ioc文件。
当需要修改工程配置、功能时,双击这个蓝色 ioc 文件,可再次进入CubeMX配置。
文件、文件夹解释:
| Core | 用户平时要编写的文件,都在这文件夹里,如main.c |
| Drives | 芯片内核支持文件、 HAL库文件。都不用修改的 |
| MDK-ARM | 工程入口文件、仿真调试记录文件 |
| 工程名称.ioc | CubeMX的配置文件,双击它,就可以再次对工程进行配置 |
而最常用的,是 “MDK-ARM"这个文件夹。
打开后,如下图,里面有一个绿色图标的 keil 工程文件。
平时就是通过它,打开keil工程,进行代码的编辑。

第三部分、编译验证工程
步骤 2-1:打开工程
双击绿色图标的uvprojx文件,进入keil工程。
Keil 常用按钮,只有三、四个,下图中,圈出了它们的位置,及标示了功能。
双击左侧文件管理器中的 Core 文件夹,其下,有最常用的main.c、it.c等文件。
双击main.c,即可在代码编辑区中打开进行编辑。

步骤 2-2:编译工程
无需做其它环境配置、参数设置。
点击工具栏的 “编译” 按钮,即可对工程进行编译。
等待编译完成后,信息中结果为:0 Error, 即表示CubeMX生成工程成功,如下图:
如果,在CubeMX配置时,使用了中文路径、名称,就会出再各种错误,如缺少启动文件等。

至此,咱的第一个工程,已成功地建成了!
为了清晰界定每一项操作,点亮LED、配置烧录器、烧录等等必备技能,咱们拆篇再独立示范!
CubeMX 与 Keil 的作用区分
CubeMX: 配置工程; 生成指定功能的初始化代码、底层代码;
Keil: 编写具体的业务代码。
其实用keil也能新建、配置工程,编写初始化代码、底层代码。
但通过CubeMX来实现,更直观、更省事。
CubeMX更大的意义在于,当我们熟悉了一个型号芯片的操作后,就能方便在其它型号的芯片间游走,因为不同型号的芯片,配置操作是大致相同的、生成的代码文件结构是相同的、函数名称是相同的。
相关文章:
【STM32+CubeMX】 新建一个工程(STM32F407)
相关文章: 【HAL库】 STM32CubeMX 教程 1 --- 下载、安装 目录 第一部分、新建工程 第二部分、工程文件解释 第三部分、编译验证工程 友情约定:本系列的前五篇,为了方便新手玩家熟悉CubeMX、Keil的使用,会详细地截图每一步Cu…...
机器人避障不再“智障”:HEIGHT——拥挤复杂环境下机器人导航的新架构
导读: 由于环境中静态障碍物和动态障碍物的约束,机器人在密集且交互复杂的人群中导航,往往面临碰撞与延迟等安全与效率问题。举个简单的例子,商城和车站中的送餐机器人往往在人流量较大时就会停在原地无法运作,因为它不…...
H2数据库在单元测试中的应用
H2数据库特征 用比较简洁的话来介绍h2数据库,就是一款轻量级的内存数据库,支持标准的SQL语法和JDBC API,工业领域中,一般会使用h2来进行单元测试。 这里贴一下h2数据库的主要特征 Very fast database engineOpen sourceWritten…...
部署HugeGraph
部署HugeGraph 这里以hugegraph1.2.0为例子,演示一下如何安装部署hugegraph 一、下载并安装JDK11 下载JDK11 https://www.oracle.com/java/technologies/downloads/#java11 使用scp命令将安装包上传到服务器 scp /path/to/local/file usernameserver_ip:/path/…...
2025年第三届“华数杯”国际赛A题解题思路与代码(Matlab版)
游泳竞技策略优化模型代码详解(MATLAB版) 第一题:速度优化模型 本部分使用MATLAB实现游泳运动员在不同距离比赛中的速度分配策略优化。 1. 模型概述 模型包含三个主要文件: speed_optimization.m: 核心优化类plot_speeds.m: …...
嵌入式基础 -- IMX8MP的 GPC 模块技术
General Power Controller (GPC) 模块技术文档 1. GPC 模块简介 1.1 模块功能 GPC(General Power Controller)模块是用于 i.MX8M Plus 应用处理器 的电源管理组件,支持以下功能: 管理 ARM Cortex-A53 和 Cortex-M7 平台的低功…...
选择器css
1.a标签选择 // 选中所具有herf 的元素 [herf] {color: skyblue; } // 选中所具有herfhttps://fanyi.youdao.com/ 的元素 [herf$"youdao.com"] {color:pink; } // 按此顺序书写 link visited hover active // 未访问状态 a:link {color:orange } // 访问状态 a…...
全方位解读消息队列:原理、优势、实例与实践要点
全方位解读消息队列:原理、优势、实例与实践要点 一、消息队列基础认知 在数字化转型浪潮下,分布式系统架构愈发复杂,消息队列成为其中关键一环。不妨把消息队列想象成一个超级“信息驿站”,在古代,各地的信件、物资运…...
JavaScript运算符与控制结构
JavaScript作为一门强大的前端语言,提供了丰富的运算符与控制结构,使程序逻辑更加灵活与高效。 1. JavaScript运算符 算术运算符 运算符描述示例结果加法5 38-减法7 - 43*乘法2 * 612/除法8 / 24%取模(余数)10 % 31**幂运算3 …...
2030年中国AI人才缺口或达400万,近屿智能助力AI人才储备增长
在当今数字化浪潮下,人工智能(AI)已成为推动各行业发展的关键力量。然而,吸引和留住 AI 人才正成为全球性难题,中国亦不例外。据麦肯锡 2022 年全球人工智能商业高管调查,75% 的中国受访者在招聘数据科学家…...
如何设计一个注册中心?以Zookeeper为例
这是小卷对分布式系统架构学习的第8篇文章,在写第2篇文章已经讲过服务发现了,现在就从组件工作原理入手,讲讲注册中心 以下是面试题: 某团面试官:你来说说怎么设计一个注册中心? 我:注册中心嘛&…...
ubuntu 20.04 安装docker--小白学习之路
更新包 sudo apt-get update # 安装需要的软件包以使apt能够通过HTTPS使用仓库 sudo apt-get install ca-certificates curl gnupg lsb-release 使用清华大学源 # 添加Docker官方的GPG密钥 curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo…...
【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据...本篇介绍 密集行人检测的遮挡问题怎么解决?
【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍 密集行人检测的遮挡问题怎么解决? 【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍 密集行人检测的遮挡问题怎么解决? 文章目录 …...
Tableau数据可视化与仪表盘搭建-可视化原则及BI仪表盘搭建
目录 可视化原则 BI仪表盘搭建 仪表盘搭建原则 明确仪表盘主题 仪表盘主题拆解 开发设计工作表 经营情况总览:突出显示的文字 经营数据详情:表格 每日营收数据:多轴折线图 每日流量数据:双轴组合图 新老客占比…...
TensorFlow Quantum快速编程(基本篇)
一、TensorFlow Quantum 概述 1.1 简介 TensorFlow Quantum(TFQ)是由 Google 开发的一款具有开创性意义的开源库,它宛如一座桥梁,巧妙地将量子计算与 TensorFlow 强大的机器学习功能紧密融合。在当今科技飞速发展的时代,传统机器学习虽已取得诸多瞩目成就,然而面对日益…...
ELK日志分析实战宝典之ElasticSearch从入门到服务器部署与应用
目录 ELK工作原理展示图 一、ElasticSearch介绍(数据搜索和分析) 1.1、特点 1.2、数据组织方式 1.3、特点和优势 1.3.1、分布式架构 1.3.2、强大的搜索功能 1.3.3、数据处理与分析 1.3.4、多数据类型支持 1.3.5、易用性与生态系统 1.3.6、高性…...
git 转移文件夹
打开终端或命令行界面:首先,确保你的电脑上安装了 Git,并打开终端或命令行界面。 导航到你的仓库目录:使用 cd 命令来切换到包含你想要移动文件夹的仓库的目录。 cd /path/to/your/repository使用 git mv 命令移动文件夹&#x…...
C#,图论与图算法,输出无向图“欧拉路径”的弗勒里(Fleury Algorithm)算法和源程序
1 欧拉路径 欧拉路径是图中每一条边只访问一次的路径。欧拉回路是在同一顶点上开始和结束的欧拉路径。 这里展示一种输出欧拉路径或回路的算法。 以下是Fleury用于打印欧拉轨迹或循环的算法(源)。 1、确保图形有0个或2个奇数顶点。2、如果有0个奇数顶…...
计算机网络之---OSI七层模型
为什么会有七层模型 OSI七层模型的出现源于计算机网络技术的发展需求,主要解决以下几个问题: 标准化与互操作性 随着计算机网络的快速发展,不同厂商、不同技术之间的设备和系统需要能够无缝通信。而不同厂商在网络硬件、软件、协议等方面存在…...
mysql的mvcc理解
人阅读 一、说到mvcc就少不了事务隔离级别(大白话解释) 序列化(SERIALIZABLE):事务之间完全隔离,当成一个序列,一个一个执行。 1 可重复读(REPEATABLE READ)ÿ…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
