手把手带你创建HAL版本MDK工程模板

news2024/11/19 18:31:03

手把手带你创建HAL版本MDK工程模板

如何快速开发 STM32 项目?我们总不能每次开发一个项目就搭建一次工程,这样效率太低了。

通常我们会使用一个模板工程,需要开发新项目的时候拿出来添加一些对应的模块及业务代码,一个项目就开发完成了。

但对于新手朋友来讲,如何创建一个工程模板对他们来讲是个非常大的挑战。因为这个过程非常繁琐,虽然不复杂,但只要其中有一个环节做错了,那么就前功尽弃了,而且还不好排查。

本文将手把手带你创建 HAL 版本 MDK 工程模板,基于 STM32F103C8T6 芯片。文章参照正点原子的教程,并结合自己的工作经验写作而成,如果你能按照这个教程跟着操作,相信一定能够自己搭建一个HAL版本MDK工程模板。

1. 源码下载及前置阅读

本文首发 良许嵌入式网 :https://www.lxlinux.net/e/ ,欢迎关注!

如果大家跟着本教程学习还是无法自己创建 HAL 版本的 MDK 工程模板,那么可以参考我给大家准备的源文件(由于平台限制,请点击以下链接阅读原文下载):

https://www.lxlinux.net/e/stm32/create-stm32-hal-project-template.html

如果不知道如何搭建 STM32 编程环境,不知道如何烧录 STM32 代码,可以阅读这篇文章:

https://www.lxlinux.net/e/stm32/stm32-quick-start-for-beginner.html

新手小白如果连 MDK 的使用都不熟悉,那么可以通过下文先熟悉一下 MDK 的使用:

https://www.lxlinux.net/e/stm32/mdk-development-tool-tutorial.html

如果你连代码都不知道怎么烧录到 STM32 的,可以参考下文,提供了 5 种代码烧录方式:

https://www.lxlinux.net/e/stm32/five-ways-to-flash-program-to-stm32.html

2. 文件下载

2.1 STM32Cube官方固件包

STM32Cube 官方固件包在 ST 公司的官网可以免费下载,网址为:

https://www.st.com/content/st_com/en.html

可以根据以下步骤找到官方固件包:

但由于官网在国外,下载速度很慢,而且需要填写各种信息,所以大家可以直接使用我给大家提供的固件包,反正也是从官网下载的。当前最新版本是 V1.8.5 。某度云链接:

链接:https://pan.baidu.com/s/10RXLzGog6CXSgZf6p8MGTQ?pwd=12kn 提取码:12kn

2.2 工程模板

如果有小伙伴根据本文档还是无法成功创建工程模板,那么可以参考我创建好的模板:

链接:https://pan.baidu.com/s/1lO7uJFJ28JeSk_TBi03Axw?pwd=0x8k 提取码:0x8k

3. 新建工程文件夹

真正开发 STM32 项目,就不是简单一两个 .c 和 .h 文件那么简单了,而是有几十个甚至更多的文件构成,通过某些组织形式形成的工程文件。

我们先在任意一个位置(比如桌面)创建一个文件夹,命名为 stm32f103c8t6_template ,当然你命为其它名字也可以。

创建的工程模板由下面 5 个目录构成:

这 5 个目录是做什么用的呢?具体作用如下表所示:

文件夹名称作用
Drivers存放与硬件相关的驱动层文件
Middlewares存放中间层文件
Output存放工程编译输出文件
Projects存放 MDK 工程文件
User存放 HAL 库用户配置文件、main.c、中断处理文件,以及分散加载文件

接下来我们就具体来讲讲这 5 个目录文件到底要放一些什么文件。

3.1 Drivers文件夹

Drivers 文件夹里面又包含了 4 个文件夹,它们的作用如下:

文件夹名称作用
BSP存放开发板板级支持包驱动代码,如各种外设驱动
CMSIS存放 CMSIS 底层代码,如启动文件(.s 文件)等
SYSTEM存放系统级核心驱动代码,如 sys.c、delay.c 和 usart.c 等
STM32F1xx_HAL_Driver存放 ST 提供的 F1 系列 HAL 库驱动源码
3.1.1 BSP文件夹

我们平时所写的 LED 驱动、蜂鸣器驱动、ESP8266驱动等等,都是放在这个目录下面。

但由于咱这是工程模板,就先不考虑这些驱动了,所以这个目录就暂时为空就好,等后面用到什么外设再具体添加对应的文件即可。

3.1.2 CMSIS文件夹

将官方提供的固件包下载,然后按下图提示进到 CMSIS 目录。

但这个 CMSIS 目录太过于庞大了,我们可以按以下步骤进行精简。

此外,在 CMSIS 文件夹下还需要拷备一个 Include 目录,但这个目录我也不知道哪里去搞,大家可以从我给大家提供的模板工程里直接复制即可。

或者你也可以使用 STM32CubeMX 随便生成一个工程文件,然后找到下面这些文件,直接拷过来即可。

3.1.3 SYSTEM文件夹

这个文件夹主要存放的是一些常用的系统级核心驱动代码,比如说时钟配置、延时函数、串口等等,像这些配置都是非常经常用到,我们没必要每次都自己手写,直接复用即可。

在这里我们直接使用正点原子给我们提供的三个模块代码,没法必要自己造轮子。

找到任何一个正点原子的项目(HAL版本),然后把整个 SYSTEM 文件夹拷备到 Drivers 目录下。

3.1.4 STM32F1xx_HAL_Driver文件夹

ST 公司提供的 HAL 库驱动源码都是放在这个文件夹里,这个直接从固件包里拷过来就可以了,路径如下:

这里使用的是 V1.8.5 ,当前最新版。

但进到这个目录后会发现,里面有很多东西,我们删掉其余的内容,只保留 Inc 及 Src 这两个文件夹即可。

至此,drivers 文件夹全部处理完毕,如下图示:

3.2 Middlewares文件夹

这个文件夹主要存放的是中间层代码(组件/Lib 等),比如:FATFS、USB、LWIP、FreeRTOS,各种 GUI 等等。但作为模板工程,这些东西我们就先不添加,整个文件夹留空即可。

3.3 Output文件夹

该文件夹用于存放编译器编译工程输出的中间文件,比如:.hex、.bin、.o 文件等,所以我们暂时无需主动往里面放东西。

3.4 Projects文件夹

该文件夹用于存放编译器的工程文件。不同的开发工具所产生的工程文件是不一样的,常见的开发工具有:MDK、IAR ,等等。但我们最常用的还是 MDK ,所以我们就可以在这个文件夹下创建一个 MDK-ARM 文件夹。

如果你使用其它开发工具,那么就创建一个对应的文件夹就可以了。

3.5 User文件夹

该文件夹用于存放用户编写的代码,如:HAL 库用户配置文件、main.c 文件、中断处理文件,以及分散加载文件等。

在这个文件夹里,我们需要将下面那三个文件拷贝到这里来:

3.6 项目工程文件夹树状图

4. 新建工程框架

如果没有看到下图中上面那个红框的内容,请阅读这篇文章【零基础快速上手STM32开发(手把手保姆级教程)】,将 STM32F1 系列的固件包安装好。

5. 添加文件

5.1 创建目标及分组

5.2 向各分组添加文件

5.2.1 添加Startup分组文件

5.2.2 添加User分组文件

5.2.3 添加SYSTEM分组文件

5.2.4 添加驱动文件

到这一步就已经将所有的文件添加完毕了。但此时你们会发现驱动文件前面会有个小钥匙,如下图示:

这是因为官方的固件包的文件设置了只读权限,我们只需要按下图的方式取消只读选项即可。

6. 魔术棒设置

6.1 Target选项卡

6.2 Output与Listing选项卡

6.3 C/C++选项卡

6.4 Debug选项卡

6.5 Utilities选项卡

7. 代码修改

8. 烧录验证

经过以上操作,模板工程创建完成。此时可以按下图接线烧录验证,工程没问题的话,左侧 LED 灯将以 500ms 间隔闪烁。

如果不知道如何搭建 STM32 编程环境,不知道如何烧录 STM32 代码,可以阅读这篇文章:

【零基础快速上手STM32开发(手把手保姆级教程)】


另外,想进大厂的同学,一定要好好学算法,这是面试必备的。这里准备了一份 BAT 大佬总结的 LeetCode 刷题宝典,很多人靠它们进了大厂。

刷题 | LeetCode算法刷题神器,看完 BAT 随你挑!

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

推荐阅读:

  • 程序员必备编程资料大全
  • 程序员必备软件资源

欢迎关注我的博客:良许嵌入式教程网,满满都是干货!

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

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

相关文章

BearPi Std 板从入门到放弃 - 先天篇(1)(阶段 : 智慧城市 - 智慧路灯)

简介 对前面几篇整合, 做个小小汇总试验, 使用BearPi E53_SC1扩展板主芯片: STM32L431RCT6串口: Usart1扩展板与主板连接: I2C : I2C1 (光照强度传感器:BH1750)LED: PB9步骤 创建项目 参考 BearPi Std 板从入门到放弃 - 引气入体篇(1)(由零创…

LabelImg的使用及注意事项

LabelImg是一款开源的图像标注工具,它主要用于标注目标检测、语义分割和图像分类等深度学习中需要的数据集。通过使用LabelImg,用户可以快速、准确地为图片中的目标添加标注信息,从而建立数据集。 使用步骤: 下载LabelImg&#x…

word中,文本框如何跨页?

我们经常使用word编辑一些文档,文档中往往会有一些比较大的文本框,需要跨多页,我们可以使用本文章中的方法,将文本框连接在一起,是的内容自动跨页。 在文字中插入两个文本框如下图: 将内容放到第一个文本框…

基于SpringBoot的大学活动平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 随着互联网技术的不断…

Kotlin:内置函数let、also、with、run、apply

前言 在Kotlin中,有一些用于扩展 & 方便开发者编码的内置函数,能大大提高开发者的开发效率。今天,我将主要讲解的是: let函数also函数with函数run函数apply函数 基础知识:接口回调中Lambda使用 在Kotlin中可使用…

Carla自动驾驶仿真六:pygame多个车辆摄像头画面拼接

此文章主要介绍carla前后左右摄像头画面拼接到pygame上 文章目录 前言一、要点分析二、完整代码三、拼接效果四、总结 前言 1、使用carla做仿真测试或者开发时,如果能够将车辆周边的画面拼接并渲染,可以直观地查看周围地环境,便于调试。本文…

SpringBoot 自动装配原理详解

什么是 SpringBoot 自动装配? 我们现在提到自动装配的时候,一般会和 Spring Boot 联系在一起。但是,实际上 Spring Framework 早就实现了这个功能。Spring Boot 只是在其基础上,通过 SPI 的方式,做了进一步优化。 Spr…

社区分享|简米Ping++基于MeterSphere开展异地测试协作

上海简米网络科技有限公司(以下简称为“简米”)是国内开放银行服务商,高新技术企业,中国支付清算协会会员单位。自2014年成立至今,简米长年聚焦金融科技领域,通过与银行、清算组织等金融机构合作&#xff0…

python爬虫学习-批量爬取图片

python爬虫学习-批量爬取图片 爬虫步骤爬取前十页图片到本地根据页码获取网络源码使用xpath解析网页解析网页并下载图片主函数如下 爬取的网站为站长素材(仅做学习使用) 爬取的目标网站为 https://sc.chinaz.com/tupian/qinglvtupian.html如果爬取多页&…

【ArcGIS Pro微课1000例】0051:创建数据最小几何边界范围(点、线、面数据均可)

本实例为专栏系统文章:创建点数据最小几何边界(范围),配套案例数据,持续同步更新! 文章目录 一、工具介绍二、实战演练三、注意事项一、工具介绍 创建包含若干面的要素类,用以表示封闭单个输入要素或成组的输入要素指定的最小边界几何。 工具界面及参数如下所示: 核心…

Python Reflex框架全攻略:手把手教你打造个性化全栈应用!

更多资料获取 📚 个人网站:ipengtao.com Reflex框架是一款专注于全栈开发的现代 JavaScript 框架,它强调响应式编程和简化复杂性,为开发者提供了构建动态且高效的全栈应用的工具。 Reflex框架是为了解决传统全栈开发中的一些挑战…

在python中安装库,会有conda安装,也会有pip安装,conda与pip的区别是什么?

文章目录 一、Conda是什么?二、pip是什么?三、pip与conda的区别:总结 一、Conda是什么? Conda是一个开源的包管理系统,它是Anaconda公司为Python和其他编程语言开发的。它主要用于数据科学和机器学习领域,…

通过Mock玩转Golang单元测试!

1.单元测试中的困难 如果项目中没有单元测试,对于刚刚开始或者说是规模还小的项目来说,效率可能还不错。但是一旦项目变得复杂起来,每次新增功能或对旧功能的改动都要重新手动测试一遍所有场景,费时费力,而且还有可能…

windows的cmd/PowerShell修改中文字符编码

1.简介 由于编程的时候经常会用到不同的编码,但是由于cmd/bat脚本和命令行默认的编码不一致,就导致了输出的中文乱码,使用chcp命令可以修改当前命令行的编码方式 2.查看与修改 2.1.查看 chcp 常用编码编号 65001:UTF-8936&am…

Python-pdf工具自制(合并、拆分、删除)

pdf工具,之前写的合并工具有点麻烦,使用PyQt5库重写合并拆分和删除指定页面的程序 实现如图: 代码: import sysimport osfrom PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QFileDia…

P10 Linux进程编程 fork创建子进程

目录 前言 01 fork()创建子进程 示例 1使用 fork()创建子进程。 02 fork创建新进程时发生了什么事? 2.1 父、子进程中对应的文件描述符指向了相同的文件表 前言 🎬 个人主页:ChenPi 🐻推荐专栏1: 《Linux C应用编程&#xf…

SystemVerilog学习(0)——目录与传送门

一、验证导论 SystemVerilog学习(1)——验证导论-CSDN博客文章浏览阅读403次。SystemVerilog自学,验证系统概述,什么是SVhttps://blog.csdn.net/apple_53311083/article/details/133953016 二、数据类型 SystemVerilog学习&…

hive自定义函数及案例

一.自定义函数 1.Hive自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展。 2.当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数。 3.根据用户自定义…

文献速递:多模态影像组学文献分享:多模态图注意力网络用于COVID-19预后预测

文献速递:多模态影像组学文献分享:多模态图注意力网络用于COVID-19预后预测 01 文献速递介绍 在处理像 COVID-19 这样的新出现的疾病时,患者和疾病特定因素(例如,体重或已知共病)对疾病的即时进展的影响…

python数据分析总结(pandas)

目录 前言 df导入数据 df基本增删改查 数据清洗 ​编辑 索引操作 数据统计 行列操作 ​编辑 df->types 数据格式化 ​编辑 日期数据处理 前言 此篇文章为个人python数据分析学习总结,总结内容大都为表格和结构图方式,仅供参考。 df导入数…