【STM32】第一个工程的创建

目录

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) ld 16KB ~ 32KB STM32F101C4, STM32F103C6
    中密度(Medium Density) md 64KB ~ 128KB STM32F103RB, STM32F101R8
    高密度(High Density) hd 256KB ~ 512KB STM32F103RE, STM32F103ZC
    超高密度(XL Density) xl 512KB ~ 1MB STM32F103ZG, 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

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

        c 复制代码
        #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, 完全重新编译整个工程
相关推荐
缺点内向2 小时前
Java:创建、读取或更新 Excel 文档
java·excel
带刺的坐椅3 小时前
Solon v3.4.7, v3.5.6, v3.6.1 发布(国产优秀应用开发框架)
java·spring·solon
四谎真好看4 小时前
Java 黑马程序员学习笔记(进阶篇18)
java·笔记·学习·学习笔记
桦说编程4 小时前
深入解析CompletableFuture源码实现(2)———双源输入
java·后端·源码
java_t_t4 小时前
ZIP工具类
java·zip
lang201509285 小时前
Spring Boot优雅关闭全解析
java·spring boot·后端
pengzhuofan6 小时前
第10章 Maven
java·maven
百锦再6 小时前
Vue Scoped样式混淆问题详解与解决方案
java·前端·javascript·数据库·vue.js·学习·.net
刘一说6 小时前
Spring Boot 启动慢?启动过程深度解析与优化策略
java·spring boot·后端
壹佰大多6 小时前
【spring如何扫描一个路径下被注解修饰的类】
java·后端·spring