MDK-Keil安装及其使用指南

目录标题

  • 一、Keil的下载与安装
  • 1.keil介绍
  • 2.keil安装步骤
  • 3.keil注册激活
  • 4.STM32F10 Pack包的安装
  • 二、Keil创建工程
  • 1.新建工程
  • 2.新建text.s文件
  • 3.修改配置
  • 4.在.s文件中编写代码
  • 5.分析HEX文件
  • 三、HEX文件
  • 1.介绍
  • 2.hex文件记录格式
  • 3.数据记录
  • 四、总结
  • 五、参考文献
  • 一、Keil的下载与安装

    1.keil介绍

    Keil 是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供 了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision) 将这些部分组合在一起。

    运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果使用C语言编程,那么Keil几乎是不二之选,即使不使用C语言而仅用汇编语言编程,其集成环境强大的软件仿真调试也会令事情事半功倍。

    2.keil安装步骤

    (1)下载完keil5压缩包,鼠标右键解压。

    (2)打开文件,找到“mdk536”,右键“以管理员身份运行”

    (3)点击“Next>>”

    (4)勾选“I agree to all the terms of…”,然后点击“Next>>”

    (5)点击“Browse”,两个都安装到其他盘(不建议c盘),再点击“Next>>”

    (6)四个内容随便填,再点击“Next>>”

    (7)等待安装

    (8)点击“Finish”,结束。

    3.keil注册激活

    (1)双击打开“keil uVision5”

    (2)点击菜单栏File,然后点击License选项。

    (3)复制左上角的ID号

    (4)在解压文件夹中找到“keygen”,鼠标右键“以管理员身份运行”。

    (5)复制CID中的内容,将其粘贴到①中,然后选择②“Target”选项框中ARM选项,再点击“Generate”,然后复制生成内容

    (6)将其粘贴“New license”中然后点击“Add LIC”。点击“close”,即安装完成!

    4.STM32F10 Pack包的安装

    (1)进入keil中,点击“pack installer”组件

    (2)在“device”中点击“STM……”开头的文件,点击“+”号,找到“STM32F1 series”

    (3)在右侧的菜单栏中,找到对应的软件包下载即可。之前已经装过pack,因此显示已安装。

    二、Keil创建工程

    1.新建工程

    (1)点击“project”-“new μVision project”,之后“Ctrl+s”保存工程。

    (2)工程建好后,会弹出“芯片选型”窗口,在此界面下进行芯片选型;

    (3)芯片选型结束后,出现配置窗口,勾选对应选项,点击OK即可;

    2.新建text.s文件

    (1)点击“source”,右键“Add new item to…”,新建文件,之后“Ctrl+s”保存文件,文件命名为text.s
    注意:一定要以.s结尾,汇编语言,否则会出错

    3.修改配置

    (1)生成HEX文件,点击“魔法棒按钮”-“ouput”,将“Create Hex file”选项勾选起来

    (2)修改“Debug”模式为“软件仿真”。依旧点开“魔法棒”-“Debug”,修改为“Use Simulater”。

    其中,修改Dialog DLL内容:DARMSTM.DLL;修改Parameter:-p+芯片型号选型

    4.在.s文件中编写代码

    (1)写入如下程序:

     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
    

    (2)编译,按菜单栏上的“下载”按钮。

    (3)调试。
    按下菜单栏“D”按钮,进入调试

    ————————————————————————
    知识充电站
    ————————————————————————

    调试常用按钮介绍:

    序号 Value
    1 将程序复位到主函数开始处
    2 全速运行程序,运行时不停止
    3 停止全速运行(在全速运行时激活)
    4 下一步(语句依次执行)
    5 下一步(在主函数中按行依次执行,不会进入子函数)
    6 在进入子函数内部时激活,执行完剩余子函数命令,并进入主函数
    7 程序运行至光标选中行
    8 显示/隐藏编译窗口,可以查看C语言编译后对应的汇编语言
    9 显示/隐藏变量观察窗口,可以查看当前变量值

    ———————————————————————— 经过单步调试发现:寄存器中所存的值与程序设置的相同。 ![在这里插入图片描述](https://i3.wp.com/img-blog.csdnimg.cn/c82d334a051f4775b6d1f10d14d95ed0.png)

    5.分析HEX文件

    (1)首先在object文件中找到HEX文件:

    (2)通过记事本的形式打开hex文件,其内容是这样的:

    :020000040800F2
    :100000000006002031010008390100083B0100080A
    :100010003D0100083F010008410100080000000008
    :100020000000000000000000000000004301000884
    :1000300045010008000000004701000849010008D0
    :100040004B0100084B0100084B0100084B01000860
    :100050004B0100084B0100084B0100084B01000850
    :100060004B0100084B0100084B0100084B01000840
    :100070004B0100084B0100084B0100084B01000830
    :100080004B0100084B0100084B0100084B01000820
    :100090004B0100084B0100084B0100084B01000810
    :1000A0004B0100084B0100084B0100084B01000800
    :1000B0004B0100084B0100084B0100084B010008F0
    :1000C0004B0100084B0100084B0100084B010008E0
    :1000D0004B0100084B0100084B0100084B010008D0
    :1000E0004B0100084B0100084B0100084B010008C0
    :1000F0004B0100084B0100084B0100084B010008B0
    :100100004B0100084B0100084B0100084B0100089F
    :100110004B0100084B0100084B0100084B0100088F
    :100120004B0100084B0100084B0100084B0100087F
    :100130000948804709480047FEE7FEE7FEE7FEE77B
    :10014000FEE7FEE7FEE7FEE7FEE7FEE704480549B7
    :10015000054A064B7047000041020008990200085A
    :100160000000002000060020000200200002002005
    :10017000704770477047000080B500F001F880BDFF
    :1001800082B041F204000021C4F20200019100910A
    :1001900050F8041C41F4803140F8041C50F8041C51
    :1001A00001F400310091019901310191009919B9CF
    :1001B0000199B1F5A06FF1D150F8041C890354BF27
    :1001C0000021012100910099012936D142F200015C
    :1001D000C4F202010A6842F010020A600A6822F0C2
    :1001E00007020A600A6842F002020A6001680160C0
    :1001F00001680160016841F480610160016821F4D7
    :100200007C110160016841F4E811016050F8041CA0
    :1002100041F0807140F8041C50F8041C8901FBD5A2
    :10022000016821F003010160016841F002010160F1
    :10023000016801F00C010829FAD102B070470000F2
    :1002400080B541F20000C4F202000168002241F0D2
    :10025000010101604168CFF6FF0211404160016871
    :100260004FF6FF72CFF6F66211400160016821F48B
    :1002700080210160416821F4FE0141604FF41F01BB
    :100280008160FFF779FF4EF60850CEF200004FF084
    :100290000061016080BD00004FF00A004FF00B01CB
    :1002A0004FF00C024FF00D0300F009F800F00AF8CF
    :1002B00000F00BF8DFF81CE0DFF81CF0FEE74FF071
    :1002C000050570474FF0060670474FF007074FF0DF
    :0C02D00008087047BF020008CB020008BD
    :040000050800029954
    :00000001FF
    

    该文件为16进制的一串字符。hex文件的第一排字符称之为扩展线性地址记录,也称为32位地址记录或HEX386记录。

    在第一行数据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:开始线性地址记录;

    然后是数据,0x08 0x00

    最后一个字节 0xf2为校验和。

    三、HEX文件

    1.介绍

    HEX 文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII 文本文件。在Intel HEX 文件中,每一行包含一 个 HEX 记录 。 这些记录由对应机器语言码和/或常量数据的十六 进 制编码数字组成。

    HEX 文件通常用于传输将被存于ROM 或者EPROM 中的程序和数据。大多数EPROM 编程器或模拟器使用HEX 文件。

    2.hex文件记录格式

    (1)域

    Intel HEX由任意数量的十六进制记录组成。每个记录包含5个域,它们按以下格式排列::llaaaatt[dd...]cc

    每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字。每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样:

    每个Intel HEX记录都由冒号开头.

    (2)ll 是数据长度域
    它代表记录当中数据字节(dd)的数量。

    (3)aaaa 是地址域
    它代表记录当中数据的起始地址。

    (4)tt 是代表HEX记录类型的域
    它可能是以下数据当中的一个:
    00 – 数据记录
    01 – 文件结束记录
    02 – 扩展段地址记录
    04 – 扩展线性地址记录

    (5)dd 是数据域
    它代表一个字节的数据。一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符。

    (6)cc 是校验和域
    它表示这个记录的校验和。校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足。

    3.数据记录

    Intel HEX文件由任意数量以回车换行符结束的数据记录组成。数据记录外观如下:
    :10246200464C5549442050524F46494C4500464C33
    其中:
    10代表这个记录当中数据字节的数量。
    2462 :数据将被下载到存储器当中的地址。
    00 :记录类型(数据记录)
    464C…464C是数据。
    33: 记录的校验和。

    四、总结

    在创建.s文件时,忘记将该文件拖入工程中,导致在编译时未通过,提示Target not created.之后经过检查以及查阅资料,发现是因为未将文件加入创建的工程中。以后可以直接通过点击“source”,右键“Add new item to…”,新建文件的方式,避免错误的发生!

    五、参考文献

    1.https://blog.csdn.net/qq_45659777/article/details/120496577

    2.https://blog.csdn.net/OverWatcher/article/details/80069438

    3.https://blog.csdn.net/weixin_43822014/article/details/108917904

    物联沃分享整理
    物联沃-IOTWORD物联网 » MDK-Keil安装及其使用指南

    发表评论