一、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,
MOV R1,
MOV R2,
MOV R3,
;LDR R0, =func01
BL func01
;LDR R1, =func02
BL func02
BL func03
LDR LR, =func01
LDR PC, =func03
B .
func01
MOV R5,
BX LR
func02
MOV R6,
BX LR
func03
MOV R7,
MOV R8,
BX LR
(2)编译,按菜单栏上的“下载”按钮。
(3)调试。 按下菜单栏“D”按钮,进入调试
------------------------------------------------------------------------ 知识充电站 ------------------------------------------------------------------------
调试常用按钮介绍:
序号 | Value |
---|
1 | 将程序复位到主函数开始处 | 2 | 全速运行程序,运行时不停止 | 3 | 停止全速运行(在全速运行时激活) | 4 | 下一步(语句依次执行) | 5 | 下一步(在主函数中按行依次执行,不会进入子函数) | 6 | 在进入子函数内部时激活,执行完剩余子函数命令,并进入主函数 | 7 | 程序运行至光标选中行 | 8 | 显示/隐藏编译窗口,可以查看C语言编译后对应的汇编语言 | 9 | 显示/隐藏变量观察窗口,可以查看当前变量值 |
------------------------------------------------------------------------ 经过单步调试发现:寄存器中所存的值与程序设置的相同。 ![在这里插入图片描述](https://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
|