STM32+Keil+新建工程(专栏开篇记录)
创始人
2025-05-30 09:52:10
0

导言:
近来开始学习嵌入式相关,谁曾想一个新建工程就给我整懵了。
以前大学实验室里面弄嵌入式还是两年前的事情了,两年不碰,我直接一个好家伙!重新捡起来就和新学一样。那索性就从头仔细学一遍吧。或许之前学的也只是皮毛。
这个专栏用来记录我在学习嵌入式相关的所有我认为重要的、遇到的问题以及解决方案、学习心得。


运行环境:
在这里插入图片描述
操作系统:Win11
STM32型号:F103x系列板子


1.创建测试工程文件夹

这里踩过坑,最好保持文件路径都为英文。毕竟外国软件,又怎么能理解中华文化的情怀。动不动就给我报错,烦死了(脑补猴哥表情包)

为了方便演示和截图记录,我这边新开了一个文件夹,各位看官按照我的流程来应该是没有任何问题。这套流程经过本人测试好几遍了。
在这里插入图片描述

如上面图片所展现的那样,保持英文路径,创建Test文件夹。

1.1创建附属模块文件夹

在Test文件夹下创建如下四个文件夹。
从上往下依次表示的含义如下:
CMSIS:用来存放库为我们自带的启动文件和一些位于CMSIS层的文件。
FWlib:用来存放STM32库里面的inc和src这两个文件夹,这两个文件包含了芯片上的所有驱动,这两个文件夹下的文件我们不需要修改。
Project:用来存放工程文件,keil保存工程的时候一般在该目录下自动生成ObjectsListings,前者表示编译后输出的文件保存的位置,后者用来保存生成的链接文件
User:用来存放用户层代码,包括主函数main.c。
在这里插入图片描述

1.2下载标准外设库

标准外设库 点击直通车
在这里插入图片描述这个注册需要账户或者邮箱验证,这个就不详细阐述了。
解压后的目录如下:
关于各个文件的说明,后面开新篇章记录
在这里插入图片描述


1.3拷贝支持文件

1.3.1CMSIS

将如下文件放到Test文件夹下的CMSIS目录下
在这里插入图片描述在这里插入图片描述

效果图如下:
在这里插入图片描述


1.3.2FWlib

标准库的如下文件拷贝到Test文件下的FWlib中去
在这里插入图片描述
效果图:
在这里插入图片描述

1.3.3 User

标准库下的如下四个文件拷贝到User中去
在这里插入图片描述

效果图如下:
在这里插入图片描述


2.新建工程

双击打开uVision,选择新建工程

在这里插入图片描述

选择工程创建的路径,这里选择我们刚才创建的Project文件夹

在这里插入图片描述

选择自己开发的板子型号,这里可以直接搜索,我这里以103VE为例

在这里插入图片描述

直接选择OK

在这里插入图片描述

2.1添加分组与文件

在这里插入图片描述

点击上图的选择配置,进行如下的分组添加。
在这里插入图片描述在这里插入图片描述

给分组添加文件,以USER分组为例,选择上图的AddFiles

在这里插入图片描述

其他分组里面的内容如下图所示,
其中FWlib分组中存放的是FWLIB文件夹下的src目录下的所有文件;
STARTCODE分组中存放的是CMSIS文件夹下startup/arm/startup_stm32f10x_hd.s
在这里插入图片描述

2.2配置环境

1.点击魔术棒
2.选择C/C++配置宏定义

添加USE_STDPERIPH_DRIVER是为了使用ST官方库,
添加STM32F10X_HD宏定义是因为我们用的芯片是大容量的,
添加了这个宏之后,我们就可以用库文件里面为大容量定义的寄存器了。芯片是小或中容量的时候宏要换成STM32F10X_LD或者STM32F10X_MD。
其实不管是什么容量的,我们只要添加上STM32F10X_HD这个宏即可,
当你用小或者中容量的芯片时,
我们不去访问那些为大容量定义的寄存器就是了,反正也访问不了。

3.设置包含头文件的路径

在这里添加库文件的搜索路径,这样就可以屏蔽掉默认的搜索路径。
如果没有添加这些路径,Keil编译器找不到ST官方库的头文件就会从它的默认标准库搜索,
这时添加的一般是旧版的ST官方库文件,导致出错

宏定义(谁不愿做个懒人呢,给各位看官写好了,快复制吧):
USE_STDPERIPH_DRIVER,STM32F10X_HD
这里两个宏定义之间是逗号,英文逗号,不是句号.

在这里插入图片描述

修改main.c文件测试编译
代码如下

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

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

到这,一个新建的工程就搞定了。

相关内容

热门资讯

【 Deep-Shallow ... A Deep-Shallow Fusion Network with Multi-Detail Ex...
机器学习必知的基础概念(Fun... 机器学习必知的基础概念(Fundamental Theories of Machine...
Word怎么转换成PDF文件格... PDF是一种通用的文件格式,它可以在不同操作系统和设备上保持一致的显示效果。在日常工作...
【C++】面试101,二叉搜索... 目录 1.二叉搜索树的最近公共祖先  2.在二叉树中找到两个节点的最近公共祖先 3.序列化二叉树 4...
linux简单入门 目录Linux简介Linux目录结构Linux文件命令文件处理命令文件查看命令常用文件查看命令Lin...
LP周报丨央企创投母基金来了,... 一级市场再现重量级玩家。本周,由国务院国资委指导、中国诚通控股集团有限公司牵头组建的“诚通科创投资基...
估值600多亿,马斯克的超级独... 刚宣布回归全天候工作没多久,马斯克便给旗下公司融了一笔钱。几天前,马斯克创立的脑机接口公司Neura...
Python3 入门教程||P... Python3 数据结构本章节我们主要结合前面所学的知识点来介绍 Python 数据结构。列表Pyt...
0110 Tomcat 1.JavaWeb 所有通过Java语言编写可以通过浏览器访问的程序的总称叫JavaWebÿ...
C++ Primer第五版_第... 文章目录练习4.1练习4.2练习4.3练习4.4练习4.5练习4.6练习4.7练习4.8练习4.9练...
LuaJIT 栈帧布局(sta... 对于任何的目标架构(如x86、arm、loongarch),...
【必看】最全开窗函数讲解和实战... 窗口函数(Window Function)是 SQL2003 标准中定义...
PyTorch入门(六)使用T...   在文章PyTorch入门(五)使用CNN模型进行中文文本分类中&#x...
app自动化测试——特殊控件T... 文章目录一、Toast弹窗是什么二、Toast 定位方式一:方式二三、案例1、特别注意...
零基础入门学习Python 0... 目录 1.递归 2.异常处理 1.递归 啥是递归 相当于函数调用自身对栈操作频繁,...
云原生周刊:12 个容易忽略的... 文章推荐 12 个容易忽略的 Kubernetes 安装错误 这篇文章总结了 12 个在 Kuber...
渗透测试靶机vulnhub——... 信息收集fscan扫描存活主机PS C:\Users\lenovo\Desktop\HackTool...
在 Python 中替换字典中... 使用 dict.update() 方法替换字典中的值,例如 my_dict.updat...
python:数据结构内容(1... 文章目录壹、元组定义1、创建元组2、访问元组中数据3、元组的连接4、删除元组5、常用的元组函数贰、列...
UEFI开发学习 - Vari... Variable Services是Runtime Services的一部分,提供关于...