ARM汇编语言编程入门实践

文章目录

  • 一、keil的安装
  • 二、安装stm32 pack
  • 三、keil 的简单设置
  • 四、基于STM32汇编程序的编写
    • 4.1 新建工程
    • 4.2 新建test.s文件
    • 4.3 编译程序
    • 4.4 分析HEX文件
  • 五、总结
  • 六、参考资料

一、keil的安装

  1. 双击打开mdk_510.exe应用程序文件,点击Next>>。ARM汇编语言编程入门实践_第1张图片
  2. 勾选I agree…后,点击Next>>。
    ARM汇编语言编程入门实践_第2张图片
  3. 选择安装路径,并点击Next>>。
    ARM汇编语言编程入门实践_第3张图片
  4. 随意输入Name和E-mail,再点击Next>>。
    ARM汇编语言编程入门实践_第4张图片
  5. 点击安装
    ARM汇编语言编程入门实践_第5张图片
  6. 点击Finish。
    ARM汇编语言编程入门实践_第6张图片
  7. 点击OK后,鼠标会变成转圈圈的,因为正在进行在线安装各种pack,但会安装失败,不用着急,右上角关掉窗口,下面开始手动安装pack包。
    ARM汇编语言编程入门实践_第7张图片

二、安装stm32 pack

  1. 在刚解压缩的文件中,双击打开ARM.CMSIS.3.20.4包,出现安装界面后点击Next>>,开始安装。
    ARM汇编语言编程入门实践_第8张图片
  2. 点击Finish。
    ARM汇编语言编程入门实践_第9张图片
  3. 在刚解压缩的文件中,双击打开Keil.STM32F1xx_DFP.1.0.4包,出现安装界面后点击Next>>,开始安装。
    ARM汇编语言编程入门实践_第10张图片
  4. 安装结束后点击Finish。
    ARM汇编语言编程入门实践_第11张图片
  5. 当双击2.2.0的STM32 pack时,会出现安装失败,是因为2.2.0版本的pack只支持更高版本的keil软件,如若想安装上这个pack,可以去下载最新的keil,这里我们只做学习用,1.0.4版本的足够了。
    ARM汇编语言编程入门实践_第12张图片

三、keil 的简单设置

下载好了 keil 后,我们需要进行一些简单的设置

  1. 首先点击Edit→Configuration…,或者直接点工具栏的扳手图标,进入设置界面。
    ARM汇编语言编程入门实践_第13张图片

  2. 设置编码形式为Chinese GB2312(Simplified),如果不设置,你从其它地方粘贴过来的代码含有中文的话,就会出现乱码,然后设置Tab size为4。
    ARM汇编语言编程入门实践_第14张图片

  3. 进入Color & Fonts,选中C/C++ Editor files,选中中间窗口内的元素后,可以在右侧修改样式,比如设置字体、大小、颜色、背景,Sample是设置后预览效果。
    ARM汇编语言编程入门实践_第15张图片

四、基于STM32汇编程序的编写

现在安装好了 keil 和 stm32 包,就来开始一个 stm32 的简单程序的编译。

4.1 新建工程

  1. 打开Keil uVision5,并新建一个工程。
    ARM汇编语言编程入门实践_第16张图片ARM汇编语言编程入门实践_第17张图片
  2. 在左侧的窗口内选择STM32芯片,这里我们选择STM32F103RB,并保存。
    ARM汇编语言编程入门实践_第18张图片
  3. 勾选相应的选项,并点击OK,这样工程创建完毕。
    ARM汇编语言编程入门实践_第19张图片

4.2 新建test.s文件

  1. 右键Source Group,选择Add New Item ...
    ARM汇编语言编程入门实践_第20张图片

  2. 添加test.s文件
    ARM汇编语言编程入门实践_第21张图片

  3. 然后将下列代码复制粘贴到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

  1. 仿真器设置
    ARM汇编语言编程入门实践_第22张图片
    ARM汇编语言编程入门实践_第23张图片

4.3 编译程序

点击左上角编译按钮,开始编译程序,此时0错误,0警告,表示编译成功。
ARM汇编语言编程入门实践_第24张图片
ARM汇编语言编程入门实践_第25张图片可以看到寄存器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工程

你可能感兴趣的:(arm,单片机,stm32)