本文主要叙述Keil的环境配置,stm32库的安装,使用keil编写简单的程序、hex的简单分析及程序的仿真调试。
系统环境:Windows 10
本文主要使用的软件:Keil μVision5、
Keil的环境配置
1.Keil的介绍
keil公司是一家业界领先的微控制器软件开发工具的独立供应商。keil公司于2005年被ARM公司收购。keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。keil μVision就是一个IDE,类似于C\C++语言的Visual C++、Dev C++,python的pycharm、jave的eclipse、IntelliJ IDEA等,当keil μVision的功能不止于此,是连接硬件和软件的“桥梁”。
2.MDK531的安装
下面简单介绍一下keil μVision5的安装。
mdk软件可以在Keil的官网上面下载。以MDK531为例,首先右键安装程序,以管理员身份运行安装程序。
进入到程序安装的界面,点击Next。
勾选I agree to all the terms of the preceding License Agreement,然后点击Next。
点击Browse按钮,可以分别更改Core、Pack的安装目录。其中Pack是安装的包的位置,我这里选择的是D盘目录下的位置。
接下我们要选择安装这个设备软件(可以选择不安装,自己另行安装),点击安装按钮。
之后继续点击Next按钮即可。
安装完成Keil后,Keil会弹出一个窗口,用于包的安装。由于不同芯片需要的环境不相同,所以需要安装相对应的包来适应相对应的芯片。如stm32f1XX芯片,就需要安装Keil.STM32F1xx_DFP.2.1.0.pack。由于这个程序是访问境外的网站来下载相应的包,所以下载速度缓慢,我们可以安装已经下好的包。下面介绍一下stm32f1XX系列的包的安装。
3.stm32库的安装
右键Keil.STM32F1xx_DFP.2.1.0.pack,以管理员身份运行,点击Next,等待安装即可。
注意,Keil软件需要激活使用,否则部分功能无法正常使用,具体请自行搜索。
在Keil中创建stm工程
首先创建文件夹test(建议目录中不要含有中文),keil工程会产生很多其他的文件,建议单独创建文件夹来存放keil工程文件。打开Keil μVision5,依次点击Project->New μVision Project…。
选择我们刚刚创建的文件夹。
输入工程名,点击保存(S)。
接下来选择单片机的芯片,这里以stm32f103c8芯片为例,依次选择STMicroelectronics->STM32F1 Series->STM32F103->STM32F103C8,读者请根据自己的芯片自行选择。
在Manage Run-Time Environment界面,勾选CMSIS下的CORE和Device下的StartUp。因为需要有启动程序,来使单片机芯片可以正常执行我们编写的代码。
点击Target1左边的+号,右键Source Group 1,添加新的文件,点击Add New Item to Group ‘Source Group 1’…。
这里以汇编文件为例(结尾为s),点击文件类型,然后输入文件名,最后点确定。
在空白文件中输入以下代码(此代码来源自网络,如有侵权请联系我删除)。
AREA MYDATA, DATA
AREA MYCODE, CODE
ENTRY
EXPORT __main
__main
MOV R0, #10
MOV R1, #11
MOV R2, #12
MOV R3, #13
;LDR R0, =func01
BL func01
;LDR R1, =func02
BL func02
BL func03
LDR LR, =func01
LDR PC, =func03
B .
func01
MOV R5, #05
BX LR
func02
MOV R6, #06
BX LR
func03
MOV R7, #07
MOV R8, #08
BX LR
依次点击1(编译)、2(构建),没有报错,说明程序正常。
Keil程序的仿真调试
分析Hex文件
hex文件格式是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式有很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex。我们可以将hex烧录进单片机(串口烧录),这是一种最原始的烧录方式。在编译程序前,我们需要简单设置一下keil来生成hex文件。点击“魔法棒”或者在Project目录下选择Options for Target…(快捷键Alt+F7)。
点击Output菜单,勾选Create HEX File。
接着在主窗口再次编译工程,此时便可以生成HEX文件。在工程目录下,打开Objects文件夹,找到hex结尾的文件,使用记事本打开HEX文件,如下图。
第一行数据:020000040800F2,其实质表达的是十六进制的数据0x02 0x00 0x00 0x04 0x08 0x00
0xF2。第一个字节 0x02表示本行数据的长度;第二、三字节 0x00 0x00表示本行数据的起始地址;第四字节
0x04表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。
- ‘00’ Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录
- ‘01’ End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾
- ‘02’ Extended Segment Address Record: 用来标识扩展段地址的记录
- ‘03’ Start Segment Address Record:开始段地址记录
- ‘04’ Extended Linear Address Record: 用来标识扩展线性地址的记录
- ‘05’ Start Linear Address Record:开始线性地址记录
4.然后是数据,0x08 0x00
5.最后一个字节 0xf2为校验和。
具体可以参考一下CSDN上hex文件说明这篇文章,这里不做过多叙述。
常见问题
本实验在没有外接单片机的条件下调试,所以我们需要设置一下keil。点击“魔法棒”或者在Project目录下选择Options for Target…。再点击Debug菜单,我们需要勾选Use Simulator。由于本次实验采用软件仿真,所以勾选此选项可以直接使用keil来实现软件仿真。如果读者有设备可以选择JLink或者STLink来进行仿真。接下来,需要修改Dialog DLL的内容,本次仿真实验采用是STM32F103C8芯片,所以在Dialog栏填写DARMSTM.DLL,在Parameter栏填写了-pSTM32F103C8。
Keil程序的仿真
在确保已经构建的情况下,点击Start/Stop Debug Session(Ctrl+F5)按钮进行调试。该按钮可以在菜单栏找到,或者在Debug菜单下,第一个点击第一个菜单项。
建议设置断点以观察在执行main函数时,寄存器发生的变化。(断点设置可以采用在代码行的左边用鼠标左键单击的方法)
结尾
在了解ARM、Keil、stm32后,下一步便是使用硬件来进行实验。接下来笔者将使用采用了stm32f103c8t6芯片的最小系统板来进行相关实验,敬请期待。
"> 最后一次编辑为2021年9月27日