STM32笔记(1) STM32简介及环境搭建

文章目录

  • STM32简介
  • 命名规则及选型依据
  • 开发环境
  • 程序烧录方式
  • 开发方式
  • Keil5工程建立
    • 基于固件库开发
    • 基于寄存器开发
  • 资料查阅

STM32简介

ST 指法意半导体,M 指微控制器,即微型计算机的主要组成部分集成在一块芯片上的单芯片微型计算机。32表示这是一个32位的微型控制器。总的来说,STM32就是由意法半导体生产的32位微控制器,基于ARMv7架构的Coretex-M3内核,也是一种单片机。

命名规则及选型依据

1.命名规则
STM32笔记(1) STM32简介及环境搭建_第1张图片
2.选型依据
首先根据项目需求选择合适的MCU芯片,一般来说如果并不需要高性能来进行大量的数据运算,可以选择F1系列,反之,F4系列芯片比较适合。

其次,引脚的多少与功能,FLASH 容量,根据程序的需求进行适当选择。

开发环境

一般开发环境就是Keil5 MDK,除此之外还有ST官方的TrueStudio,以及HAL+STM32CubeMX+Keil5。

其中TrueStudio for STM32是一个灵活的、可扩展的IDE和调试STM32单片机的强大工具,基于开放标准(Eclipse和GNU)和扩展代码的专业特点,给系统的结构和动态行为提供了独特的见解。

而STM32CubeMx可以可视化地进行芯片资源和管脚配置,并且生成项目所有源程序,支持导入到keil5中进行后续程序的编写。

基于HAL库的开发方式是ST官方目前主推的开发方式,普通的固件库官方已经停止更新了。

并且对于单独采用Keil5来开发的话,需要下载对应芯片的芯片包,STM32F1系列芯片应下载F1系列的芯片包,F4的就下载F4的芯片包,同时如果是基于固件库开发还要去官网下载芯片相应的固件库。

程序烧录方式

1.串口下载
用USB转串口的方式烧录程序时,需要先下载相应的芯片驱动以及一个烧录软件,一般是Flymcu。

2.ST-LINK驱动
ST-LINK是一种调试下载器,通过20针脚与开发板相连,直接从keil5点击“load”烧录程序,可以减少烧录时间,并且进行相应Debug仿真测试。使用前需在keil5中先进行设置。

开发方式

1.固件库开发
固件库是由官方提前编好的函数的集合。通过将寄存器底层进行封装,使得可以直接调用函数来控制寄存器,提高了可读性。

2.寄存器开发
寄存器是相当于一个存在于开发板上的一个变量,而我们可以通过编程直接控制寄存器,即使是固件库开发,归根到底也是对寄存器的控制

差别:寄存器是基础,虽然只掌握固件库开发可以比较容易上手stm32,但是无法直观地理解各种底层寄存器。
STM32笔记(1) STM32简介及环境搭建_第2张图片

Keil5工程建立

基于固件库开发

  1. 在建立工程之前,建议在电脑的某个目录下面建立一个文件夹,后面所建立的工程都可以放在这个文件夹下面,这里建立一个文件夹为 Tem。
  1. 使用keil5建立新的工程并将目录定位到刚才建立的文件夹Tem 之下,在这个目录下面建立子文件夹 USER然后定位到 USER 目录下面,工程文件就都保存到 USER 文件夹下面。工程命名为Tem。
  2. 接下来会出现一个选择 CPU 的界面,即选择相应的芯片型号。
  1. 接 下 来 ,在 Template 工 程 目 录 下 面 , 新 建 3 个 文 件 夹 CORE, OBJ 以 及FWLib。 CORE 用来存放核心文件和启动文件, OBJ 是用来存放编译过程文件以及 hex 文件,FWLib 文件夹顾名思义用来存放 ST 官方提供的库函数源码文件。已有的 USER 目录除了用来放工程文件外,还用来存放主函数文件 main.c,以及其他包括 system_stm32f10x.c 等等。
  2. 接下来将官方的固件库包里的 打开官方固件库包,定位到我们之前准备好的固件库包的目录
    STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 下面, 将目录下面的 src,inc 文件夹 复制到刚才建立的 FWLib 文件夹下面。
    (这里需要相应的官方固件库包,在下面的步骤也同样有需要复制相应文件)
  3. 下面将固件库包里面相关的启动文件复制到工程目录 CORE 之下。打开官方固件库包,定位到目录
    STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 下面,将文件 core_cm3.c
    和 文 件 core_cm3.h 复 制 到 CORE 下 面 去 。 然 后 定 位 到 目 录
    STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\a
    rm 下面,将里面 startup_stm32f10x_hd.s 文件复制到 CORE 下面。
    (这里不同容量的芯片使用不同的启动文件)
  4. 定位到目录:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下面将里面的三个文件 stm32f10x.h, system_stm32f10x.c,system_stm32f10x.h,复制到 USER目录之下。然后将
    STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下面的 4 个文 件main.c, stm32f10x_conf.h, stm32f10x_it.c, stm32f10x_it.h 复制到 USER 目录下面。
  1. 4~7步骤为固件库的复制,接下来在keil5的工程里右键点击 Target1,选择 Manage Components ,在Project Targets 一栏,在 Groups 一栏删掉一个 SourceGroup1,建立三个 Groups: USER,CORE,FWLIB。并将文件夹中相应文件导入。
  1. 接下来选择编译中间文件编译后存放目录。方法是点击魔术棒,然后选择“Output”选项下面的“Select folder for objects…” ,然后选择目录为我们上面新建的 OBJ 目录。
  1. 回到工程主菜单,点击魔术棒 ,出来一个菜单,然后点击 c/c++选项.然后点击Include Paths 右边的按钮。弹出一个添加 path 的对话框,将图上面的 3 个目录添加进去。记住, keil 只会在一级目录查找,所以如果目录下面还有子目录,记得 path一定要定位到最后一级子目录。然后点击 OK.
  2. 接下来配置一个全局的宏定义变量。按照步骤 10,定位到 c/c++界面,然后填写“STM32F10X_HD,USE_STDPERIPH_DRIVER”到 Define 输入框里面。(注意:这个是大容量的宏定义)
  3. 打开工程 USER 下面的 main.c,用相应代码将 main.c 已
    有代码覆盖,然后进行编译。
  4. 这样一个工程模版建立完毕。下面还需要配置,让编译之后能够生成 hex 文件。同样点击魔术棒,进入配置菜单,选择 Output。然后勾上下三个选项。

基于寄存器开发

  1. 新建一个 TEST 的文件夹,然后在 TEST 文件夹里面新建 USER 文件夹,.使用keil5建立新的工程test并将目录定位到刚才建立的文件夹,保存在这个 USER 文件夹里面,之后, 弹出选择器件的对话框,在这里选择相应的芯片,特别注意: 一定要安装对应的器件 pack 才会显示这些内容!!
  2. 找到 Target1→Source Group1→双击→设置打开文件类型为 Asm Source
    file→选择 startup_stm32f10x_hd.s→点击 Add (注意:此处应加入的文件与flash的大小有关。
  3. 在 TEST 目录下新建一个新的 OBJ 文件夹来存放中间文件 。
  4. 把系统代码 COPY 过来(即 SYSTEM文件夹,该文件夹由 ALIENTEK 提供,可以在光盘任何一个实例的工程目录下找到)(注意:不要把库函数代码的系统文件夹拷贝到寄存器代码里面用,反之亦然!)
  5. 接下来在keil5的工程里右键点击 Target1,选择 Manage Components ,在Project Targets 一栏,加入相应文件夹及文件。
  6. 建一个 test.c 文件,并保存在 USER 文件夹下。 然后双击 USER 组,会弹出加载文件的对话框,此时在 USER 目录下选择 test.c 文件,加入到 USER 组下。
  7. 设置输出路径,再编译。 点击 魔术棒(Options for Target 按钮),弹出 Options for Target’ Target 1’ 对话框,选择 Output 选项卡→选中 Create Hex File(用于生成 Hex 文件,后面会用到) →点击 Select Folder for Objects→找到 OBJ 文件夹→点击 OK ,打开 Listing 选项卡→点击 Select
    Folder for Listings→找到 OBJ 文件夹→点击 OK ,并在该选项卡做出如下修改:STM32笔记(1) STM32简介及环境搭建_第3张图片
    (注意:一处的输入与芯片类型有关)

图中 2 处是编译器优化选项,有-O0~-O3 四种选择(default 则是-O2),值越大,优化效果越强,但是仿真调试效果越差。这里我们选择-O0 优化,以得到最好的调试效果,方便开发代码,在代码调试结束后,可以选择-O2 之类的优化,得到更好的性能和更少的代码占用量。

图中 3 处, One ELF Section per Function 主要是用来对冗余函数的优化。通过这个选项,可以在最后生成的二进制文件中将冗余函数排除掉,以便最大程度地优化最后生成的二进制代码。

Include Paths 处(4 处),点击 后面的按钮。在弹出的对话框中加入 SYSTEM 文件夹下的 3 个文件夹名字,把这几个路径都加进去 。

资料查阅

一般不建议百度查阅,虽然好像比较容易,但是答案参差不齐。建议通过ST官网进行资料查找,也可以在CSDN各个博客上查找。当然,在购买开发板后一般商家会附赠一些资料,部分目录如下:

STM32笔记(1) STM32简介及环境搭建_第4张图片

STM32笔记(1) STM32简介及环境搭建_第5张图片

你可能感兴趣的:(STM32学习笔记)