嵌入式软件开发简介
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
配置工程的一般步骤为:
工程初步建立和保存
RCC 设置
时钟系统(时钟树)配置
GPIO 功能引脚配置
生成工程源码
编写用户代码
接下来我们将按照上面 6 个步骤,依次教大家使用 STM32CubeMX
工具生成一个完整的工程。
- 打开STM32CubeMX软件。如图2.4.1所示。
图2.4.1
- 点击新建工程按钮之后,会弹出 MCU
选择窗口。我们依次在选项卡选择我们使用的芯片STM32F429IGT
和对应的参数,然后选择对应的芯片型号,最后点击start project
按钮。如图2.4.2所示。
图2.4.2
- 保存工程为LED,如图2.4.3所示。
图2.4.3
- 配置管脚,鼠标左键点击需要配置的管脚选择相应的功能,PH0/PH1设置为晶振管脚和PF6/PF7/PI10/PI11设置为LED管脚。如图2.4.4所示。
图2.4.4
- 时钟使能,使能HSE时钟,如图2.4.5所示。
图2.4.5
- 配置时钟为外部25M输入,内部时钟为168M。。如图2.4.6所示。
图2.4.6
- 在project manager
目录下的project中选择生成代码的开发工具和版本号。如图2.4.7所示。
图2.4.7
- 在project manager 目录下的code generator中选择生成代码的文件.
如图2.4.8所示。
图2.4.8
- 生成代码,点击按钮GENERATE CODE,生成代码。如图2.4.9所示。
图2.4.9
- 生成代码,打开代码生成存放位置,文件如图。如图2.4.10所示。
图2.4.10
- 用KEIL打开生成代码。如图2.4.11所示。
图2.4.11
- 编译代码。点击按钮,如图2.4.12所示。
图2.4.12
- 添加LED灯代码。管脚输出高电平,点亮四个LED灯,如图2.4.13所示。
图2.4.13
- 生成代码分析。Main函数中一共有三个初始化函数;HAL_Init()用于初始化HAL库;SystemClock_Config()用于初始化时钟,MX_GPIO_Init()初始化使用到的GPIO口;如图2.4.14所示。
图2.4.14
- 生成代码分析。SystemClock_Config()用于配置单片机内部时钟总线,包括选择时钟源,时钟倍频系数,AHB时钟为168M,HCLK时钟为180M,APB1时钟为42M,APB2时钟为84M;如图2.4.15所示。
图2.4.15
- 生成代码分析。MX_GPIO_Init()用于初始化GPIO管脚配置,包括时钟,输出模式,管脚有无上拉/下拉电阻,速度等;如图2.4.16所示。
图2.4.16
- 添加代码位置分析。代码位置添加在USER CODE BEGIN后面,USER CODE
END前面;LED灯管脚输出高电平,LED变亮,在while(1)循环中配置LED管脚一直输出高电平;如图2.4.17所示。
图2.4.17
- 点击“Options for Target”按钮。选择“Debug”选项板,下载器选择“CMSIS-DAP
Debugger”。如图2.4.18所示。
图2.4.18
- 选择“Utilities”选项板,点击“Settings”按钮。点击“Add”按钮,选择1M
Flash,点击“确定-OK”按钮,完成设置。如图2.4.19所示。
图2.4.19
- 点击“Build”按钮,编辑整个工程。如图2.4.20(a)所示。编译成功。如图2.4.20(b)所示。
(a)
(b)
图2.4.20
- 用USB电缆将电脑与实验板的“DAP-LINK”接口连接,点击“LOAD”按钮,将程序下载到实验板的STM32F429。如图2.4.21所示。
图2.4.21
2.5 使用debug功能进行调试
以下将介绍如何使用“Debug”功能进行代码调试。
- 将编译好的代码下载完毕后,点击“Debug”按钮,进入调试状态。如图2.5.1所示。
图2.5.1
- 根据需要设置完毕断点以及所需观察的变量后,点击“Reset”按钮进行复位;点击“Run”按钮开始运行程序;若程序卡住,可点击“Stop”按钮停止运行。如图2.5.2所示。
- (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