文章目录

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

一、keil的安装

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

二、安装stm32 pack

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

三、keil 的简单设置

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

  1. 首先点击Edit→Configuration…,或者直接点工具栏的扳手图标,进入设置界面。

  2. 设置编码形式为Chinese GB2312(Simplified),如果不设置,你从其它地方粘贴过来的代码含有中文的话,就会出现乱码,然后设置Tab size为4。

  3. 进入Color & Fonts,选中C/C++ Editor files,选中中间窗口内的元素后,可以在右侧修改样式,比如设置字体、大小、颜色、背景,Sample是设置后预览效果。

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

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

4.1 新建工程

  1. 打开Keil uVision5,并新建一个工程。
  2. 在左侧的窗口内选择STM32芯片,这里我们选择STM32F103RB,并保存。
  3. 勾选相应的选项,并点击OK,这样工程创建完毕。

4.2 新建test.s文件

  1. 右键Source Group,选择Add New Item ...

  2. 添加test.s文件

  3. 然后将下列代码复制粘贴到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
  1. 仿真器设置

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工程

ARM汇编语言编程入门实践相关推荐

  1. 利用keil完成ARM汇编语言编程入门实践

    文章目录 一.安装keil软件 1.下载安装包 2.安装keil 3.安装stm32 pack 二.简单的stm汇编语言的编程 1.新建工程项目 2.新建main.c文件 3.编译 4.stm32仿真 ...

  2. 【嵌入式系统开发05】ARM汇编语言编程入门实践

    本文目的是主要介绍如何搭建并配置Keil嵌入式开发环境,完成一个基于STM32汇编程序的编写.记录build生成的 hex文件各段的大小,了解Hex文件格式及其前8个字节内容含义,学习在没有硬件条件下 ...

  3. 搭建Keil编程环境,ARM汇编语言编程入门实践

    多看多学 一.安装及配置环境 01 型号分类及缩写 02 资料共享 03 安装器件支持包 04 Keil简单设置 二.简单程序编译 01 新建工程 02 配置环境 03 添加源文件 04 设置仿真器模 ...

  4. 树莓派ARM汇编语言编程十讲(第1讲)

    内容简介 树莓派单板机(Raspberry Pi Single Computer)是一种极了不起的产品,用户可以以非常低的成本获得一个Linux环境并带GPIO硬件扩展的迷你计算机系统.新一代树莓派4 ...

  5. WinPcap编程入门实践

    转自:http://www.cnblogs.com/blacksword/archive/2012/03/19/2406098.html WinPcap可能对大多数人都很陌生,我在这里就先简单介绍一下 ...

  6. ARM 汇编语言编程学习笔记(1)

    0.1.Thumb指令集 Thumb指令集是ARM指令集的子集,其性能更低,但是代码密度更高,功耗更低. Thumb指令集分为Thumb-1指令集和Thumb-2指令集,其中Thumb-1指令集是16 ...

  7. 第三周--AEM汇编语言编程入门

    文章目录 一.STM32汇编程序 1.keil环境搭建 2.stm32程序 (1).新建工程 (2).配置环境 (3).编译调试 3.分析HEX文件 二.基于MDK创建STM32 1.创建一个新工程 ...

  8. ARM汇编语言编程-Keil环境搭建及STM32程序的编写

    目录 一.keil环境搭建 1.keil安装 2.注册LIC 3.支持包安装 二.STM32程序 1.新建工程 2.配置环境 三.总结 一.keil环境搭建 推荐百度网盘下载mdk531 mdk31安 ...

  9. python入门实践1-11课视频分享

    分享视频,分享知识,收获友谊,收获财富. 我是你们的老朋友,小雨,QQ:798033502 <Python编程入门实践>在先观看地址: 第一讲:我的第一个python实例 http://w ...

最新文章

  1. 处理器解决物联网和人工智能的融合
  2. 一行代码都不写!Github博客小白版入门教程
  3. CCAI 2020 | 黄铁军:“仿真主义”下的人工智能发展之路
  4. java中静态是什么,java中静态和非静态有什么区别
  5. postfix 部署ssl后还是25_宝塔面板的邮局管理器Postfix无法启动解决办法
  6. python sendto函数返回值_有返回值的函数amp;闭包(python)
  7. ffmpeg 新老接口问题及对照集锦
  8. 外部依赖项很多未定义标识符_从日本编程书籍《我的第一本编程书》中译版看中文例程如何扬长避短——标识符(一)
  9. iPad加价抢购,iPhone 11面临缺货,苹果的供应链困局来了
  10. 3D Math Primer for Graphics and Game Development -- 图形与游戏开发(3D数学基础) (简介)...
  11. UVA 1411 - Ants(二分图完美匹配)
  12. 7.2 重入锁(ReentrantLock)
  13. CListCtrl控件的使用指南
  14. Total Commander工具栏图标 备份
  15. Chinese Std GBT7714-2015.ens EndNote 样式文件
  16. 上海泛微面经(从Java开发到项目实施岗)
  17. found 1 high severity vulnerability in 1481 scanned packages run `npm audit fix` to fix 1 of them.
  18. 低成本WebIDE(centos7+codeserver+内网穿透)
  19. 【飞桨】GAN:U-GAT-IT【2020 ICLR】论文研读
  20. wex5 实战 常用代码模型集合

热门文章

  1. 为什么商家有了收款二维码还要使用聚合支付?
  2. 小程序跳到h5页面_小程序如何跳转h5页面
  3. (二)进程管理之进程状态及组织方式
  4. android studio编程实例,Android Studio JNI 开发简单案例
  5. NoSQL代表: Mongo DB(芒果数据库) NoSQL代表: Mongo DB(芒果数据库)
  6. K_均值聚类算法(算法设计与C代码实现)
  7. js实现搜索框智能搜索提示,类似百度搜索
  8. rz command
  9. Unity Steam_VR VRTK开发插件自带案例详解(一)
  10. 《高质量程序设计指南——C/C++语言》第1章 高质量软件开发之道