当前位置: 首页 > news >正文

【STM32】第一个工程的创建

目录

    • 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, 完全重新编译整个工程

在这里插入图片描述

相关文章:

  • MySQL的数据文件
  • 自然语言处理|LoRA:让大模型微调更简单更高效
  • JS 应用WebPack 打包器第三方库 JQuery安装使用安全检测
  • 【Linux】强大的进程监控工具—htop
  • python采集京东商品评论API接口,json数据示例参考
  • Ubuntu capolar 上实现内网穿透
  • 单片机电路中常见的英文术语及缩写
  • 【Linux学习笔记】gcc编辑器和动静态库的深度剖析
  • 【MySQL】一篇讲懂什么是聚簇索引和非聚簇索引(二级索引)以及什么是回表?
  • Linux第九讲:动静态库
  • [计算机三级网路技术]第六章:交换机及其配置
  • Ubuntu部署Docker搭建靶场
  • 基础-语音是怎么进到LLM里面的
  • 算法 | 麻雀搜索算法原理,公式,改进算法综述,应用场景及matlab完整代码
  • 服务注册/服务发现-Eureka
  • ElementUI时间选择、日期选择
  • STM32学习笔记之常用外设接口(原理篇)
  • DeepSeek底层揭秘——deepEP
  • Qt中如何在同一个类中共享使用一个Qtimer
  • Apache Hive:基于Hadoop的分布式数据仓库
  • 湖南华容县通报“大垱湖水质受污染”,爆料者:现场已在灌清水
  • “上报集团文化助力区域高质量发展赋能平台”揭牌
  • 中国贸促会:有近50%的外贸企业表示将减少对美业务
  • 马上评丨发钱奖励结婚,支持婚育就该系统性发力
  • 第二十届华表奖提名名单公布,张译、王一博、马丽、郭帆等入围
  • 网络游戏用户规模和市场销售创新高,知识产权保护面临哪些挑战?