Keil如何进行stm32的程序开发.docx

上传人:b****7 文档编号:10983412 上传时间:2023-02-24 格式:DOCX 页数:14 大小:416.83KB
下载 相关 举报
Keil如何进行stm32的程序开发.docx_第1页
第1页 / 共14页
Keil如何进行stm32的程序开发.docx_第2页
第2页 / 共14页
Keil如何进行stm32的程序开发.docx_第3页
第3页 / 共14页
Keil如何进行stm32的程序开发.docx_第4页
第4页 / 共14页
Keil如何进行stm32的程序开发.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

Keil如何进行stm32的程序开发.docx

《Keil如何进行stm32的程序开发.docx》由会员分享,可在线阅读,更多相关《Keil如何进行stm32的程序开发.docx(14页珍藏版)》请在冰豆网上搜索。

Keil如何进行stm32的程序开发.docx

Keil如何进行stm32的程序开发

使用Keil进行stm32的程序开发

本章的上一节向读者介绍了KeilMDK的安装流程与在KeilMDK的μVision4集成开发环境下进行stm32工程的建立方法。

本节我们就来看看如何使用KeilMDK开发工具进行stm32应用程序的开发。

在此之前有必要向大家介绍几个名词,Keil、MDK、μVision4、RealView、RVCT、JLINK还有RVDS,这些名词分别表示什么,有什么从属关系呢?

相信很多读者并没有明确的概念,现在简单的说明一下:

Keil:

这个大家应该最为熟悉,Keil其实是一家公司的名字,而这家Keil公司由两家私人公司联合运营,分别是德国慕尼黑的KeilElektronikGmbH和美国德克萨斯的KeilSoftware组成。

大家很熟悉的keilC51就是从KeilSoftware手中诞生的。

但是在2005年,Keil公司被ARM公司收购。

值得一提的是,Keil公司只有区区20多名员工,却仍然做出了伟大的作品。

MDK:

MDK全称MicrocontrollerDevelopKit,意为微控制器开发套件。

ARM收购Keil公司的意图在于进军微控制器(也就是我们常说的单片机)领域,MDK就是这种意图下的产物。

但我们一般仍称之为KeilMDK而不是ARMMDK,KeilMDK作为一个套件,包含了一系列软件模块。

包括Keil公司的IDE环境”μVision”,ARM公司的编译器RVCT,Flash烧写软件模块等。

μVision4:

μVision4是Keil公司的IDE环境”μVision”的第四个版本,从根本上来说μVision4是一个开发环境,并不必须包含编译器、仿真、烧写等模块。

比如AVR单片机的一个开发环境WinAVR(又称GCCAVR)就不包含仿真调试器,也不包含烧写模块。

值得一提的是,家喻户晓的KeilC51正是基于μVision2开发环境,所以μVision4的界面和μVision2非常的相似,很有利于广大习惯于μVision2开发环境的开发人员转向使用μVision4进行stm32的开发。

RealView:

是ARM公司编译工具的名称。

其首字母就是下文提到的RVCT中的’R’。

RVCT:

全称为RealViewCompilationTools,意为RealView编译工具。

是ARM公司针对自身ARM系列CPU开发的编译工具,其主要由:

●ARM/Thumb汇编器armasm

●连接器armlink

●格式转换工具fromelf

●库管理器armar

●C和C++应用程序库

●工程管理

组成,这些模块都被嵌入到了集成KeilμVision4开发环境里(但绝不仅是KeilμVision4)。

值得一提的是,ARM公司作为ARM处理器的设计者,其编译工具RVCT的性能与表现是无与伦比的,没有任何一套编译工具能取代其成为首选。

RVDS:

全称为RealViewDeveloperSuite,意为RealView开发套件。

是ARM公司为方便用户在ARM芯片上进行应用软件开发而推出的一整套集成开发工具。

该套工具包括软件开发套件和硬件仿真工具,是软硬件结合的套件。

RVDS的价格十分的高昂,但功能也十分的强大,基本不会在普通企业和个人用户手中出现。

J-Link:

J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。

配合IAREWAR,ADS,KEIL,WINARM,RealView等集成开发环境支持所有ARM7/ARM9/Cortex内核芯片的仿真,通过RDI接口和各集成开发环境无缝连接,操作方便、连接方便、简单易学,是学习开发ARM最好最实用的开发工具。

笔者使用的就是J-Link仿真器,并且推荐各位读者使用J-Link仿真器进行stm32工程的开发。

OK,名词解释完毕,相信各位读者看完之后,以后不会再秉持“我使用Keil编译器……”或者“我正在下载RVDS……”这种看似内行本质外行的言论了^_^。

本书选用KeilμVision4作为本书中工程实例的开发环境,原因在于其软件操作方式简单,功能齐全,有KeilC51开发经历的读者朋友可以很快上手。

而且作为ARM公司旗下根正苗红的IDE,相信ARM公司是不会让自家孩子在外边献丑的。

一般情况下,我们会使用IDE做以下事情:

1、编写程序代码。

2、编译程序。

3、烧写程序。

4、调试程序,包括查看变量、内存、寄存器,时间跟踪分析、甚至可以调用虚拟打印窗和虚拟逻辑分析仪用以显示程序输出。

5、输出需要的文件如Hex、Bin、Lib等……

我们就遵循以上几条思路,来看看我们的KeilμVision4如何实现这些功能。

首先请读者准备好一块至少拥有一个最小系统的stm32硬件环境,J-Link仿真器,然后依照上一节的办法建立一个stm32的工程,建立完毕后请将如下代码作为main.c文件的内容:

———————————————————————————————————————

#include"stm32f10x_lib.h"

u32Stm32IdHigh=0;

u32Stm32IdMed=0;

u32Stm32IdLow=0;

voidRccInitialisation(void);

intmain(void)

{

  RccInitialisation();

Stm32IdLow=*((u32*)0x1FFFF7E8);

Stm32IdMed =*((u32*)0x1FFFF7EC);

Stm32IdHigh=*((u32*)0x1FFFF7F0); 

while

(1);

}

voidRccInitialisation(void)

{

ErrorStatusHSEStartUpStatus;

  RCC_DeInit();

  RCC_HSEConfig(RCC_HSE_ON);

  HSEStartUpStatus=RCC_WaitForHSEStartUp();

  if(HSEStartUpStatus==SUCCESS)

  {

   RCC_HCLKConfig(RCC_SYSCLK_Div1); 

   RCC_PCLK2Config(RCC_HCLK_Div1); 

   RCC_PCLK1Config(RCC_HCLK_Div2);

   FLASH_SetLatency(FLASH_Latency_2);

   FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

   RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

   RCC_PLLCmd(ENABLE);

   while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);

   RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

   while(RCC_GetSYSCLKSource()!

=0x08);

  }

}

———————————————————————————————————————

键入如上代码完成后按下ctrl+S进行保存。

然后我们来看看在开始代码编译调试之前需要进行哪些设置工作。

 

1、右键点击project区工程组中的顶部”MyFirstJob“,在弹出的右键菜单中选择”OptionforTarget‘MyFirstJob’……”项,弹出设置窗口,如下图所示:

1.jpg(94.23KB)

2011-1-1400:

43

在弹出的设置窗口OptionforTarget‘MyFirstJob’中,请读者执行如下操作:

 

(1)切换到Debug标签,选择Use:

CortexM/RJ-LINK/J-Trace,勾选LoadApplicationatStartup,Runtomain()等,如下图所示:

2.jpg(96.74KB)

2011-1-1400:

43

 

 

(2) 切换到Utilities标签,选择UseTargetDriverForFlashProgramming,并选择CortexM/R 

J-LINK/J-Trace,点击Settings,在弹出的窗口中点击Add按钮,根据读者自身的stm32型号做出如下选择:

●如果使用的是stm32f103x4或stm32f103x6系列,则请选择STM32F10XLow-densityFlash;

●如果使用的是stm32f103x8或stm32f103xb系列,则请选择STM32F10XMed-densityFlash;

●如果使用的是stm32f103xc、stm32f103xd或stm32f103xe系列,则请选择STM32F10XHigh-densityFlash;

这里的High、Med、Low分别对应了stm32中各种型号中的大、中、小容量Flash型号。

笔者使用的是stm32f103rbt6,所以应该选择STM32F10XMed-densityFlash。

如下图所示:

3.jpg(97.02KB)

2011-1-1400:

43

选定后依次点击Add——OK,完成OptionforTarget‘MyFirstJob’的设置。

 

2、按下F7进行编译,无错误和警告提示。

 

3、在连接好硬件之后(包括J-link驱动的安装)按下ctrl+F5进入实时仿真状态,还需提及的是,ctrl+F5操作不仅仅表示进入了仿真调试状态,而且还把程序真正的烧写进了STM32的FLASH空间里。

 

4、可以看到进入仿真状态的KeilμVision4在界面上多了不少变化:

λ   * 多出调试工具栏:

其中上面分别有Reset(复位)、Run(全速运行)、Step(单步进入函数内部)、StepOver(单步越过函数)、StepOut(单步跳出函数)等图标;

λ   *  多出一个汇编跟踪窗口;

λ   * 多出一个命令提示窗口;

如下图所示:

4.jpg(123.65KB)

2011-1-1400:

43

 

当然这些窗口可以根据需要随时关闭或开启。

 

5、很值得说一下Reset(复位)、Run(全速运行)、Step(单步进入函数内部)、StepOver(单步越过函数)、StepOut(单步跳出函数)这几个按钮的作用:

Reset:

复位按钮,其作用是让程序回到程序的起始处开始执行,注意这相当于一次软复位,而不是硬件复位;

Run:

全速运行按钮,其作用是使程序全速运行;

Step:

单步进入函数内部按钮,如果当前语句是一个函数调用(任何形式的调用),则按下此按钮进入该函数,但只运行一句C代码;

StepOver:

单步越过,无论当前是任何功能的语句,按下此按钮后都会执行至下一条语句;

StepOut:

单步跳出函数,如果当前处于某函数内部,则按下此按钮则运行至该函数退出后的第一条语句;

此外经常用到的还有两个按钮:

“Start/StopDebugSession”、“Insert/RemoveBreakpoint”,分别是“开启/关闭调试模式”和“插入/解除断点”,分别对应快捷键Ctrl+F5和F9。

最后笔者建议读者应该尽快熟悉这些调试工具按钮所对应的快捷键,如全速运行Run按钮对应F5按键,单步运行Step对应F10按键等。

熟悉使用这些快捷键一定能极大地提高调试程序的效率。

 

6、首先请读者是光标停留在程序中“while

(1);”一句所在行,按下F9设置断点,并随即按下F5执行全速运行。

很快可以看到程序停在了while

(1);一行,如下图所示。

因为程序很短小,对于72MHz主频的STM32来说,花费的时间只有几个us。

5.jpg(78.7KB)

2011-1-1400:

43

 

 

7、解释一下该程序的作用,首先在程序顶部进行三个外部变量Stm32IdHigh、Stm32IdMed、Stm32IdLow的定义。

随后调用RccInitialisation()函数对STM32的时钟进行配置。

然后读出STM32整个存储空间中起始地址为0x1FFFF7E8、0x1FFFF7EC、0x1FFFF7F0的数据,分别保存在三个外部变量中。

事实上,这三个地址所存放的是STM32本身所自带的全球唯一身份识别码(ID)。

每一片STM32都拥有与任何其他一片任何型号的STM32器件不同的ID码,这对数据加密有重要意义。

 

8、如何查看变量的值呢?

有两种办法,一是将光标置于该变量上,大约1秒钟之后该变量的值会在光标附近浮现。

这种方法经常使用在仅仅查看单个变量的值的情形中。

第二种办法是使用μVision4的Watch窗口,操作流程如下:

依次点击View——WatchWindows——Watch1/Watch2,此时会根据选择出现Watch1或Watch2窗口。

随后使用光标拖选想要查看的变量并拖放到该Watch中即可查看到该变量的当前值。

将三个变量都添加进Watch1窗口之后,界面如下所示:

6.jpg(94.75KB)

2011-1-1400:

43

可以看到这三个变量的值分别为Stm32IdHigh=0x87203743、Stm32IdMed=0x51508248、Stm32IdLow=0x066Bff52。

 

9、我们都知道,变量一定是存放在STM32内部的存储空间中(无论是FLASH空间还是RAM空间),那理所当然的这些存储空间应该也是可以查看的。

操作流程如下:

依次点击View——MemoryWindows——Memory1/Memory2/Memory3/Memory4,此时根据选择出现Memory窗口。

在该Memory窗口中填入所要查看的存储地址(此处填入0x1FFFF7E8,注意前面的0x不能省略),按下回车键后Memory窗口的内容发生跳转,如下图所示:

7.jpg(119.17KB)

2011-1-1400:

43

 

我们可以看到,从0x1FFFF7E8地址处开始的数据分配情况如下:

0x1FFFF7E8:

52FF6B06

0x1FFFF7EC:

48825051

0x1FFFF7F0:

43372087

……

在第8点的时候我们列出了Stm32IdHigh、Stm32IdMed、Stm32IdLow三个变量的值分别为Stm32IdLow=0x066Bff52、Stm32IdMed=0x51508248、Stm32IdHigh=0x87203743。

细心的读者可以发现存储区空间的数据和这三个变量有这“一样”却有“不一样”的地方。

一样在于数据的大小是一致吻合的,不一样在于数据的排列顺序却颠倒了。

这就是所谓的小端格式:

低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。

(注意Memory窗口中,地址是从左往右,从上往下递增的)

 

10、此外μVision4开发环境中较为经常用到的功能还有文件查找(FindinFiles)、分析仪(AnalysisWindow)、寄存器组(RegisterWindow)等。

这些功能模块可以在菜单栏里面轻易地找到并启用。

以上就是使用KeilMDK开发工具进行STM32开发应用的所必须的基本操作,读者要在接触KeilMDK的早期熟悉软件的基本使用方法,并在此基础上逐步探索KeilMDK的一些高级功能,特别是一系列快捷键的使用,对日后进行程序开发必定大有裨益。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 药学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1