嵌入式软件开发简介

2.1 开发环境

本实验中使用stm32cubemx_v5-6-1和Keil uVision
5软件进行代码的编写和调试。STM32CubeMX 是 ST
这几年极力推荐的程序生成开发工具。所以这两年新出的 STM32 芯片,ST 直接只提供 HAL
库。在新型的 STM32 芯片中,用 HAL
库更加普遍。而Keil是一种优秀的嵌入式应用开发软件,它支持包括ARM在内的多种微控制器芯片。Keil集代码编辑、编译、仿真于一体,易学易用,界面友好,为程序调试、软件仿真等提供了众多强大、便利的功能。

2.2 编程语言

汇编语言是嵌入式系统开发初期所使用的开发语言,但它可读性、可移植性均较差,编程起来也比较困难。而C语言不仅可读性、可移植性均较强,编程难度相对较低,其目标代码以及运行速度与汇编语言相比,也无太大差别,已成为了嵌入式MCU的主流开发语言。

首先我们需要准备资料:

HAL库开发包:en.stm32cubef4_v1-25-0.zip

STM32CUBE开发工具:en.stm32cubemx_v5-6-1.zip

KEIL开发工具:MDK517.EXE

STM32F4的KEIL安装包:Keil.STM32F4xx_DFP.2.11.0.pack

JAVA安装包:chromeinstall-8u77.exe

2.3 软件架构

代码完全自主编写难度相对较大,且效率也不高。因此,为实现快速开发,各大MCU厂商均提供了完善的API外设驱动库。在编程开发过程中,通过查阅处理器的数据手册以及API函数手册,使用HAL库函数访问,可以提高代码的复用率,我们使用ST
官方的 STM32CubeMX 图形工具生成一个工程模板,从而提高工作效率。

2.4 新建工程

以下将介绍如何通过在STM32CubeMX中配置软件,并生成代码后在Keil
5中编译、下载到Cortex-M4嵌入式开发板中。

大多数情况下,我们都使用STM32CubeMX
来生成工程的时钟系统初始化代码以及外设的初始化代码,因为用户控制逻辑代码是无法在
STM32CubeMX 中完成的,需要用户自己根据需求来实现。使用 STM32CubeMX
配置工程的一般步骤为:

  1. 工程初步建立和保存

  2. RCC 设置

  3. 时钟系统(时钟树)配置

  4. GPIO 功能引脚配置

  5. 生成工程源码

  6. 编写用户代码

接下来我们将按照上面 6 个步骤,依次教大家使用 STM32CubeMX
工具生成一个完整的工程。

  1. 打开STM32CubeMX软件。如图2.4.1所示。

2.4.1

  1. 点击新建工程按钮之后,会弹出 MCU
    选择窗口。我们依次在选项卡选择我们使用的芯片STM32F429IGT
    和对应的参数,然后选择对应的芯片型号,最后点击start project
    按钮。如图2.4.2所示。


2.4.2

  1. 保存工程为LED,如图2.4.3所示。

2.4.3

  1. 配置管脚,鼠标左键点击需要配置的管脚选择相应的功能,PH0/PH1设置为晶振管脚和PF6/PF7/PI10/PI11设置为LED管脚。如图2.4.4所示。

2.4.4

  1. 时钟使能,使能HSE时钟,如图2.4.5所示。

2.4.5

  1. 配置时钟为外部25M输入,内部时钟为168M。。如图2.4.6所示。

2.4.6

  1. 在project manager
    目录下的project中选择生成代码的开发工具和版本号。如图2.4.7所示。

2.4.7

  1. 在project manager 目录下的code generator中选择生成代码的文件.
    如图2.4.8所示。

2.4.8

  1. 生成代码,点击按钮GENERATE CODE,生成代码。如图2.4.9所示。

2.4.9

  1. 生成代码,打开代码生成存放位置,文件如图。如图2.4.10所示。

2.4.10

  1. 用KEIL打开生成代码。如图2.4.11所示。

2.4.11

  1. 编译代码。点击按钮,如图2.4.12所示。

2.4.12

  1. 添加LED灯代码。管脚输出高电平,点亮四个LED灯,如图2.4.13所示。

2.4.13

  1. 生成代码分析。Main函数中一共有三个初始化函数;HAL_Init()用于初始化HAL库;SystemClock_Config()用于初始化时钟,MX_GPIO_Init()初始化使用到的GPIO口;如图2.4.14所示。

2.4.14

  1. 生成代码分析。SystemClock_Config()用于配置单片机内部时钟总线,包括选择时钟源,时钟倍频系数,AHB时钟为168M,HCLK时钟为180M,APB1时钟为42M,APB2时钟为84M;如图2.4.15所示。

2.4.15

  1. 生成代码分析。MX_GPIO_Init()用于初始化GPIO管脚配置,包括时钟,输出模式,管脚有无上拉/下拉电阻,速度等;如图2.4.16所示。

2.4.16

  1. 添加代码位置分析。代码位置添加在USER CODE BEGIN后面,USER CODE
    END前面;LED灯管脚输出高电平,LED变亮,在while(1)循环中配置LED管脚一直输出高电平;如图2.4.17所示。

2.4.17

  1. 点击“Options for Target”按钮。选择“Debug”选项板,下载器选择“CMSIS-DAP
    Debugger”。如图2.4.18所示。

2.4.18

  1. 选择“Utilities”选项板,点击“Settings”按钮。点击“Add”按钮,选择1M
    Flash,点击“确定-OK”按钮,完成设置。如图2.4.19所示。

2.4.19

  1. 点击“Build”按钮,编辑整个工程。如图2.4.20(a)所示。编译成功。如图2.4.20(b)所示。

(a)

(b)

2.4.20

  1. 用USB电缆将电脑与实验板的“DAP-LINK”接口连接,点击“LOAD”按钮,将程序下载到实验板的STM32F429。如图2.4.21所示。

2.4.21

2.5 使用debug功能进行调试

以下将介绍如何使用“Debug”功能进行代码调试。

  1. 将编译好的代码下载完毕后,点击“Debug”按钮,进入调试状态。如图2.5.1所示。

debug1

2.5.1

  1. 根据需要设置完毕断点以及所需观察的变量后,点击“Reset”按钮进行复位;点击“Run”按钮开始运行程序;若程序卡住,可点击“Stop”按钮停止运行。如图2.5.2所示。

debug2
debug3
debug4

  1. (b) (c)

2.5.2

2.6 工程添加文件

以下将介绍如何为工程添加源文件。以后自己添加程序都添加在User文件夹下。

1.在左侧“LED”栏中,单击右键选择Add
Group,新建一个组组,并改名为“User”。如图2.6.1(a)(b)所示。

(a)

(b)

2.6.1

2.新建一个文件。如图2.6.2所示。在文件中输入内容。如图2.6.2所示。

2.6.2

3.点击“Manage Project Items”按钮。选择“LED”-“User”,点击按钮“Add
Files…”,然后,选择自己添加的文件。如图2.6.3所示。

2.6.3

4.添加自己编写文件。选择“user”,点击按钮“Add
Files…”,然后,选择文件后,点击“Add”按钮加入其中;点击“OK”按钮。如图2.6.4所示。

2.6.4

5.KEIL添加编译路径。点击“Options for
Target”按钮。如图2.6.5(a)所示。选择C/C++选项版,点击“Include
Paths”“…”按钮,添加User文件下.h文件的路径。如图2.6.5(b)所示。选择路径…User添加,并点击“OK”按钮。如图2.6.5(c)所示。

(a)

(b)

(c)

2.6.5