【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)ÿ…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
