1、Keil MDK5认识 微控制器STM32原理与应用实验指导Keil MDK5认识1 实验目的(1) 学习使用Keil MDK5建立工程; (2) 熟悉Keil MDK5编程语言;(3) 学会使用Keil MDK5的软件仿真。2 实验任务(1) 安装Keil MDK5软件,安装芯片软件包,注册软件;(2) 新建工程文件;(3) 下载程序,并进行软件仿真,观察程序运行结果。3 实验说明STM32所有系列的微控制器都可以在Keil MDK5下进行软件开发。Keil MDK,也称MDK-ARM,Realview MDK、I-MDK、uVision4等。目前Keil MDK 由三家国内代理商提供技术支
2、持和相关服务。MDK-ARM软件为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备提供了一个完整的开发环境。MDK-ARM专为微控制器应用而设计,不仅易学易用,而且功能强大,能够满足大多数苛刻的嵌入式应用。4 实验步骤(1) 安装Keil MDK5软件,安装芯片软件包,注册软件;(2) 建立工程文件,选择芯片型号,加载系统文件、内核文件、标准外设驱动函数,添加系统启动文件;(3) 设置头文件加载路径,需要配置一个全局的宏定义变量,定位到c/c+界面,然后填写“STM32F10X_HD,USE_STDPERIPH_DRIVER”到Define输入框里面;(4) 编译整个工程
3、,根据提示修改语法错误;(5) 下载程序;(6) 选择仿真模式,利用模拟示波器观察程序运行结果。MDK5软件的安装和注册(1) 打开本课程所提供的资料,进入到MDK5文件夹。选中后Keil uvision5 MDK版,右键解压到当前文件夹。图2.1 解压Keil uvision5 MDK版(2) keygen是注册软件,mdk518就是Keil MDK5软件了,我们通常称之为Keil5。(后面为方便统称为Keil5)图2.2 MDK5文件夹(3) 开始安装Keil5,选mdk518,右键选择以管理员的身份运行此软件。(如果不这样做,可能相关驱动无法安装)图2.3 开始安装(4) 点击NEXT。
4、图2.4 点击NEXT(5) 选中“I agree to”,点击NEXT。图2.5 接受服务条款(6) 选定安装的路径,路径不可含有中文,必须是全英文。图2.6 设置安装路径(7) 随便填写信息,使用英文。图2.7 填写用户基本信息(8) 点击NEXT安装。图2.8 等待安装(9) 如果弹出是否要安装设备的界面,点击安装即可。(安装或者不安装都可以,因为到后面还要安装CH340的驱动)图2.9 安装串口驱动(10) 出现这个弹窗点击关闭即可。图2.10 关闭弹窗(11) 把MDK5弹出的所有窗口全部关闭。图2.11 关闭所有弹窗(12) 接下来,开始安装STM32F1系列的固件包。进入到此路径
5、。第一个文件是固件库安装包,双击并根据提示进行安装。图2.12 安装固件包(13) 安装完成后,开始注册软件。回到桌面,左键选中,然后右键以管理员的身份运行。(注意win7以上的系统一定要以管理员的身份打开此软件。否则,激活会失败。)点击file,然后选择“License Management”。图2.13 注册软件(14) 复制CID码。图2.14 CID码(15) 左键选中keygen,右键单击选择以管理员的身份运行。图2.15 运行keygen图2.16 生成LIC(16) 将生成的LIC复制粘贴到下面的那个框中,点击Add LIC。图2.17 添加LIC注意:如果没有注册机注册,软件将
6、只能编译32KB以下的文件。新建工程模板(1) 新建文件夹Template,点击MDK的菜单:ProjectNew Uvision Project,然后将路径定位到Template之下,在这个文件夹下面建立子文件夹USER,将工程文件就保存在USER文件夹中。工程命名为Template,点击保存。 图2.18 新建工程(2) 接下来会出现一个选择CPU的界面,就是选择芯片型号。如图2.19所示,实训平台所使用的芯片型号为STM32F103ZET6,所以在这里选择STMicroelectronicsSTM32F1 SeriesSTM32F103STM32F103ZET6。图2.19 选择芯片类型
7、图2.20 选择芯片型号(3) 点击OK,MDK会弹出Manage Run-Time Environment对话框,这是MDK5 新增的一个功能,在这个界面,可以添加自己需要的组件,从而方便构建开发环境,由于本实验并没有用到,直接关闭即可。图2.21 添加组件对话框(4) 现在USER目录下面包含两个文件夹和两个文件。Template.uvprojx是工程文件,非常关键,不能删除。Listings和Objects文件夹是MDK自动生成的文件夹,用于存放编译过程产生的中间文件,将其删除即可。图2.22 删除Listings和Objects文件夹(5) 接下来,在Template工程目录下面,新建
8、3个文件夹CORE、OBJ以及TM32F10x_FWLib。CORE用来存放核心文件和启动文件,OBJ是用来存放编译过程文件以及hex文件,STM32F10x_FWLib文件夹用来存放ST官方提供的库函数源码文件。已有的USER目录除了用来放工程文件外,还用来存放主函数文件main.c,以及其他包括system_stm32f10x.c等。图2.23 新建文件夹(6) 将固件库包里面相关的启动文件复制到工程目录CORE文件夹。打开路径STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3CoreSupport,将文件core_cm3.c和文件core_cm
9、3.h复制到CORE文件夹中。然后在路径STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTTM32F10xstartuparm下面,将里面startup_stm32f10x_hd.s文件复制到CORE文件夹中。将官方的固件库包里的源码文件复制到工程目录文件夹下面。打开官方固件库包,STM32F10x_StdPeriph_Lib_V3.5.0LibrariesSTM32F10x_StdPeriph_Driver 路径下,将目录下面的src和inc文件夹复制到STM32F10x_FWLib文件夹下面。src 存放的是固件库的
10、.c文件,inc存放的是对应的.h文件,打开这两个文件目录过目一下里面的文件,每个外设对应一个.c文件和一个.h头文件。图2.24 src文件夹(7)STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10x路径下,将里面的三个文件stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h,复制到USER目录下。STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Template路径下的4个文件main.c、s
11、tm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h复制到 USER目录下面。图2.25 USER文件夹(8) 到此,需要的固件库相关文件已经复制到了工程目录下面,现在需要将这些文件加入到工程中。右键点击Template,选择Manage Components。图2.26 Manage Components(9) 下面往Group里面添加工程需要的文件。先选中FWLIB,然后点击右边的Add Files, 进入STM32F10x_FWLib/src路径下,将里面所有的文件选中(Ctrl+A),然后点击Add,然后点击Close可以看到Files列表下面已经
12、包含添加的文件。这里需要说明一下,在平时的项目工程中,如果只用到了其中的某个外设,是不需要添加没有用到的外设库文件的。本实验中选择全部添加进来是为了后面方便,不用每次添加,当然这样的坏处是工程太大,编译起来速度慢,可以根据需要自行选择。图2.27 添加src文件图2.28 添加过后的FWLIB(10) 用同样的方法,将Groups定位到CORE和USER下面,添加需要的文件。CORE下面需要添加的文件为core_cm3.c、core_cm3.h、startup_stm32f10x_hd.s (注意:默认添加的时候文件类型为.c, 也就是添加startup_stm32f10x_hd.s启动文件的
13、时候,需要将选择文件类型更改为All files才能看得到这个文件),USER目录下面需要添加的文件为main.c、stm32f10x_it.c、system_stm32f10x.c。图2.29 添加过后的CORE图2.30 添加过后的USER(11) 在编译工程之前要先选择编译中间文件编译后存放目录。方法是点击魔术棒,然后选择Output选项下面的“Select folder for objects”,然后选择目录为新建的OBJ目录。这里需要注意,如不设置Output路径,那么默认的编译中间文件存放目录就是Keil MDK5自动生成的Objects目录和Listings目录。图2.31 更改
14、Output路径(12) 添加头文件路径。对于任何一个工程,都需要把工程中引用到的所有头文件的路径都包含到进来。回到工程主菜单,点击魔术棒,出来一个弹窗,然后点击c/c+选项。然后点击Include Paths右边的按钮。弹出一个添加path的对话框,然后我们将如图2.33的3个目录添加进去。注意:Keil5只会在一级目录查找,所以如果你的目录下面还有子目录,记得path一定要定位到最后一级目录。然后点击OK。图2.32 添加头文件路径(13) 编译工程。可以看到出现很多错误。这是因为3.5版本的库函数在配置和选择外设的时候通过宏定义来选择的,所以需要配置一个全局的宏定义变量。打开c/c+界面
15、,然后填写“STM32F10X_HD,USE_STDPERIPH_DRIVER”到Define输入框里面。(注意:实训平台使用的时STM32F103ZET6位大容量芯片,所以填写STM32F10X_HD,如果是中容量那么STM32F10X_HD修改为 STM32F10X_MD,小容量修改为STM32F10X_LD。)然后点击OK。图2.33 通过宏定义选择外设(14) 这次在编译之前,打开工程USER下面的main.c,复制下面一段代码到main.c覆盖已有代码,然后进行编译。(记得在代码的最后面加上一个回车,否则会有警告,这是软件本身的bug,与代码无关)可以看到,这次编译已经成功了。#in
16、clude stm32f10x.h void Delay(u32 count) /延迟函数 u32 i=0; for(;iPB.5 端口配 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /IO口速度为50MHGPIO_Init(GPIOB, &GPIO_InitStructure); /初始化 GPIOB.5 GPIO_SetBits(GPIOB,GPIO_Pin_5); /PB.5 输出高 GPIO_Init(GPIOE, &GP
17、IO_InitStructure); /初始化 GPIOE.5 GPIO_SetBits(GPIOE,GPIO_Pin_5); /PE.5 输出高 while(1) GPIO_ResetBits(GPIOB,GPIO_Pin_5); /PB.5 输出低 Delay(3000000); /延迟GPIO_SetBits(GPIOB,GPIO_Pin_5); Delay(3000000); 图2.34 编译工程可以看到0个错误,0个警告。到此工程就建立完成了。图2.35 编译结果到了这里建立工程文件结束,可以明显感受到建立工程模版的步骤十分复杂。所以在以后实验里,可以直接拿本实验中建好的工程模版使用
18、。软件仿真(1)单击魔术棒,单击Target,将晶振改为8MHZ。图2.36 设置晶振(2) 单击Debug选项,选择:Use Simulator,使用软件仿真。选择:Run to main(),即跳过汇编代码,直接跳转到main函数开始仿真。设置下方的:Dialog DLL分别为:DARMSTM.DLL和TARMSTM.DLL,Parameter均为:-pSTM32F103ZE,用于设置支持STM32F103ZE的软硬件仿真(即可以通过Peripherals选择对应外设的对话框观察仿真结果)。最后点击OK,完成设置。 图2.37 软件仿真配置(3) 配置完成后点击OK。打开软件仿真。图2.3
19、8 开始仿真(4) 调用示波器。图2.39 打开示波器(5) 先点击红框内的小方框,然后点击Setup输入PORTB.5点击回车:图2.40 添加监控GPIOB.5出现下图所示,点击Close。图2.41 添加成功(6) 点击运行。图2.42 开始运行(7) 运行十秒钟左右点击停止。图2.43 仿真结束(8) 观察波形,测量高电平和低电平的时间间隔。如果观察不到波形。可以在上面找到Auto,点击就会自动调整。(上方红色小框)图2.44 观察示波器(9) 比较测量的时间与设定的时间的误差并分析其原因。下载程序到实训平台(1) 接上J-Link V8,并把Jlink插到实训平台上,打开Option
20、s for Target选项卡,在Debug栏选择使用J-LINK/ J-TRACE Cortex,如下图。图2.45 选择JLINK下载(2) 点击Settings,进入下图所示界面。图2.46 选择下载模式(3) 如果提示keil cannot load driver JL2CM3.dll,需要配置系统环境。自行XX进入设置系统环境变量的方法。(出现这种情况大部分是由于在电脑的用户名为中文用户名)图2.47 更改环境变量(4) 填写完后,点击确定即可进入下一步。然后:点击Flash Download,进行如下设置图2.48 下载配置(5) 点击确定,返回之前那个界面然后,点击Utilities按钮,在设置完之后,点击OK,回到IDE界面。图2.49 选择Use Debug Driver(6) 为了能直观的观察效果,我们为PB5接一个灯,这样就可以控制LED灯的闪烁。也可使用示波器观察实际输出波形。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1