【STM32】第一个工程的创建

news2025/3/28 10:59:17

目录

    • 1、获取 KEIL5 安装包
    • 2、开始安装 KEIL5
      • 2.1、 激活
      • 2.2、安装`DFP`库
    • 3、工程创建
    • 4、搭建框架
    • 5、开始编写代码

1、获取 KEIL5 安装包

要想获得 KEIL5 的安装包,在百度里面搜索“KEIL5 下载”即可找到很多网友提供的下载文件,或者到 KEIL 的官网下载:下载官网,一大堆注册非常麻烦。建议使用最新或者靠近最新版本都可以。
在这里插入图片描述

2、开始安装 KEIL5

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选择安装路径,路径不能带中文,next
提示: Pack 目录下后续可能会安装以后会用到的各种芯片的芯片包容易占空间,建议 C 盘剩余空间不多的用户可以直接在框中编辑改路径,把 C 改为 D(或其他盘,直接改第一个字符就行,注意不要删错后面符号)
在这里插入图片描述
安装ok即可
无需等待, 直接关闭整个软件

2.1、 激活

  • 右键已经安装好的Keil MDK图标, 选择以管理员方式打开

  • 点开File菜单栏, 选择License Management, 在打开的窗口中复制右上角的Computer ID值, 比如CA2RX-GUTUC

  • 右键安装软件\Keil_MDK_ARM_5.35\keygen\keygen.exe, 选择以管理员方式打开, 这是Keil MDK的盗版激活器

  • 将之前复制的CID值拷贝到激活器CID输入框, Target选择ARM, 点击Generate按钮, 会生成一长串激活码

  • 复制激活码, 填回到Keil MDK界面的New License ID Code(LIC)中, 随后点击Add Lic

  • 显示如下LIC Added Sucessfully说明激活成功
    在这里插入图片描述

2.2、安装DFP

  • 安装安装软件\Keil.STM32F1xx_DFP.2.4.1.pack
  • 官网链接

在这里插入图片描述

3、工程创建

在这里插入图片描述

  • D:\workspace-stm32某个硬盘路径中创建第一个工程的文件结构, 只需要创建前四个文件夹, 其他工程相关文件和文件夹稍后由Keil创建

    └─prj1_demo
        ├─app(我们的应用层代码)
        ├─driver(我们自行编写或其他人编写的第三方驱动)
        ├─library(ARM和ST提供的官方库)
        ├─doc(文档类)
        └─keil(存放keil工程文件)
    
  • 拷贝标准库的文件到我们的工程文件中

    • 拷贝标准库Libraries下的CMSISSTM32F10x_StdPeriph_Driver两个文件夹到工程的library
    • 拷贝标准库Project\STM32F10x_StdPeriph_Examples\GPIO\IOToggle下的main.c stm32f10x_conf.h stm32f10x_it.c stm32f10x_it.h四个文件到工程的app中(不要拷贝system_stm32f10x.c)

    对比c语言阶段的学习:

    app相当于我们编写的代码, 通常统一以main.c的文件作为入口

    lib相当于标准库或者qt库, 早期嵌入式习惯将一个工程相关的库都放在工程内, 之后的则使用共享库(不要改), 其中cmsis是内核相关的操作库, 其他则是厂家的库

    prj相当于makefile, xxx.pro等项目相关文件, keil/iar等都有自己对应的工程文件, keil的名叫<项目名>.uvprjx

    drivers相当于libmsc.so等放置的位置

    doc一般放置自述文件readme.txt/readme.md和项目

    标准库的开发方式更像是移植, 而不是创建

4、搭建框架

  • Keil 创建新工程, 工程文件保存在keil文件夹路径下, 命名stm32prj

    通常情况下, 工程名应该与整个工程文件夹的名字一样, 也就是prj1_demo

    考虑到之后的工程都是从这个工程直接复制, 因此使用一个更通用的工程名

  • 选择设备型号f103ve

  • 不添加任何库(不勾选任何选项, 并确定)

    我们使用keil仅仅为了帮我们管理工程, 以及使用keil的工具链来编译/下载/调试

在这里插入图片描述

  • project-manage-project items中, Groups按如下分组和添加文件(工程中的group不能有二级组, 所以lib部分需要拆分成三部分)

    Groups组名说明添加的文件
    app用户代码apps/main.c
    apps/stm32f10x_it.c
    driver第三方驱动[留空]
    cmsis内核库libraries/CMSIS/CM3/DeviceSupport/STM32F10x/system_stm32f10x.c
    stdLib标准库libraries/STM32F10x_StdPeriph_Driver/src/xxx.c
    startup启动文件libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/arm/startup_stm32f10x_hd.s
    • main()函数是C语言部分代码的入库, 在进入c代码之前, 芯片需要先执行startup启动文件才能启动, 随后才进入c语言部分, 并且这个启动文件使用的是汇编语言

    • 选择 startup_stm32f10x_hd.s 这个文件,因为hd 代表 High Density(高密度),用于区分 STM32F10x 系列不同的 Flash 和 RAM 规格。

    分类后缀Flash 容量典型芯片
    低密度(Low Density)ld16KB ~ 32KBSTM32F101C4, STM32F103C6
    中密度(Medium Density)md64KB ~ 128KBSTM32F103RB, STM32F101R8
    高密度(High Density)hd256KB ~ 512KBSTM32F103RE, STM32F103ZC
    超高密度(XL Density)xl512KB ~ 1MBSTM32F103ZG, STM32F103VH
    • 标准库选择了全部文件, 实际上如果使用了什么外设, 就只需要包含对应文件即可, 提高编译速度
  • 打开Options for Target, 对这个项目进行一些额外配置

    • Target中设置ARM CompilerUse default compiler version 5

      此处为设置编译器, 可选GCCARMCC, 新版keil默认为ARMCC v6, 标准库是按照ARMCC v5编写的
      在这里插入图片描述

    • Output中勾选Create HEX File

      keil默认生成axf文件, 而大多数编程器都使用hex格式的文件进行烧录

      这些文件其实就是最终生成的二进制文件

      在这里插入图片描述

    • C/C++中设置Define

      • STM32F10X_HD USE_STDPERIPH_DRIVER

        注意这里是两个词, 中间用空格隔开, 相当于全局增加了两句话:

        #define STM32F10X_HD 
        #define USE_STDPERIPH_DRIVER
        
    • C/C++中设置Include Paths(使用右边的...按钮, 选择文件夹, keil会自动识别为相对路径)

      • ..\app
      • ..\driver
      • ..\library\CMSIS\CM3\CoreSupport
      • ..\library\CMSIS\CM3\DeviceSupport\ST\STM32F10x
      • ..\library\STM32F10x_StdPeriph_Driver\inc
    • Debug中选择右边的UseCMSIS-DAP Debugger

      教程使用的开发板是野火F103, 配套仿真器为CMSIS-DAP标准的仿真器, 所以选择此项

    • 再点开Settings

      • Debug标签页的Max Clock设置为5MHz

      • Flash Download标签页勾选Reset and Run

        1. 调低烧录速度更稳定
        2. keil默认烧录完毕后系统不会自动开始运行, 需要手动按一下开发板上的reset按键, 而勾选此Reset and Run选项, 烧录完立刻运行, 不用手动重启
  • edit-configuration-Editor中设置Encoding为第二个选项(utf-8)

    Keil默认使用ANSI编码 不支持中文

    改为更通用的UTF-8编码

5、开始编写代码

在这里插入图片描述

注意代码需要以空行结尾

  • 编译, 使用到的编译选项为:

    • Traslate(ctrl+F7), 相当于gcc -c xxx.c, 编译当前打开的一个文件为xxx.o文件
    • Build(F7), 相当于make, 编译整个工程, 只会编译有变动的文件
    • Rebuild, 相当于make clean && make, 完全重新编译整个工程

在这里插入图片描述

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

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

相关文章

SpringBoot+策略模式+枚举类,优雅消除if-else

需求分析 公司做物联网系统的&#xff0c;使用nettry进行设备连接&#xff0c;对设备进行数据采集&#xff0c;根据设备的协议对数据进行解析&#xff0c;解析完成之后存放数据库&#xff0c;但是不同厂家的设备协议不同。公司系统使用了使用了函数式编程的去写了一个解析类&am…

前端框架学习路径与注意事项

学习前端框架是一个系统化的过程&#xff0c;需要结合理论、实践和工具链的综合掌握。以下是学习路径的关键方面和注意事项&#xff1a; 一、学习路径的核心方面 1. 基础概念与核心思想 组件化开发&#xff1a;理解组件的作用&#xff08;复用性、隔离性&#xff09;、组件通信…

Linux驱动开发-①platform平台②MISC字符驱动框架③input框架

Linux驱动开发-①platform平台②MISC字符驱动框架③input框架 一&#xff0c;platform1.1 platform框架&#xff08;设备树下&#xff09;1.2 platform框架&#xff08;配置设备函数&#xff09; 二&#xff0c;MISC字符驱动框架三&#xff0c;input框架 一&#xff0c;platfor…

【mysql】唯一性约束unique

文章目录 唯一性约束 1. 作用2. 关键字3. 特点4. 添加唯一约束5. 关于复合唯一约束 唯一性约束 1. 作用 用来限制某个字段/某列的值不能重复。 2. 关键字 UNIQUE3. 特点 同一个表可以有多个唯一约束。唯一约束可以是某一个列的值唯一&#xff0c;也可以多个列组合的值唯…

常见中间件漏洞:Jboss篇

CVE-2015-7501 环境搭建 cd vulhub-master/jboss/JMXInvokerServlet-deserialization docker-compose up -d 过程 访问网址&#xff0c;存在页面说明接口存在且存在反序列化漏洞 http://8.130.17.222:8080/invoker/JMXInvokerServlet 2.下载 ysoserial ⼯具进⾏漏洞利⽤…

2025年优化算法:龙卷风优化算法(Tornado optimizer with Coriolis force,TOC)

龙卷风优化算法&#xff08;Tornado optimizer with Coriolis force&#xff09;是发表在中科院二区期刊“ARTIFICIAL INTELLIGENCE REVIEW”&#xff08;IF&#xff1a;11.7&#xff09;的2025年智能优化算法 01.引言 当自然界的狂暴之力&#xff0c;化身数字世界的智慧引擎&…

3.24-3 接口测试断言

一.postman 断言 1.断言再test中 #状态码是否等于200 tests["Status code is 200"] responseCode.code 200; #断言响应时间小于200ms tests["Response time is less than 200ms"] responseTime < 200; #断言响应体包含内容 tests["Body…

DeepSeek面试——模型架构和主要创新点

本文将介绍DeepSeek的模型架构多头潜在注意力&#xff08;MLA&#xff09;技术&#xff0c;混合专家&#xff08;MoE&#xff09;架构&#xff0c; 无辅助损失负载均衡技术&#xff0c;多Token 预测&#xff08;MTP&#xff09;策略。 一、模型架构 DeepSeek-R1的基本架构沿用…

Python----计算机视觉处理(Opencv:图像亮度变换)

一、图像亮度变换 亮度调整&#xff1a;图像像素强度整体变高或者变低。 对比度调整&#xff1a;图像暗处像素强度变低&#xff0c;图像亮处像素强度变高&#xff0c;从而拉大中间某个区域范围的显示精 度。 A&#xff1a;原图 …

无人机动平衡-如何在螺旋桨上添加或移除材料

平衡无人机螺旋桨是一项精细的工作&#xff0c;直接影响飞行稳定性和组件寿命。不同的方法适用于不同的情况&#xff0c;螺旋桨的材料和尺寸以及所需调整的幅度都会影响选择的方法。 本文将深入探讨添加如胶水和胶带等材料的方法&#xff0c;以及通过打磨和修剪来移除质量的方…

基于python的租房网站-房屋出租租赁系统(python+django+vue)源码+运行步骤

该项目是基于python/django/vue开发的房屋租赁系统/租房平台&#xff0c;作为本学期的课程作业作品。欢迎大家提出宝贵建议。给师弟开发的课程作业&#xff0c;技术学习可以留言哦 功能介绍 平台采用B/S结构&#xff0c;后端采用主流的PythonDjango进行开发&#xff0c;前端采…

涨薪技术|k8s设计原理

01k8s介绍 Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化 工作负载和服务&#xff0c;有助于实现声明性配置和自动化。它有一个庞大、快速增长的生态系统。Kubernetes 服务、支持和工具广泛可用。Kubernetes 这个名字起源于希腊语&#xff0c;意思是舵…

基于FPGA的16QAM+帧同步系统verilog开发,包含testbench,高斯信道,误码统计,可设置SNR

目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 16QAM调制解调原理 2.2 帧同步 3.Verilog核心程序 4.完整算法代码文件获得 1.算法仿真效果 vivado2019.2仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; 设置SNR12db 将FPGA数据导入到MATLAB显…

QuecPython 外设接口之GPIO应用指南

基础知识 了解GPIO基础知识更有益于我们使用它。 框图 GPIO&#xff08;通用输入输出&#xff09;是指一种通用的数字输入/输出接口&#xff0c;用于与外部电子元件或设备进行通信。它通常存在于微处理器、微控制器和其他嵌入式系统中。 物理电路结构如下图所示&#xff1a…

Spring Boot 整合 Nacos 注册中心终极指南

在微服务架构中&#xff0c;配置管理和动态路由是核心需求。Nacos 作为阿里巴巴开源的动态服务发现、配置管理和服务管理平台&#xff0c;能够帮助开发者实现配置热更新、多环境共享配置以及动态路由管理。本文将结合 Spring Boot 和 Spring Cloud Gateway&#xff0c;手把手教…

SQLServer列转行操作及union all用法

1.创建测试表及数据sql如下 create table ScoresTable( Name varchar(50), ChineseScore int, MathScore int ) insert into ScoresTable values(小张,90,95) insert into ScoresTable values(小王,98,99) 2.表中查询结果如下 3.现需列转行显示&#xff0c;每行显示 姓名…

【GL010】C++

1.C中的const关键字有哪些用法&#xff1f; 1.修饰变量&#xff1a;表示变量的值不可修改。 const int a 10; 2.修饰指针&#xff1a; const int* p&#xff1a; // 指针指向的内容不可修改。 int* const p&#xff1a; // 指针本身不可修改。 const int* const…

(Arxiv-2025)MagicDistillation:用于大规模人像少步合成的弱到强视频蒸馏

MagicDistillation&#xff1a;用于大规模人像少步合成的弱到强视频蒸馏 paper是HKUST发布在Arxiv 2025的工作 paper title&#xff1a;MagicDistillation: Weak-to-Strong Video Distillation for Large-Scale Portrait Few-Step Synthesis Project page&#xff1a;地址 Abst…

Excel(进阶篇):powerquery详解、PowerQuery的各种用法,逆透视表格、双行表头如何制作透视表、不规则数据如何制作数据透视表

目录 PowerQuery工具基础修改现有数据理规则PowerQuery抓取数据的两种方式多文件合并透视不同表结构多表追加数据透视追加与合并整理横向表格:逆透视 数据用拆分工具整理数据算账龄 不等步长值组合合并文件夹中所有文件PowerQuery处理CSV文件双行表头、带合并单元格如何做数据…

Simple-BEV的bilinear_sample 作为view_transformer的解析,核心是3D-2D关联点生成

文件路径models/view_transformers 父类 是class BiLinearSample(nn.Module)基于https://github.com/aharley/simple_bev。 函数解析 函数bev_coord_to_feature_coord的功能 将鸟瞰图3D坐标通过多相机&#xff08;针孔/鱼眼&#xff09;内外参投影到图像特征平面&#xff0…