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”文件树立了相关。
5.1.3 编写源程序
挑选菜单“File”->“New”或许点击东西栏的新建文件按钮,即可在项目窗口的右侧翻开一个新的文本修正窗口,在该窗口能够输入程序代码。
需求阐明的是,源文件便是一般的文本文件,不一定运用Keil软件编写,能够运用恣意文本修正器编写,并且Keil的修正器对汉字的支撑欠好,主张运用UltraEdit之类的修正软件进行源程序的输入。
每一个程序至少有一个原型为int main(void)的主函数,这是程序的进口地址,程序将从这儿开端运转。此外,咱们还需求对开发板做一些时钟和中止方面的初始化作业,这些作业将在函数RCC_Configuration和NV%&&&&&%_Configuration中完结。源文件的代码清单如下所示。
#include “stm32f10x_lib.h”
GPIO_InitTypeDef GPIO_InitStructure;
void Delay (vu32 nCount);
/******************************************************************************* Function Name : main
* Description : 主程序
* Input : None
* Output : None
* Return : None
******************************************************************************/
int main (void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init (GPIOB, &GPIO_InitStructure);
while (1)
{
GPIO_WriteBit (GPIOB, GPIO_Pin_9,
(BitAction)(1-GPIO_ReadOutputDataBit (GPIOB, GPIO_Pin_9)));
Delay (1000000);
}
}
void Delay (vu32 nCount)
{
for (; nCount != 0; nCount–);
}
代码修正完结之后,咱们能够保存源文件,挑选菜单“File”->“Save”或许点击东西栏的保存文件按钮,能够用来保存源文件。
这时会呈现一个保存文件的文件对话框,挑选你要保存的途径,输入文件名HelloWorld.c。留意一定要输入扩展名,假如是c程序文件扩展名为.c,假如是汇编文件扩展名为.s,习气.asm的也能够存储为.asm。注解阐明文件能够保存为.txt的扩展名。
源文件修正完结之后咱们还需求将源文件参加到工程中,工程建好之后,在工程窗口的文件页中,将会呈现“Target 1”,前面有个“+”号,点击“+”号翻开,能够看到下一层的“Source Group 1”,咱们需求向这个里边参加源文件,点击“Source Group 1”使其反白显现,然后,点击鼠标右键,呈现一个下拉菜单,如下图如示。
选中其间的“Add file to Group ‘Source Group 1’”,呈现一个对话框,要求寻觅源文件,如下图所示。
留意,该对话框下面的“文件类型”默许为C source file(*.c),咱们能够经过调整这个来挑选过滤咱们想要格局的文件,然后协助咱们快速查找文件。假如是汇编文件,就挑选“asm source file”;假如是方针文件,挑选“Object file”;假如是库文件,挑选“Library file”。终究点击“Add”,也能够双击要增加的文件进行参加。留意:点击“Add”之后,窗口不会消失,假如要增加多个文件,能够不断增加,增加结束此刻再点击“Close”封闭该窗口。初学者经常误以为操作没有成功而再次双击同一文件或许再次点击“Add”,这时会呈现如下的对话框。
在这儿咱们把刚新建的HelloWorld.c增加进去,文件增加进去之后,咱们点击“Source Group 1”前面的“+”号,就会发现咱们刚刚增加的文件HelloWrold.c已在其间了,双击文件名,即在代码区翻开该源程序文件。
除了增加文件,咱们还能够增加新的Group,操作和增加文件相似,呈现下拉菜单之后咱们挑选“New Group”,这时就会在工程窗口看到新加的Group。对Group和增加文件的操作咱们还能够经过点击东西栏上的五颜六色品字按钮进入“Components,Environment and Books”窗口,如下图所示。
双击列表中的项能够对该项进行重命名操作,点击空白处能够增加新的项,虚方框按钮也能够增加新的项,红叉表明删去选中的项,上下箭头用于调整当时选中项在列表中的方位,“Add Files”能够增加新的源文件,操作进程和前面增加文件的操作是相同的。
5.1.4 编译程序
程序代码写好之后就进入编译程序阶段,能够经过菜单,东西栏和起浮菜单多种办法来主张编译进程,也能够经过批处理文件进行,关于这个批处理文件在Output标签页的设置中说到过。
红线圈起来的区域便是对应的菜单编译指令和东西栏编译指令。各指令的意义如下:
Clean target:铲除编译成果。
Build target:编译被修正的文件并且编译运用程序。
Rebuild all target files:从头编译一切的源文件并且编译运用程序。
Batch Build:经过前面输出的批处理文件进行编译。
Translate **.*:编译某个源文件,**.*代表要编译的源文件。
Stop build:只要编译进行进程中这一项才有用。
经过在工程窗口“Target 1”上点击右键,也能够弹出相应的编译菜单,各指令意义和上面共同。
现在就让咱们来编译咱们的“HelloWorld”,如下图所示,编译的成果会在输出窗口显现。
问题处理了,当呈现“0 Error(s), 0 Warning(s)”的时分也就意味着咱们的程序现现已过了语法检查,有时分一些Warning也不影响程序履行,可是咱们要慎重对待,仔细分析每一个Warning。假如是源程序中有语法过错或许正告,咱们能够经过双击输出窗口的该行,快速定位到犯错的方位。
5.1.5 调试程序
编译经过仅仅阐明咱们的代码没有语法过错,至于源程序中存在的其他过错,有必要经过调试才干发现并处理,事实上,除了极简略的程序以外,绝大部分的程序都要经过重复调试才干得到正确的成果,因而,调试是软件开发接下来咱们需求运转咱们的程序来验证是否达到了预期的意图。也便是程序调试,程序调试往往是程序开发进程中最难的阶段,尤其是对一些比较大型的程序。下面咱们就来看看uVision3对调试的支撑。
5.1.5.1 常用的调试指令
在对工程成功进行汇编、衔接之后,按Ctrl+F5或许运用菜单Debug->Start/Stop Debug Session即可进入调试状况。进入调试状况后,界面与修正状况比较有显着的改动,Debug才单项中本来不能用的指令现在现已能够运用了,东西栏会多出一个用于运转和调试的东西栏,如下图所示,Debug菜单上的大部分指令能够在此找到对应的方便按钮。
常用的Debug菜单指令如下所示:
Start/Stop Debug Session:开端或许中止调试。
Run:一向履行下一个活动的断点。
Step:单步履行。
Step Over:进程单步履行,行将一个函数作为一个句子来履行。
Step out of current Function:跳出当时的函数。
Run to Cursor line:履行到光标地点的行。
Stop Running:中止运转。
Breakpoints:翻开断点对话框。
Insert/Remove Breakpoint:在当时行刺进/删去一个断点。
Enable/Disable Breakpoint:激活当时行的断点或许使断点无效。
Disable All Breakpoints:使程序中一切的断点都无效。
Kill all Breakpoints:删去程序中一切的断点。
学习程序调试,有必要清晰两个重要的概念,即单步履行与全速履行。全速履行是指一行程序履行完了今后紧接着履行下一行程序,中心不中止,这样程序履行的速度就很快,并能够看到该段程序履行的整体作用,即终究成果正确仍是过错,但假如程序有错,则难以承认过错呈现在哪些程序行。单步履行是每次履行一行程序,履行完该行程序履行完今后即中止,等候指令履行下一行程序,此刻咱们能够调查该行程序履行完今后得到的成果,是否与咱们写程序行所想要得的成果相同,借此能够找到程序中问题地点。程序调试中,这两种运转办法都要用到,要灵敏运用,能够大大提高调试功率。
在调试窗口中,咱们能够看到一个黄色的调试箭头,指向了当时履行到的程序行。
5.1.5.2 断点设置
程序调试时,有些程序行往往很难承认什么时分能够履行到,这类问题就不合适单步调试,这是咱们需求运用程序调试中另一种非常重要的办法——断点设置。断点设置的办法有多种,常用的是在某一程序行设置断点,设置好断点之后能够全速运转程序,一旦履行到该程序行即中止,可在此调查有关的变量值,以承认问题地点。设置断点的指令请参考上一节常用调试指令介绍。一旦某一行被设置了断点,咱们能够在程序行的左端看到一个赤色方框(如图5.24调试窗口图所示),假如该断点被禁用,方框将会变为白色。
除了在某程序行设置断点这一根本办法以外,uVision3还供给了多种设置断点的办法,按Debug->Breakpoints,即呈现一个对话框,该对话框用于对断点进行具体的设置,如下图所示。
图5.26中的Expression后的修正框用于输入表达式,该表达式用于承认程序中止运转的条件,功用强壮,涉及到uVision3内置的一套调试算法,这儿不做具体阐明,请查阅相关协助文档。
5.1.5.3 调试窗口
前面讲了调试的一些办法,里边屡次说到检查程序的履行状况。调试窗口便是用于检查程序履行状况的。uVision3供给了多种调试窗口,如寄存器窗口,存储器窗口,反汇编窗口,外设窗口等,下面将会逐个作介绍。
1. 寄存器窗口
图5.26是工程窗口寄存器页的内容,寄存器页包括了当时一切的作业寄存器和体系寄存器,每逢程序中履行到对某个寄存器的操作时,该寄存器会反色显现,用鼠标单击然后按F2(鼠标接连单击两次),即可修正该值。
2. 存储器窗口
存储器窗口能够显现体系中各种内存中的值,经过在Address后的修正框中输入“字母:数字”即可显现相应内存值,其间字母C、D、I、X,别离代表代码存储空间、直接寻址的片内存储空间、直接寻址的片内存储空间、扩展的外部RAM单元值、键入C:0即可显现从0开端的ROM单元中的值,即检查程序的二进制代码。该窗口的显现值能够以各种形式显现,如十进制、十六进制、字符型等。改动显现办法的办法是点鼠标右键,在弹出的方便菜单中挑选。除了显现,还能够修正内存中的值,如下图所示。
3. 检查和调用栈窗口
这个窗口能够协助咱们检查当时调用树的状况,咱们还能够经过这个窗口检查和修正一些变量的值。鼠标停留在某个变量的时分点右键,在弹出的起浮菜单中挑选Add ***to Watch window,Local 窗口显现当时一些局部变量的值,变量值的实际办法能够在十六进制和十进制之间切换,办法是在检查窗口点右键,在某个变量的Value栏用鼠标单击然后按F2(鼠标接连单击两次),即可修正该值。如下图所示。
4. 反汇编窗口
点击View->Dissambly Window能够翻开反汇编窗口,该窗口能够显现反汇编后的代码、源代码和相应反汇编代码的混合代码,能够在该窗口进行在线汇编、使用该窗口盯梢已找行的代码、在该窗口按汇编代码的办法单步履行。点击鼠标右键,呈现方便菜单,如图5.29所示,其间Mixed Mode是以混合办法显现,Assembly Mode是以回来编码办法显现。
5. 外设窗口
为了能够比较直观地了解单片机中各种外设的运用状况,uVison3供给了一个外围接口对话框。经过Peripherals菜单,下拉菜单中的内容和你挑选的芯片有关,会列出你所挑选的芯片上一切的外设。挑选一项你能够进入检查或修正该外设的一些状况。例如在这儿咱们是经过GPIO中的PB9来操控LED闪耀,咱们能够翻开GPIOB的状况对换框,如图5.30所示。
现在咱们能够调试咱们的HelloWorld了。程序运转时,你将看到开发板上的L1不断闪耀。