一.所需文件说明

1.启动文件startup_xxxx.s

  • 作用:初始化堆栈指针、复位向量、中断向量表,执行 SystemInit() 后跳转到 main()

  • 位置Libraries/CMSIS/Device/ST/STM32Fxx/Source/Templates/arm/ 

  • 文件名

    • startup_stm32f10x_ld.s(小容量,如 F103C8)

    • startup_stm32f10x_md.s(中容量,如 F103RC)

    • startup_stm32f10x_hd.s(大容量,如 F103ZE)

    • 其他型号(如 F4/F7)路径类似,需匹配芯片型号。

详细介绍可以参考下面的博主

STM32的启动过程 — startup_xxxx.s文件解析(MDK和GCC双环境)_stm32 .s文件-CSDN博客

2. CMSIS 核心文件

  • 作用:提供 Cortex-M 内核抽象层(中断、寄存器定义等)。

  • 关键文件

    • core_cm3.c / core_cm4.c(根据内核选择)
      位置:Libraries/CMSIS/Include/

    • system_stm32f10x.c(初始化时钟、Flash 等)
      位置:Libraries/CMSIS/Device/ST/STM32F10x/Source/Templates/

    • 头文件:core_cm3.hsystem_stm32f10x.h

详细介绍可以参考下面的博主

CMSIS到底是个什么东西-CSDN博客

3. 标准外设库文件

  • 作用:外设驱动(GPIO、USART、SPI 等)。

  • 位置Libraries/STM32F10x_StdPeriph_Driver/

    • 源文件src/ 目录(如 stm32f10x_gpio.cstm32f10x_rcc.c

    • 头文件inc/ 目录(如 stm32f10x_gpio.hstm32f10x_rcc.h

根据开发需求添加相应的外设库文件

4. 用户代码

  • 必要文件

    • main.c:主程序入口。

    • stm32f10x_it.c:中断服务函数(默认由库提供模板)。
      位置:Libraries/STM32F10x_StdPeriph_Driver/ 或项目自定义目录

    • 用户自定义模块(如 led.cuart.c)。

二. 创建工程(STM32f030K6为例子)

1.去官网下载相应的标准外设库文件

STM32标准外设软件库 - 意法半导体STMicroelectronics

点击自己需要的类型

后面的登录什么的就自己操作了

2.新建文件夹

 文件夹里面新建四个文件夹

3.放置相应的文件

Start文件夹

位置Libraries/CMSIS/Device/ST/STM32Fxx/Source/Templates/arm/

 Libraly文件夹

我的习惯是直接将Libraly文件下的CMSIS和STM32F0xx_StdPeriph_Driver复制到自己的文件夹下

User文件夹

打开文件夹里面的示例

我打开一个比较简单的GPIO 

 复制这五个到自己的User下面

MDK文件夹

 然后选择自己相应的芯片点击OK即可

4.keil操作

添加四个组

添加定义  USE_STDPERIPH_DRIVER,STM32F030,

添加四个文件路径 

添加文件到对应组里面 

Start添加启动文件 

CMSIS添加 system_stm32f0xx.c

 User添加三个文件

FWLIB文件是存放外设文件的,编程所需什么文件就添加什么文件,这里我就不添加了

修改编译配置 

将主函数删除内容编译没有错误就OK了

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

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

相关文章

k8s ceph sc 设置文件系统格式化参数

前言 默认的 sc 文件系统 inode 太少,对于小文件场景,往往会出现容量没满,inode 已经用尽的情况,本文说明如何设置 inode。 说明 本文使用的是 rook-ceph 部署的 ceph 作为存储后端。 xfs 文件系统 sc 创建带格式化参数的 xfs 文件系统的 sc allowVolumeExpansion: t…

关于Npm和Nvm的用法

npm是个什么东西 npm是什么 node package managernodejs包管理工具处理复杂的包的管理的问题那么使用npm以后就不需要从前端引入相应的代码和文件等。 npm相关的命令 查看版本npm -v 更新npm install npm5.4.0 更新到最新版本npm install npmlatest 初始化项目 npm ini…

MyBatis高效查询:简化JDBC开发实战

Mybatis MyBatis 是一款优秀持久层(DAO)框架,用于简化 JDBC 开发 ,原是 Apache 开源项目 iBatis,经历迁移改名,2010 年从 Apache 迁到 Google Code 并改名,2013 年 11 月迁至 GitHub,官网为 https://mybati…

系统信息及进程管理命令

系统信息及进程管理 一、系统信息查看 常用命令:uname、hostnam、hostnamectl、uptime、df、du、free、lscpu 1、uname (1)、命令简介 uname 是一个在 Unix 和类 Unix 系统(如 Linux、macOS)中常用的命令行工具,用于显示系统信息。…

【Z字形变换】

代码思路分析:Z 字形变换 1. 边界情况处理 if (r 1 || r > n) return s;r 1:只有一行,直接返回原字符串(无需变换)。r > n:行数大于等于字符串长度,每行只有一个字符,直接返…

VBA中类的解读及应用第二十五讲:把源数据赋给类利用类完成查找

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,…

Vue3核心语法进阶(Hook)

Vue3 自定义 Hook:让你的代码像乐高一样“可复用”!大家好,我是你们的前端小伙伴!上一篇我们聊了 Vue3 的生命周期,今天咱们继续深入 Vue3 的核心利器——自定义 Hook(Custom Hook)。如果你已经…

工控领域协议之Modbus

Modbus 是一种通信协议,用于工业自动化领域中的设备之间的通信。它是一种串行通信协议,广泛应用于连接不同设备、传感器和执行器的工业控制系统。 Modbus 在工业控制系统、自动化设备、能源管理系统等领域得到广泛应用。 Modbus 协议的基本特点&#xff…

大件垃圾识别 mAP↑28%:陌讯多模态融合算法实战解析

一、行业痛点:大件垃圾识别的现实困境在城市环卫智能化转型过程中,大件垃圾(如废旧家具、电器等)的自动化识别与分拣成为关键环节。据住建部《城市环境卫生发展报告》显示,传统人工分拣模式下大件垃圾识别准确率不足 6…

vk框架或者普通函数封装的一些函数可以拿取使用【会持续更新】

1.身份证校验【通用】/*** function isIDCard* description 判断是否为有效的身份证号码。* param {string} idCard - 待验证的身份证号码。* returns {boolean} 返回验证结果。*/ pubFun.isIDCard function (idCard) {// 身份证号码为15位或者18位,15位时全为数字…

如何给Word和WPS文档添加密码或取消密码

要保护Word和WPS文档,可以为它们加密,加密有两类:打开密码和修改密码。密码设置有两个入口,一个是在另存为,一个是在文件菜单。Word和WPS文字的路径略有不同,微软Office和WPS的其他套件也是如此操作。一、W…

uni-app项目gitignore文件示例

uni-app 忽略以下文件和目录 DS_Store 忽略 UniApp 编译生成的小程序相关目录 unpackage/ uni_modules/ 忽略编辑器自动生成的文件 idea/ vscode/ 忽略日志文件 logs/ 忽略临时文件 temp/ 忽略构建工具自动生成的文件 build/ 忽略 npm 安装的包文件 package-lock.json yarn.loc…

LeetCode 135:分糖果

LeetCode 135:分糖果问题本质与核心挑战 给定孩子的评分数组,需满足 “每个孩子至少1颗糖果,相邻评分高的孩子糖果更多”,求最少糖果总数。核心挑战: 相邻约束是双向的(左→右和右→左都需满足)…

【QT】安装与配置

个人主页:Guiat 归属专栏:QT 文章目录1. QT简介与准备工作1.1 什么是QT1.2 QT的版本选择1.3 系统要求检查2. QT安装方式详解2.1 官方在线安装器2.2 离线安装包2.3 包管理器安装3. Windows平台安装配置3.1 Windows安装步骤3.2 环境变量配置3.3 Visual Stu…

Java从入门到精通 - 算法、正则、异常

算法、正则、异常 此笔记参考黑马教程,仅学习使用,如有侵权,联系必删 文章目录算法、正则、异常1. 常见算法1.1 简单认识算法1.1.1 什么是算法?1.1.2 为什么要学习算法?1.2 排序算法1.2.1 冒泡排序1.2.1.1 实现冒泡排…

题单【排序】

P1271 【深基9.例1】选举学生会 P1271 【深基9.例1】选举学生会 - 洛谷 【方法一】快速排序 使用sort()&#xff0c;注意数组的范围&#xff01;&#xff01;&#xff01; #include<bits/stdc.h> using namespace std;int a[2000000],n,m;int main() {cin>>n>&g…

【机器学习】(算法优化二)提升算法之:AdaBoost与随机梯度

文章目录一、 AdaBoost&#xff1a;自适应提升算法1、AdaBoost数学原理详解1.1、 目标函数1.2、 样本权重更新的逻辑1.3、 模型权重计算的含义1.4、 AdaBoost的核心思想2、为什么AdaBoost如此有效&#xff1f;二、 随机梯度提升算法&#xff1a;梯度优化下更精细的优化1、随机梯…

力扣 hot100 Day65

75. 颜色分类 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地 对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的 sort 函…

12.Linux 磁盘管理

Linux : 磁盘管理 一、磁盘设备命名规则磁盘类型设备命名模式示例特点SATA/SCSI/SAS/dev/sdXsda&#xff08;第一块硬盘&#xff09; sda1&#xff08;第一块硬盘第一分区&#xff09;机械硬盘/通用接口NVMe/dev/nvmeXnYpZnvme0n1&#xff08;第一通道第一块盘&#xff09; …

《Linux服务与安全管理》| DHCP服务器安装和配置

《Linux服务与安全管理》| DHCP服务器安装和配置 目录 《Linux服务与安全管理》| DHCP服务器安装和配置 一、点击“编辑虚拟机设置”&#xff0c;配置三台虚拟机为“仅主机”模式。 二、server01开机&#xff0c;root用户登录&#xff0c;输入nmtui&#xff0c;进入图形界面…