文章目录
一、keil的安装
- 双击打开mdk_510.exe应用程序文件,点击Next>>。
- 勾选I agree…后,点击Next>>。
- 选择安装路径,并点击Next>>。
- 随意输入Name和E-mail,再点击Next>>。
- 点击安装
- 点击Finish。
- 点击OK后,鼠标会变成转圈圈的,因为正在进行在线安装各种pack,但会安装失败,不用着急,右上角关掉窗口,下面开始手动安装pack包。
二、安装stm32 pack
- 在刚解压缩的文件中,双击打开
ARM.CMSIS.3.20.4
包,出现安装界面后点击Next>>,开始安装。
- 点击Finish。
- 在刚解压缩的文件中,双击打开
Keil.STM32F1xx_DFP.1.0.4
包,出现安装界面后点击Next>>,开始安装。
- 安装结束后点击Finish。
- 当双击2.2.0的STM32 pack时,会出现安装失败,是因为2.2.0版本的pack只支持更高版本的keil软件,如若想安装上这个pack,可以去下载最新的keil,这里我们只做学习用,1.0.4版本的足够了。
三、keil 的简单设置
下载好了 keil 后,我们需要进行一些简单的设置
-
首先点击Edit→Configuration…,或者直接点工具栏的扳手图标,进入设置界面。
-
设置编码形式为
Chinese GB2312(Simplified)
,如果不设置,你从其它地方粘贴过来的代码含有中文的话,就会出现乱码,然后设置Tab size
为4。
-
进入
Color & Fonts
,选中C/C++ Editor files
,选中中间窗口内的元素后,可以在右侧修改样式,比如设置字体、大小、颜色、背景,Sample是设置后预览效果。
四、基于STM32汇编程序的编写
现在安装好了 keil 和 stm32 包,就来开始一个 stm32 的简单程序的编译。
4.1 新建工程
- 打开
Keil uVision5
,并新建一个工程。
- 在左侧的窗口内选择STM32芯片,这里我们选择
STM32F103RB
,并保存。
- 勾选相应的选项,并点击OK,这样工程创建完毕。
4.2 新建test.s文件
-
右键
Source Group
,选择Add New Item ...
-
添加
test.s
文件
-
然后将下列代码复制粘贴到
test.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
- 仿真器设置
4.3 编译程序
点击左上角编译按钮,开始编译程序,此时0错误,0警告,表示编译成功。
可以看到寄存器R5、R6、R7、R8的值和程序设置的一样。
4.4 分析HEX文件
- .hex文件是什么:
它是由一行行符合
Intel HEX
文件格式的文本所构成的ASCII
文本文件。每一行包含一 个 HEX 记录 ,由对应机器语言码和/或常量数据的十六进制编码数字组成。Hex
文件通常用于传输将被存于ROM
或者EPROM
中的程序和数 据。大多数EPROM 编程器或模拟器使用Intel HEX
文件。Hex
文件是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex
文件的方式由很多种,可以通过不同的编译器将C程序或者汇编程序编译生成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
:1001E00003020A600A6842F002020A6001680160C4
: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。具体含义为:
1.第一个字节 0x02 表示本行数据的长度;
2.第二三字节 0x00 0x00 表示本行数据的起始地址;
3.第四字节 0x04 表示数据类型;
4.然后是数据 0x08 0x00;
5.最后一个字节 0xf2 为检验和。
五、总结
通过本次实验,了解了HEX
的文件的内容,以及熟悉了对烧录代码到STM32的流程,受益匪浅。
六、参考资料
搭建并配置Keil嵌入式开发环境,完成一个基于STM32汇编程序的编写
ARM汇编基础之基于MDK创建纯汇编语言的STM32工程