文章目录
- 一、keil的安装
- 二、安装stm32 pack
- 三、keil 的简单设置
- 四、基于STM32汇编程序的编写
- 4.1 新建工程
- 4.2 新建test.s文件
- 4.3 编译程序
- 4.4 分析HEX文件
- 五、总结
- 六、参考资料
一、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, DATAAREA MYCODE, CODEENTRYEXPORT __main__mainMOV R0, #10MOV R1, #11MOV R2, #12MOV R3, #13;LDR R0, =func01BL func01;LDR R1, =func02BL func02BL func03LDR LR, =func01LDR PC, =func03B .func01MOV R5, #05BX LRfunc02MOV R6, #06BX LRfunc03MOV R7, #07MOV 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工程
















