首页 > 其他分享 >手把手带你创建HAL版本MDK工程模板

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

时间:2024-07-31 09:16:58浏览次数:14  
标签:MDK HAL 工程 文件 手把手 文件夹 模板

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

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

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

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

1. 源码下载及前置阅读

如果大家跟着本教程学习还是无法自己创建 HAL 版本的 MDK 工程模板,那么可以参考我给大家准备的源文件:

链接:https://pan.baidu.com/s/1n7XHCaMYtASWdJH2uA5yDA?pwd=lw59 提取码:lw59

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

零基础快速上手STM32开发(手把手保姆级教程)open in new window

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

一文教你使用MDK开发工具open in new window

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

STM32下载程序的五种方法open in new window

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开发(手把手保姆级教程)open in new window】,将 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开发(手把手保姆级教程)open in new window

标签:MDK,HAL,工程,文件,手把手,文件夹,模板
From: https://www.cnblogs.com/geass-jango/p/18333793

相关文章

  • 零基础快速上手STM32开发(手把手保姆级教程)
    1前言作为一名嵌入式工程师,STM32是必须要学习的一款单片机,同时这款单片机资料足够多,而且比较简单,非常适合初学者入门。STM32是一款由STMicroelectronics公司开发的32位微控制器,由于其强大的处理能力和广泛的应用领域,如嵌入式系统、物联网设备、机器人等,而受到了广泛的欢......
  • 手把手教你玩转ESP8266(原理+驱动)
    在嵌入式开发中,无线通信的方式有很多,其中WIFI是绕不开的话题。说到WIFI通信,就不得不提ESP8266了。ESP8266是一款高性能的WIFI串口模块,实现透明传输。只要有一定的串口知识,不需要知道WIFI原理就可以上手,在业内应用广泛。1.源码下载STM32F103C8T6模板工程链接:https......
  • 后缀数组 - half
    后缀数组后缀数组可以解决有关后缀的问题废话。那么暴力做法肯定是把每个后缀全部取出来,然后按照字典序排序,但是这样复杂度是\(\Theta(n^2\logn)\)的。后缀数组可以解决以下问题:最长重复子串多个串的最长公共子串不同子串个数算法详解面对这些问题,我们需要\(3\)个数......
  • Datawhale AI夏令营 逻辑推理
    #AI夏令营#Datawhale#夏令营#大模型#微调实践步骤:一、跑通baseline二、尝试个人idea三、尝试进阶baseline比赛链接:上海科学智能研究院一、baseline介绍baseline代码由官方提供,无需修改食用指南:Datawhalebaseline收获官方提供的baseline可以做到一键运行,只......
  • 基于STM32设计汽车空调自动控温系统(hal库)
    一、前言1.1项目介绍【1】项目功能介绍汽车空调自动控温系统是一个集成了先进传感技术,智能控制算法智能化系统。该系统指在通过自动感知车内温度变化,并根据调节空调的运行状态,从而保证车内气温保持在驾驶员和乘客所设定的属实范围之内。此外,该系统具备多种实用功能,以满足不......
  • 使用Nginx Proxy Manager配置Halo的反向代理和申请 SSL 证书
    本文介绍NginxProxyManager配置Halo的反向代理和申请SSL证书,如需要了解Halo2的安装,参考如何在Linux云服务器上通过DockerCompose部署安装Halo,搭建个人博客网站?。目录安装NginxProxyManagerNginxProxyManager安装新建docker-compose.yaml启动NPM配置Halo的反向代理申......
  • [USACO1.5] 八皇后 Checker Challenge 题解
    [USACO1.5]八皇后CheckerChallenge题目描述一个如下的\(6\times6\)的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。上面的布局可以用序列\(2\4\6\1\3\5\)来描述,第\(i\)个数字表示在......
  • 【ollama】手把手教你布置本地大语言模型 以及各种常见用途#如何加载guff模型到ollama
    ollama介绍Ollama是一个开源框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计。以下是其主要特点和功能概述:简化部署:Ollama目标在于简化在Docker容器中部署大型语言模型的过程,使得非专业用户也能方便地管理和运行这些复杂的模型。轻量级与可扩展:作为轻量级......
  • hall 定理学习笔记
    万恶之源基本定义完美匹配是指最大匹配数为min(|X|,|Y|)也就是X或Y集合其中一个集合所有点都被匹配了。定理内容我们来假设X集合点少一点好了。X集合就当做有n个点。那么二分图G存在完美匹配,则取任意正整数1<=k<=n,均满足我从X集合选出k个不同的点,那么它们连向的y集合的点个......
  • 计算机毕业设计项目推荐,基于Echarts的高校就业数据可视化管理系统 81461(开题答辩+程序
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对高校就业管理等问题,对高校就业管理进行研究分析,然后开发设计出高校就业数据可视化管理系统......