STM32微处理器基于ARM核,所以很多基于ARM嵌入式开发环境都可用于STM32开发平台。开发工具都可用于STM32开发。选择合适的开发环境可以加快开发进度,节省开发成本。本章将先对STM32常用的开发工具Keil MDK和IAR EWARM进行简单介绍,然后结合STM32_SK仿真评估板和STM32F103C的开发板讲解STM32片上资源使用,最后给出一个基于STM32的数据采集器的应用实例。
5.1 Keil MDK介绍
Keil是德国知名软件公司Keil(现已并入ARM 公司)开发的微控制器软件开发平台,是目前ARM内核单片机开发的主流工具。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器在内的完整开发方案,通过一个集成开发环境(uVision)将这些功能组合在一起。uVision当前最高版本是uVision3,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。因此很多开发ARM应用的工程师,都对它十分喜欢。
5.1.1 开发过程及集成开发环境简介
1. Keil的软件开发周期
使用Keil来开发嵌入式软件,开发周期和其他的平台软件开发周期是差不多的,大致有以下几个步骤:
1. 创建一个工程,选择一块目标芯片,并且做一些必要的工程配置。
2. 编写C或者汇编源文件。
3. 编译应用程序。
4. 修改源程序中的错误。
5. 联机调试。
下面这种结构图完整描述了Keil开发软件的整个过程。
2. uVision3 集成开发环境
uVision3 IDE是一款集编辑,编译和项目管理于一身的基于窗口的软件开发环境。uVision3集成了C语言编译器,宏编译,链接/定位,以及HEX文件产生器。uVision3具有如下特性:
功能齐全的源代码编辑器,
用于配置开发工具的设备库,
用于创建工程和维护工程的项目管理器,
所有的工具配置都采用对话框进行,
集成了源码级的仿真调试器,包括高速CPU和外设模拟器,
用于往Flash ROM下载应用程序的Flash编程工具,
完备的开发工具帮助文档,设备数据表和用户使用向导。
uVision3具有良好的界面风格,下图是一个典型的调试时的窗口。
工程区:用于访问文件组和文件,调试是可以查看CPU寄存器。
输出窗口:显示编译结果,以便快速查找错误的地方,同时还是调试命令输入输出窗口,也可以用于显示查找结果。
内存窗口:显示指定地址内村里的内容。
查看和调用栈窗口:用于查看和修改变量的值,并且现实当前函数调用树。
代码窗口:用于查看和编辑源文件。
外设对话框:检查微控制的片上外设的状态。
3. ULINK USB-JTAG接口适配器
ULINK USB-JTAG是一个用于连接PC USB口和开发板JTAG口的小硬件适配器。通过ULINK你可以在真实的目标板上创建,下载和测试嵌入式应用。ULINK支持如下操作:
下载目标程序。
检查内存和寄存器。
单步运行程序。
插入多个断点。
实时运行程序
烧写FLASH存储器
5.1.2 工程管理
在项目开发中,并不是仅有一个源程序就行了,还要为这个项目选择CPU(Keil支持数百种CPU,而这些CPU的特性并不完全相同),确定编译、汇编、连接的参数,指定调试的方式,有一些项目还会有多个文件组成等,为管理和使用方便,Keil使用工程(Project)这一概念,将这些参数设置和所需的所有文件都加到一个工程中,只对工程而不是对单一的源程序进行编译(汇编)和连接等操作。下面我们就以一个简单的例子HelloWorld来讲解如何建立工程和配置工程。在这个例子里,我们将实现开发板上的LED1闪烁,本例使用STM32F103C开发板为目标板。
5.1.2.1 新建工程
点击菜单“Project”,选择“New uVision Project”,这是将会出现一个对话框,要求给将要建立的工程起一个名字。
选择你要保存的路径,输入工程文件的名字,这里我们就叫HelloWorld,uVision3工程文件的后缀为“.uv2”,然后点击“Save”。 这时会弹出一个对话框要求你选择目标设备的型号。
你可以根据你使用的处理器来选择,如果您所使用的处理器型号在列表中找不到,也可以找一款与您使用的相兼容的型号来代替。这里我们选择STM32F103C8,如图所示,右边一栏是对这个芯片的基本的说明,然后点击“OK”。
有些芯片会提供启动代码,我们这个时候点击“Yes”,到此一个工程就建立好了。
5.1.2.2 配置工程
工程建立好了之后,还要对工程进行进一步的设置,以满足要求。
首先用鼠标右键(注意用右键)点击左边工程窗口的“Target 1”,会出现一个菜单,选择“Options for Target 'Target 1'”(也可以通过点击工程窗口的Target 1”,然后使用菜单“Project”->“Options for Target 'Target 1'”),即出现工程配置的对话框,如下图所示:
这个对话框很复杂,而且根所选择的芯片有关,这里共有10个页面,绝大多数选择默认配置即可,下面将对一些需要注意的配置简单介绍一下。
1. Output标签页的设置
Select Folder for Objects:选择编译之后的目标文件存储在哪个目录里,默认位置为工程文件的目录里。
Name of Executable:生成的目标文件的名字,缺省是工程的名字。
Create Executable:生成OMF以及HEX文件。OMF文件名同工程文件名但没有带扩展名。
Debug Information:用于Debug版本,生成调试信息,否则的话无法进行单步调试。
Create Batch File:生成用于实现整个编译过程的批处理文件,使用这个文件可以脱离IDE对省程序进行编译。
Create Hex File:这个选项默认情况下未被选中,如果要写片做硬件实验就必须选中该项。这一点是初学者易疏忽的,在此特别提醒注意一定要要选中,否则编译之不生成Hex文件。
Big Endian:编码格式,与CPU相关,如果CPU采用的是Big Endian编码则勾选上。
Browse Information:产生用于在源文件快速定位的信息。
Create Library:生成lib库文件,默认不选。
在我们刚刚新建的HelloWorld工程中,更改了三个地方,在工程目录下新建了一个Output目录保存目标文件,以避免和源文件混在一起。另外选中了Create Hex File和Browse Information,如上图所示。
2. C/C++标签页的设置
Include Paths:指定头文件的查找路径,可以添加多个。
这里我们所有的选择保持默认选择就可以了。
3. Debug标签页的设置
左边是对应uVision3的模拟环境,右边是针对仿真器,这里选择右边的ULINK Cortex Debugger仿真器为例进行说明。
如果已经将ULINK仿真器连接到你的电脑,点击“Settings”你将进入ARM Target Driver Setup 界面。
ULINK - JTAG/SWD Adapter:
Serial No:列出了当前连接到主机的所有ULINK适配器的串号,你可以通过列表选择要使用的ULINK适配器。
ULINK Version,Device Family以及Firmware Version分别列出了当前选择的ULINK适配器的版本,设备家族和固件版本。
SWJ,Port:根据和开发板接口的类型选择端口,有JTAG和SW两种,勾选SWJ表示支持两种方式。
Max Clock:指定和开发板的最高通信时钟。
JTAG Device Chain:显示当前通过适配器连接上的开发板。
Automatic Detection:自动监测,选择系统将自动检测连接上的开发板,建议使用。
Manual Configuration:手动配置,通过手动设置ID CODE,Device Name和IR len等属性来查找设备。
Debug:
Cache Options:
Cache Code:通知调试器已经下载的程序代码不会改变,选中的话uVision将不会从目标系统读取程序代码。
Cache Memory:决定调试程序期间程序停止运行的时候,是否更新存储器显示。
Download Options:
Verify Code Download:比较目标存储器和调试器上的应用程序的内容。
Download to Flash:将代码下载到所有的存储器区域,如果不选中,调试器不会把代码下载到Flash Download Setup中制定的存储器地址范围。
Misc Options:
Use Reset at Startup:选中的时候,调试器在开始调试的时候会发起一次CPU复位。
Load Application at Startup:将Output标签中指定的可执行文件导入到调试器的起始地址。
Run to Main:开始调试时执行到Main函数入口暂停执行。
Initialization File:指定一个包含一组调试命令的文件,这组命令是调试器开始工作或者调试函数在调试期间要使用的。
Restore Debug Session Settings:使用上一次调试过程对Breakpoints,Watchpoints,Memory Display和Toolbox(如果这些项被选中的话)。
Driver DLL – Parameter:由Device Database设置的目标驱动DLL,不要修改。
Dialog DLL – Parameter:由Device Database设置的对话框DLL,不要修改。
这里我们修改了两个地方,选中了Use ULINK和Run to Main,对ULINK的设置进行了一些调整,具体的设置图5.11所示。
4. Utilities标签页的设置
Configure Flash Menu Command
Use Target Driver for Flash Programming:列表选择和调试接口一致的驱动。Init File的设置也和前面调试设置一致。点击Settings将进入Flash Download Setup界面。
Download Function:定义了Flash烧写的时候进行的操作。
Erase Full Chip:前面三项要选一,烧写程序之前擦除整个Flash存储器。
Erase Sectors:烧写程序之前擦除程序要使用的扇区。
Do not Erase:不进行擦除操作
Program:使用当前uVision工程的程序烧写ROM。
Verify:验证Flash ROM的内容和当前工程中的程序一致。
Reset and Run:在烧写和验证完成之后复位开发板并且运行程序。
RAM for Algorithm:指定用于烧写程序的RAM区域,通常是微控制器上的一段片上空间。
Start:起始地址。
Size:大小。
可以通过点击Add添加,点击Add你将看到如下的选择列表,可以根据你选用的芯片选择合适的,也可以自己手动添加。
Use External Tool for Flash Programming:使用第三方的工具进行Flash下载。
Command:要使用的Flash烧写工具的命令文件(通常是一个.exe文件)。
Arguments:传递给Flash烧写工具的参数。
Run Independent:当选中的时候,uVision不等待Flash烧写完成。不选中的时候uVision要等待Flash烧写完成并且在输出窗口显示烧写结果。
在HelloWorld里面修改了Flash Download Setup,具体的设置如上图所示。到此工程设置就结束了。
5.1.2.3 打开工程
通过菜单“Project”->“Open Project”来打开一个现有工程,这时将弹出一个打开文件对话框让我们选择要打开的工程文件。
选择你要打开的工程的路径,然后点击“Open”打开工程。我们还可以和打开其他文件一样,找到一个后缀为“uv2”的uVision3工程文件,直接双击,Windows会自动调用uVision3打开这个文件,前提是你电脑已经安装了uVision3并且和“uv2”文件建立了关联。