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或者左上角的图标(如下所示)可进行编译。

编译结果如图所示,则新建工程成功。

仿真器配置那块我跳过了,反正接了仿真器以后还得再整。
相关文章:
STM32-使用固件库新建工程
参考链接: 【入门篇】11-新建工程—固件库版本(初学者必须认认真真看)_哔哩哔哩_bilibili 使用的MCU是STM32F103ZET6 。 这篇参考的是野火的资料,可以在“野火大学堂”或者它的论坛上下载。(我通常是野火和正点原子的资料混着看的…...
商用车量产智能驾驶路径思考
1、商用车量产智能驾驶特点 2、量产自动驾驶路径 3、商用车ADAS法规件 4、高等级自动驾驶...
flink消费kafka限制消费速率
flink版本1.14 别的版本类似 需要速率限制的情况 1.任务异常在停止的时间内大量数据挤压 2.新任务上线需要铺底数据,消费几天前的数据 在不增加内存和并行度的情况下,如果任务启动可能会造成oom,这时需要进行速率限制。 前提 漏桶算法(Leaky Bucket Algorithm): 原…...
搭建Appium工具环境
1、安装Java Development Kit(JDK) 前往Oracle官网下载JDK。 在https://www.oracle.com/java/technologies/javase-jdk11-downloads.html 找到最新版本的JDK。根据操作系统选择适合的版本,并根据指示下载安装程序。 安装JDK。运行下载的安…...
【面经八股】搜广推方向:常见面试题(六)
【面经&八股】搜广推方向:常见面试题(六) 文章目录 【面经&八股】搜广推方向:常见面试题(六)1. Memorization 和 Generalization2. Wide 和 Deep3. Cross-product transformation4. 推荐系统划分5. 线性模型6. Embedding-Based 模型7. 推荐系统工作流程8. Wide P…...
6.前端--CSS-基础选择器【2023.11.26】
1.CSS基本选择器 标签选择器: 标签选择器(元素选择器)是指用 HTML 标签名称作为选择器,按标签名称分类,为页面中某一类标签指定统一的 CSS 样式。标签选择器可以把某一类标签全部选择出来,比如所有的 <…...
Java制作“简易王者荣耀”小游戏
第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 GameFrame 运行类 package com.sxt;import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; im…...
正则表达式例题-PTA
PTA-7-55 判断指定字符串是否合法-CSDN博客 7-54 StringBuffer-拼接字符串 题目: 输入3个整数n、begin、end。 将从0到n-1的数字拼接为字符串str。如,n12,则拼接出来的字符串为:01234567891011 最后截取字符串str从begin到end(包…...
基于Python的南京二手房数据可视化分析的设计与实现
点我完整下载:基于Python的南京二手房数据可视化分析的设计与实现.docx 基于Python的南京二手房数据可视化分析的设计与实现 "Design and Implementation of Python-based Visualization Analysis for Nanjings Second-hand Housing Data" 目录 目录 2 摘…...
软件特征与类型
软件包括计算机系统中的程序和文档,它是一组能完成特定任务的二进制代码。 ▶1.软件的特性 1)软件是一种逻辑元素 软件是逻辑的而非物理的元素;软件是设计开发的,而不是生产制造的。虽然软件开发和硬件制造存在某些相似点,但二…...
无人机遥控器方案定制_MTK平台无人设备手持遥控终端PCB板开发
随着科技的不断发展和无人机技术的逐步成熟,无人机越来越受到人们的关注。作为一种高新技术,无人机的应用范围不断拓展,包括农业、环境监测、城市规划、运输物流等领域。同时,无人机的飞行控制技术也得到了不断的优化和提升。 早…...
【C++】静态成员
静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员。 静态成员分为: 静态成员变量 所有对象共享同一份数据在编译阶段分配内存类内声明,类外初始化 静态成员函数 所有对象共享同一个函数静态成员函数只能访问静态成员变量 …...
单片机学习10——独立按键
独立按键输入检测: #include<reg52.h>sbit LED1P1^0; sbit KEY1P3^4;void main() {KEY11;while(1){if(KEY10) //KEY1按下{LED10; //LED1被点亮}else{LED11;}} } 按键 #include<reg52.h>#define uchar unsigned char #define uint unsigned intsbit …...
微服务系列(三)--通过spring cloud zuul过滤器实现线上流量复制
思路 补充一下,为什么这里我会想到使用"pre"类型的过滤器实现流量复制/流量镜像。 刚开始的时候,参考了阿里的流量镜像实现方案: 配置流量复制策略,阿里的方案本身是对基于云原生envoy做的,这确实是istio原…...
微信小程序image组件图片设置最大宽度 宽高自适应
问题描述:在使用微信小程序image组件的时候,在不确定图片宽高情况下 想给一个最大宽度让图片自适应,按比例,image的widthfiex和heightFiex并不能满足(只指定最大宽/高并不会生效) 问题解决:使用…...
虚幻学习笔记—文本内容处理
一、前言 本文使用的虚幻引擎5.3.2,在虚幻中已经集成了很多可以直接处理多样化文本的蓝图,比如格式化动态显示、浮点数多样化等。 二、实现 2.1、格式化文本显示动态内容:在设置某个文本时可以使用“Format Text”蓝图设置自定义可以的显示…...
WhatsApp API号解封教程(内含图片指引和申诉模板)
WhatsApp API 是专门为中大型企业设置的WhatsApp APP页面,API号并不像WhatsApp个人号和企业号一样可以直接从App Store 或Google Play 下载,而是需要对接官方来连接API。 虽然申请WhatsApp API号的程序和手续比较复杂,但是这个操作对于企业来…...
爬取极简壁纸
js反编译的代码需要解密之类的,直接给我干蒙圈了,借助selenium可以直接获取到调式工具中的源码,可以获取渲染后的链接,然后将链接交给下载函数(使用异步提高效率)即可。 后续学习完js反编译的话࿰…...
docker操作手册
写在前面的几个重要命令 docker与本地件的文件拷贝 # 查看容器ID docker ps -a# 本地文件拷本到容器 docker cp {local_path} {CONTAINER ID}:{path}# 容器拷本到本地 docker cp {CONTAINER ID}:{path} {local_path} # eg docker cp /Users/helloworld/Downloads/R-3.5.0 0a1…...
css Vue尺子样式
原生css生成尺子样式 <template><div class"page"><div class"Light"></div><div class"rile"><ul id"list"><!--尺子需要几个单位就加几个--><li></li><li></li&…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
