STM32-使用固件库新建工程

news2024/11/16 5:39:13

参考链接: 【入门篇】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.coloradmin.cn/o/1250879.html

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

相关文章

【DDS】OpenDDS配置与使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍OpenDDS配置与使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更…

能让PDF看起来像是扫描件的Look Scanned

什么是 Look Scanned ? Look Scanned 是一个能够让 PDF 看起来就像是扫描件一样的纯前端网站。你再也不需要麻烦地打印之后扫描了,你所需要的就是鼠标点几下。 这是个挺有意思的软件,但是老苏不确定什么场景下会用到这个软件,如果不想自己搭…

89. 打家劫舍【动态规划】

题目 题解 class Solution:def rob(self, nums: List[int]) -> int:N len(nums)# 定义状态: dp[i]表示从第i间房子开始抢劫,最多能抢到的金额dp [0 for i in range(N)]for i in range(N-1, -1, -1):if i N-1:dp[i] nums[i]elif i N-2:dp[i] max(nums[i], …

C语言—一维数组在内存中的存放

1、先看代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int arr[]{1,2,3,4,5,6,7,8,9,10}; int szsizeof(arr)/sizeof(arr[0]);int i0;for(i0;i<sz;i){printf("&arr[%d] %p\n",i,&arr[i]);}return 0; } 2、定…

【Mybatis】Mybatis操作数据库详解

Mybatis操作数据库 什么是MybatisMybatis入门准备工作创建Springboot工程 建表 创建实体类 配置数据库连接字符串编写持久层代码单元测试 Mybatis的基础操作打印日志参数传递增(insert)返回主键 删(delete)改(update)查(select) Mybatis XML配置文件配置连接字符串和Mybatis写持…

Jenkins CI/CD

1、 Jenkins CI/CD 流程图 说明&#xff1a;这张图稍微更形象一点&#xff0c;上线之前先把代码git到版本仓库&#xff0c;然后通过Jenkins 如Java项目通过maven去构建&#xff0c;这是在非容器之前&#xff0c;典型的自动化的一个版本上线流程。那它有哪些问题呢&#xff1f; …

Docker Swarm总结+基础、集群搭建维护、安全以及集群容灾(1/3)

博主介绍&#xff1a;Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 &#x1f345;文末获取源码下载地址&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb;…

基于C#实现外排序

一、N 路归并排序 1.1、概序 我们知道算法中有一种叫做分治思想&#xff0c;一个大问题我们可以采取分而治之&#xff0c;各个突破&#xff0c;当子问题解决了&#xff0c;大问题也就 KO 了&#xff0c;还有一点我们知道内排序的归并排序是采用二路归并的&#xff0c;因为分治…

【Redis基础】Redis安装及管理详细教程

✅作者简介&#xff1a;大家好&#xff0c;我是小杨 &#x1f4c3;个人主页&#xff1a;「小杨」的csdn博客 &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; 1&#xff0c;UBuntu安装Redis 1&#xff0c;使用su命令切换到root用户 su2&#xff0c;使用se…

windows运行Pangolin应用填坑心得——如何在window应用轻量级opengl软件Pangolin库显示3D界面及窗口

目录 0、前言1、最有效的安装打开方式准备工作安装git安装vcpkg&#xff08;1&#xff09;下载&#xff08;2&#xff09;安装&#xff08;3&#xff09;集成至vs 安装cmake 安装pangolin 2、应用实例c工程&#xff08;1&#xff09;vs创建新工程&#xff08;2&#xff09;新工…

盘点60个Python爬虫源码Python爱好者不容错过

盘点60个Python爬虫源码Python爱好者不容错过 爬虫&#xff08;Spider&#xff09; 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 链接&#xff1a;https://pan.baidu.com/s/1JWrDgl46_ammprQaJiKqaQ?pwd8888 提取码&#xff…

Mysql并发时常见的死锁及解决方法

使用数据库时&#xff0c;有时会出现死锁。对于实际应用来说&#xff0c;就是出现系统卡顿。 死锁是指两个或两个以上的事务在执行过程中&#xff0c;因争夺资源而造成的一种互相等待的现象。就是所谓的锁资源请求产生了回路现象&#xff0c;即死循环&#xff0c;此时称系统处于…

2023 年 认证杯 小美赛 国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 cs数模团队在认证杯 小美赛前为大家提供了许多资料的内容呀&am…

数字图像处理(实践篇)一 将图像中的指定目标用bBox框起来吧!

目录 一 实现方法 二 涉及的OpenCV函数 三 代码 四 效果图 一 实现方法 ①利用OTSU方法将前景与背景分割。 ②使用连通区域分析可以将具有相同像素值且位置相邻的前景像素点组成的图像区域识别。 ③画bbox。 ④显示结果。 二 涉及的OpenCV函数 ① OpenCV提供了cv2.th…

【小技巧】复制一个模块到你的工程(学习阶段很实用)

问题描述&#xff1a; 当我们学习Springboot时&#xff0c;需要创建大量的模块&#xff0c;而这些模块的许多代码都是重复的&#xff0c;只有模块名等相关的信息不一样&#xff0c;现在就教你如何快速创建一个模块。 应用场景&#xff1a; ①进入项目文件夹&#xff1a; ②复…

Android : 模仿西瓜视频_主页界面_简单应用

示例图&#xff1a; MainActivity.java package com.example.xihuashipingapp;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.util.DisplayMetrics; import android.view.View; import android.widget.Button; import android.…

计算机组成原理(计算机系统概述)

目录 一. 计算机的发展二. 计算机硬件的基本组成2.1 早期冯诺依曼机2.2 现代计算机的结构 三. 各硬件的工作原理3.1 主存储器的基本组成3.2 运算器的基本组成3.3 控制器的基本组成 四. 计算机的工作过程 \quad 一. 计算机的发展 计算机系统 硬件 软件 #mermaid-svg-gp2AsYELE…

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

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

Windows核心编程 线程

目录 线程概述 进程与线程的关系 线程调度原理 单核与多核的线程处理方式 多线程 线程相关API 线程分配 线程切换时 线程状态 线程退出 线程退出时做的事&#xff08;正常退出情况&#xff09; 线程概述 程序磁盘上的一个可执行文件&#xff08;由指令和数据等组成…

Flash Attention:高效注意力机制的突破与应用

注意力机制彻底改变了自然语言处理和深度学习领域。它们允许模型在执行机器翻译、语言生成等任务时专注于输入数据的相关部分。 在这篇博客[1]中&#xff0c;我们将深入研究被称为“Flash Attention”的注意力机制的突破性进展。我们将探讨它是什么、它是如何工作的&#xff0c…