STM32-使用固件库新建工程

参考链接: 【入门篇】11-新建工程—固件库版本(初学者必须认认真真看)_哔哩哔哩_bilibili
使用的MCU是STM32F103ZET6
这篇参考的是野火的资料,可以在“野火大学堂”或者它的论坛上下载。(我通常是野火和正点原子的资料混着看的T_T)

一、本地工程文件夹

首先,新建一个工程文件夹,如Template-Fwlib,并在此文件夹下新建4个文件夹,分别为Doc,Libraries,Project,User
其中,Doc中存放的是类似于readme之类的说明文件;Project暂时为空,它将在Keil5新建项目时用到。

Libraries文件夹

Libraries中的内容如下图所示:
在这里插入图片描述

其中,STM32F10x_StdPeriph_Driver就是野火的资料包中【固件库】文件夹里的对应内容直接复制来的,路径如下。

【固件库】STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver

CMSIS文件夹中包含以下下图所示内容,且均可以在下述【固件库】中的CMSIS路径中找到,包括startup文件夹,直接复制即可:
在这里插入图片描述

【固件库】STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS

User文件夹

User文件夹中存放的是在这里插入图片描述
除了main.c,另外3个文件都是从以下路径中复制过来的。

【固件库】STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template

main.c是自己新建的一个源文件,记得要先写个空main入口放着,不然后面编译会报“找不到main函数”的错误。

#include"stm32f10x.h"int main(void)
{}

二、Keil5新建工程

以下内容大部分摘自野火的《零死角玩转STM32—F103霸道_V2》这本书。
Step1: 打开 KEIL5,新建一个工程,工程名根据喜好命名,保存在刚刚创建的Project文件夹下。新建了工程之后要选择MCU的型号,这里选的是STM32F103ZE。
Step2: 添加组文件夹及文件,添加结果如下图所示,文件在刚刚整的那几个本地工程文件夹下全能找到;

STARTUP 内容出自 Template-Fwlib\Libraries\CMSIS\startup
CMSIS 内容出自 Template-Fwlib\Libraries\CMSIS
FWLIB 内容出自 Template-Fwlib\Libraries\STM32F10x_StdPeriph_Driver\src
USER 内容出自 Template-Fwlib\User
DOC 内容出自 Template-Fwlib\Doc

在这里插入图片描述

配置魔术棒选项卡(Options for Target)

(1) Target 中选中微库“ Use MicroLib”,为的是在日后编写串口驱动的时候可以使用printf 函数。
(2) 在 Output 选项卡中把输出文件夹定位到我们工程目录下的“output”文件夹 (这步我没做,因为我没有新建output文件夹,所以保持的默认的), 如果想在编译的过程中生成 hex 文件(没记错的话这是用USB转串口烧录单片机的时候用的),就把 Create HEX File 选项勾上。
(3) 在 Listing 选项卡中把输出文件夹定位到我们工程目录下的“Listing”文件夹。 (这步我没做,因为我没有新建Listing文件夹,所以保持的默认的)

(4) 在 C/C++选项卡中添加处理宏及编译器编译的时候查找的头文件路径。如果头文件路径添加有误,则编译的时候会报错找不到头文件。
注释:Include Paths中设置头文件(如stm32f10x.h)的路径,否则Keil5默认会去软件安装路径下找头文件。
(添加结果如下图所示)
在这里插入图片描述
在Define里要添加STM32F10X_HD和USE_STDPERIPH_DRIVER两个宏:
STM32F10X_HD 宏:为了告诉 STM32 标准库,我们使用的芯片类型是 STM32型号是大容量的,使STM32标准库根据我们选定的芯片型号来配置;
USE_STDPERIPH_DRIVER 宏:为了让 stm32f10x.h 包含 stm32f10x_conf.h 这个头文件。

这样就新建完一个新的工程了,按F7或者左上角的图标(如下所示)可进行编译。
在这里插入图片描述
编译结果如图所示,则新建工程成功。
在这里插入图片描述
仿真器配置那块我跳过了,反正接了仿真器以后还得再整。

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

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

相关文章

leetCode 226.翻转二叉树 递归 + 非递归 + 前中后序 + 层序遍历 【深度和广度优先遍历】

我的往期文章: leetCode 226.翻转二叉树-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/134613347?spm1001.2014.3001.5501 (一)递归做法(深度) C代码:前序遍历 class Solution { pu…

android 调用 c++builder

CBuilder使用FireMonkey来开发Android应用程序&#xff0c;并且将应用程序编译为.so文件&#xff0c;以下是一个简单的示例代码&#xff0c;可以调用该文件来显示一个简单的窗口&#xff1a; c #include <FMX.Forms.hpp> #include <FMX.Controls.hpp> class TForm…

java spring-boot 修改打包的jar包名称

修改pom文件 <finalName>lzwd</finalName><build><finalName>lzwd</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plu…

【模型融合】集成学习(boosting, bagging, stacking)原理介绍、python代码实现(sklearn)、分类回归任务实战

文章目录 概览boostingbaggingStacking投票平均Stack 代码实现1. 分类1.0 数据集介绍1.1 boosting1.2 bagging1.3 stacking 2. 回归2.0 数据集介绍stacking 概览 简单来说&#xff0c;集成学习是一种分类器结合的方法&#xff08;不是一种分类器&#xff09;。 宏观上讲集成学…

如何搭建zerotier服务器组网实现内网穿透

小白花了四天的下班时间终于把zerotier网络调通&#xff0c;此刻坐在桌前舒畅地喝口茶&#xff5e;&#xff5e; 下面来详细记录下这几天踩的坑&#xff1a; 起因就在于一直在iPad上用向日葵连接公司电脑的我觉得向日葵的界面用的实在难受&#xff0c;vs code操作十分不灵光&…

LemMinX-Maven:帮助在eclipse中更方便地编辑maven的pom文件

LemMinX-Maven&#xff1a;https://github.com/eclipse/lemminx-maven LemMinX-Maven可以帮助我们在eclipse中更方便地编辑maven工程的pom.xml文件&#xff0c;例如补全、提示等。不用单独安装&#xff0c;因为在安装maven eclipse插件的时候已经自动安装了&#xff1a; 例…

中国茂金属聚丙烯(mPP)行业调研与投资评估报告(2023版)

内容简介&#xff1a; mPP透明性和表面光泽度可与其他一些透明树脂&#xff08;聚碳酸酯PC、聚苯乙烯 PS等&#xff09;相媲美&#xff0c;性能价格比也优于PC、PS、PET 等&#xff0c;因此被广泛应用于透明包装、医疗器械、家庭用品、一般工业等领域&#xff0c;其中医疗卫生…

记一次简单的PHP反序列化字符串溢出

今天朋友给的一道题&#xff0c;让我看看&#xff0c;来源不知&#xff0c;随手记一下 <?php // where is flag error_reporting(0); class NFCTF{ public $ming,$id,$payload,$nothing;function __construct($iii){$this->ming$ii…

es6中的import导入模块 和 export导出模块

es6中的import导入模块 和 export导出模块 一、定义二、使用1.默认导出导入2..命名导出导入3.命名导出&#xff08;Named Export&#xff09;与默认导出&#xff08;Default Export&#xff09;结合使用 三、总结 一、定义 功能&#xff1a;用于导入和导出模块的内容。 静态加载…

QT已有项目导入工程时注意事项

文章目录 从qt其他版本上开发的工程导入另一qt版本时 从qt其他版本上开发的工程导入另一qt版本时 这里以之前在qt5.12.2上开发的项目为例&#xff0c;现在到在qt6.5.3上运行。 不能直接导入IDE上&#xff0c;否则会报各种莫名奇妙的错误。 首先要把扩展名位.pro.user文件 删掉…

【Python 训练营】N_4 三个整数大小比较

题目 输入三个整数x,y,z&#xff0c;请把这三个数由小到大输出。 分析 我们想办法把最小的数放到x上&#xff0c;先将x与y进行比较&#xff0c;如果x>y则将x与y的值进行交换&#xff0c;然后再用x与z进行比较&#xff0c;如果x>z则将x与z的值进行交换&#xff0c;这样…

一个没正常处理tcp对端关闭的bug

最近使用自研的http client时发现一个问题&#xff0c;对端在发送响应数据之后立即调用close关闭了连接&#xff0c;我这没有调用到响应的回调&#xff0c;而是调用到了连接关闭的回调。对端延迟一会再关闭连接就没问题&#xff0c;用curl去访问也是正常的。经过排查是没有正确…

Apache換行解析漏洞(CVE-2017-15715)

漏洞简介 Apache換行解析漏洞(CVE-2017-15715)是一种解析漏洞,可以影响httpd 2.4.0至2.4.29版本中的PHP解析。攻击者可以通过在上传的文件名中添加特定的换行符,绕过服务器的安全策略,使其被解析成PHP文件而不是普通文件。此漏洞会影响具有以下条件的服务器: 未正确配置…

AIGC: 关于ChatGPT抽象Prompt提问模板的设计

为什么需要Prompt模板 基于前文我们具备了Prompt构建的基础能力&#xff0c;但是我们在实际编写Prompt的过程当中&#xff0c;可能还会存在一些的问题 比如对于背景和细节的描述还是不够或者为了描述的清楚堆砌了大量的文字, 导致整个Prompt的结构化和可读性呢是比较差的从而G…

linux开启apache服务

vim /etc/apache2/ports.conf 键盘输入i 进入插入编辑模式&#xff0c;修改apache2默认监听端口号为8080 &#xff0c;编辑好后&#xff0c;按Esc键“&#xff1a;wq!” 保存退出。&#xff08;注&#xff1a;端口也可以不修改&#xff09; 在终端输入“/etc/init.d/apache2 …

Python基础入门例程62-NP62 运动会双人项目(元组)

最近的博文: Python基础入门例程61-NP61 牛牛的矩阵相加(循环语句)-CSDN博客 Python基础入门例程60-NP60 跳过列表的某个元素(循环语句)-CSDN博客 Python基础入门例程59-NP59 提前结束的循环(循环语句)-CSDN博客 目录 最近的博文: 描述</

【HarmonyOS】ArkTS开发@Styles装饰器和@Extend装饰器详解

文章目录 HarmonyOS详解ArkTS详解ArkTS装饰器深度解析:@Styles、@Extend、和stateStyles@Styles装饰器:优雅的组件样式定义与重用@Extend装饰器:扩展原生组件样式的利器stateStyles:多态样式的应用示例场景:装饰器的联合使用进阶应用:动态样式与交互最佳实践:样式的组织…

[JVM] 垃圾回收算法

1. 标记—清除算法 标记—清除算法是最基础的垃圾回收算法&#xff0c;后续的垃圾收集算法都是基于标记—清除算法进行改进而得到的。标记—清除算法分为“标记”和“清除”两个阶段&#xff0c;首先标记出所有需要回收的对象&#xff0c;在标记完成后统一回收所有被标记的对象…

01_MySQL介绍及安装

#任务背景 一、真实案例 某公司现在有几套不同版本的MySQL数据库&#xff0c;现在大部分的生产和测试环境都已经切换到5.7版本&#xff0c;由于历史原因&#xff0c;有一套测试环境版本为MySQL-5.5。现为了将测试环境版本统一&#xff0c;需要将原来测试环境数据库MySQL-5.5版…

[JVM] 常用调优参数

随着Java应用程序的不断发展和优化&#xff0c;JVM调优已经变得越来越重要。在这篇文章中&#xff0c;我们将探讨一些常用的JVM调优参数&#xff0c;了解如何更好地优化Java应用程序的性能。 文章目录 1. -Xmx2. -Xms3. -XX:PermSize和-XX:MaxPermSize4. -XX:NewRatio5. -XX:Ma…