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

article/2025/11/5 16:05:57

多看多学

  • 一、安装及配置环境
    • 01 型号分类及缩写
    • 02 资料共享
    • 03 安装器件支持包
    • 04 Keil简单设置
  • 二、简单程序编译
    • 01 新建工程
    • 02 配置环境
    • 03 添加源文件
    • 04 设置仿真器模式
    • 05 编译调试
    • 06 分析Hex文件
  • 三、中值滤波及程序设计
    • 01 中值滤波
    • 02 流程框图
    • 03 程序设计
  • 四、总结
  • 参考资料

一、安装及配置环境

01 型号分类及缩写

缩写释义Flash容量型号
LD_VL小容量产品超值系列16~32KSTM32F100
MD_VL中容量产品超值系列64~128KSTM32F100
HD_VL大容量产品超值系列256~512KSTM32F100
LD小容量产品16~32KSTM32F101/102/103
MD中容量产品64~128KSTM32F101/102/103
HD大容量产品256~512KSTM32F101/102/103

这里我们选用STM32F103C8T6,小容量产品

02 资料共享

首先需要下载安装mdk5软件和stm32包,这里附带配置MDK所需要的的包。
资料下载:https://pan.baidu.com/s/1SqKyKr5Fsl_9gBJi8aVxTw,
提取码:8kzh,链接里压缩包的解压密码:32

03 安装器件支持包

1、打开MDK,找到Pack Installer
在这里插入图片描述
2、选择你需要的Pack进行安装(图片仅为示例)。这种方法下载比较慢,建议在官网下载好支持包,直接在本地点击安装即可。
在这里插入图片描述

正版的Keil需要付费,如果个人学习需要,可以自行百度使用破解版

04 Keil简单设置

1、安装好Keil后,需要进行一些简单的设置。首先点击Edit→Configuration…,或者直接点工具栏的扳手图标,进入设置界面。
在这里插入图片描述
2、设置编码形式为Chinese GB2312(Simplified),不同编码形式主要体现在对中文支持不同,我们在打开其他文件发现中文乱码时,可以更改编码格式才能使乱码变为中文。然后设置Tab size为4。
在这里插入图片描述


二、简单程序编译

01 新建工程

双击打开keil,点击菜单栏Project–>New μVision Project
在这里插入图片描述
新建项目,在弹窗中选择工程目录,新建名为test的工程文件。

02 配置环境

选择设备,这里我们选用STM32F103C8T6,小容量产品
在这里插入图片描述
选择运行环境
在这里插入图片描述

03 添加源文件

右键单击Source Group 1,选择Add New Item to Group,添加Asm File (.s)文件,命名为TEST并保存
在这里插入图片描述
为其添加如下代码

 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

04 设置仿真器模式

点击菜单中的Project,找到Options for Target ‘Target 1’并点击,选择Debug–>Use Simulator,将Dialog DLL以及Parameter处修改为自己选择的设备,OK
在这里插入图片描述

05 编译调试

在这里插入图片描述
可以发现寄存器R5~8和预设的值一样

06 分析Hex文件

Hex 全称 (Intel HEX)文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。大多数EPROM编程器或模拟器使用Intel HEX文件。在Linux中安装hexedit,分析hex文件内容

:020000040800F2
:1000000000060020ED000008F5000008F7000008D9
:10001000F9000008FB000008FD00000800000000D7
:1000F00009480047FEE7FEE7FEE7FEE7FEE7FEE70A
:10010000FEE7FEE7FEE7FEE704480549054A064B21
:1001F000194948600846406848600846406840F42D
:10020000806048600846406820F47C1048600846DA
......
:10021000406840F4E81048600846006840F080708C
:10022000086000BF0C48006800F000700028F9D09A
:100230000948406820F003000749486008464068C4
:1002400040F00200486000BF0348406800F00C0026
:100250000828F9D10CBD0000001002400020024027
:1002600010B51348006840F00100114908600846C5
:100270004068104908400E494860084600680E4929
:1002800008400B4908600846006820F48020086098
:100290000846406820F4FE0048604FF41F00886064
:1002A000FFF76AFF4FF000600449086010BD0000CE
:1002B000001002400000FFF8FFFFF6FE08ED00E02E
:0400000508000135B9
:00000001FF

第一行可以看作0x02 0x00 0x00 0x04 0x08 0x00 0xF2,其前四个字节和最后一个字节有特殊含义。中间为数据

  • 第一个字节0x02表示本行数据的长度;

  • 第二、三字节0x00 0x00表示本行数据的起始地址;

  • 第四字节表示数据类型,数据类型有: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为校验和。

三、中值滤波及程序设计

01 中值滤波

中值滤波是一种非线性数字滤波器技术,经常用于去除图像或者其它信号中的杂讯。这个设计思想就是检查输入信号中的采样并判断它是否代表了信号,使用奇数个采样组成的观察窗实现这项功能。观察窗口中的数值进行排序,位于观察窗中间的中值作为输出。然后,丢弃最早的值,取得新的采样,重复上面的计算过程。

02 流程框图

程序框图

03 程序设计

		AREA SORT,CODE,READONLY    ;定义一个代码段ENTRY					   MOV R0,#9                  ;需要排序的个数,为奇数LDR R2,=0X40000000		   ;R2为原始数据的起始位置SUB R1,R0,#1MOV R4,#4MLA R3,R1,R4,R2            ;R3为原始数据的结束地址SUB R4,R3,#4               ;R4为原始数据的倒数第二个数的地址
LOOP1	ADD R5,R2,#4               ;R5为内循环的起始地址
LOOP2	LDR R6,[R2]LDR R7,[R5]CMP R6,R7                  ;比较交换,从小到大排序STRHI R6,[R5]STRHI R7, [R2]ADD R5,R5,#4               ;修改内循环地址CMP R5, R3                 ;内循环结束比较STRHI R6,[R5]BLS LOOP2ADD R2,R2,#4               ;修改外循环地址CMP R2,R4                  ;外循环结束比较BLS LOOP1LDR R2, =0x40000000MOV RO,RO,LSR #1MOV R4, #4MLA R3,RO,R4,R2LDR R1,[R3]                ;找到中间那个数并赋给R1MOV RO, #100END

相关命令说明
AREA命令:AREA 命令指示汇编器汇编一个新的代码段或数据段。段是独立的、指定的、不可见的代码或数据块,它们由链接器处理。

格式如下:AREA 段名,段属性1,段属性2,段属性3
例如:AREA STACK, NOINIT, READWRITE, ALIGN=3

SPACE命令:SPACE 命令保留一个用零填充的存储器块。
ENTRY命令:声明整个程式的入口点,入口点有且仅有一个。

四、总结

第一次接触汇编语言,同时学习了hex源文件的内容要求。对于初学者汇编语言并不友好,有一些语法还是不能熟练使用。通过此次简单练习实验学习了Keil软件。

参考资料

1、stm32自学视频(非常推荐)
2、ARM开发
3、完成一个基于STM32汇编程序的编写
4、基于MDK创建汇编实现LED闪烁


http://chatgpt.dhexx.cn/article/51x2gxAh.shtml

相关文章

ARM编程环境搭建教程

随着移动互联网的繁荣发展,物联网人工智能的兴起,嵌入式开发成为了越来越多IT人必须学习的内容,而在嵌入式芯片领域,ARM具有无可撼动的市场占有率,所以说,学习嵌入式不学ARM,不如回家卖红薯。 接…

嵌入式ARM设计编程(四) ARM启动过程控制

文章和代码已归档至【Github仓库:hardware-tutorial】,需要的朋友们自取。或者公众号【AIShareLab】回复 嵌入式 也可获取。 一、实验目的 (1) 掌握建立基本完整的ARM 工程,包含启动代码,C语言程序等&…

《嵌入式基础》实验三 ARM编程模型和ARM指令

零、前言 本人不擅长写汇编相关的东西,所以以下内容也是不断摸索(百度 ) 整出来的,和linux的实验报告的质量相比较低。 一、 实验目的 掌握ARM微处理器的汇编指令的使用方法。掌握使用 LDM/STM,B,BL 等指…

嵌入式ARM设计编程(一) 简单数据搬移

文章和代码已归档至【Github仓库:hardware-tutorial】,需要的朋友们自取。或者公众号【AIShareLab】回复 嵌入式 也可获取。 一、实验目的 熟悉实验开发环境,掌握简单ARM汇编指令的使用方法。 二、实验环境 硬件:PC机 软件&am…

ARM汇编语言编程入门实践

文章目录 一、keil的安装二、安装stm32 pack三、keil 的简单设置四、基于STM32汇编程序的编写4.1 新建工程4.2 新建test.s文件4.3 编译程序4.4 分析HEX文件 五、总结六、参考资料 一、keil的安装 双击打开mdk_510.exe应用程序文件,点击Next>>。勾选I agree……

ARM体系结构与编程模型总结

ARM体系结构与编程模型 ARM体系结构 一、ARM处理器简介及RISC特点 ARM处理器简介 ARM(Advanced RISC Machines)是一个32位RISC(精简指令集)处理器架构,ARM处理器则是ARM架构下的微处理器。ARM处理器广泛的使用在许多…

数学建模-层次分析法(评价模型)

层次分析法概述 层次分析法的步骤和方法 1. 建立层次结构模型 2. 构造判断(成对比较)矩阵 3. 层次单排序及其一致性检验 4. 层次总排序及其一致性检验 总结 应用层次分析法的注意事项 举例 层次分析法代码实现 disp(输入判断矩阵C) Cinput(C); %输入矩阵 [n,n] size(C);%…

数学建模-层次分析模型

层次分析法的基本原理与步骤 人们在进行社会的、经济的以及科学管理领域问题的系统分析中,面临的常常是一个由相互关联、相互制约的众多因素构成的复杂而往往缺少定量数据的系统。层次分析法为这类问题的决策和排序提供了一种新的、简洁而实用的建模方法。 运用层次…

数学建模-层次分析法

个人主页: 个人主页 系列专栏: 数学建模 目录 前言 一、引入 二、层析分析法 1.思想介绍 2.判断矩阵 3.一致矩阵 4.一致性检验 5.一致性检验步骤(两张图片告诉你) 6.计算权重 一致矩阵计算权重: 判断矩阵计…

数学建模--层次分析法

层次分析法的求解步骤 1.建立层次结构模型 模型分为三层。分别为最高层(决策问题最终要解决什么,即决策的目的)、中间层(考虑的因素,决策的准则。比如买衣服要考虑价格、尺寸、款式等因素)和最低层&#…

层次分析法模型(数学建模学习)

本系列参考清风老师的数学建模课程 层次分析法模型 一、模型介绍 (一)模型引入 对于方案选择类问题,评价类问题采用层次分析法(The ayalytic hierarchy process / AHP)模型进行评分,之后评分高的就是最佳…

数据库常用数据模型1(层次模型)

1 数据模型分为两类:一类是概念模型(信息模型),第二类是逻辑模型(数据建模)和物理模型(对数据最底层的抽象)。 2 常用的逻辑模型:层次模型、网状模型、关系模型、面向对…

计算机网络层次模型

计算机网络层次模型 OSI 7层协议 物理层:在局部局域网上传送数据帧(Data Frame),它负责管理电脑通信设备和网络媒体之间的互通。数据链路层:在两个网络实体之间提供数据链路连接的创建、维持和释放管理。构成数据链路…

批判马斯洛需求层次模型

再次批判马斯洛需求层次模型,有啥缺陷? 趣讲大白话:文化不同,心理不同 【趣讲信息科技182期】 **************************** 每个民族的文化心理结构都不一样 常常低估文化对人的影响 有一门心理学分支,文化心理学 专…

网络层次模型及各层对应协议

一、OSI七层模型 OSI七层协议模型主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数…

层次分析法模型

层次分析法 文章目录 层次分析法概述层次分析法简介层次分析法典型应用层次分析法基本原理 层次分析法的步骤和方法建立层次结构模型构造判断矩(成对比较)阵层次单排序及其一致性检验一致性检验正互反阵最大特征根和特征向量的简化计算 层次总排序及其一…

层次分析法模型讲解

一、解决评价类问题 二、资料来源 三、例题 1.准备 2.权重表格 3.分而治之解决权重弊端 4.层次分析法 根据判断矩阵求权重,下面对各个指标进行填写判断矩阵: bug分析: 如果小明填写的不是5而是1,这里发现:苏杭>北戴…

数学建模之层次分析法模型

目录 问题 问题实例 问题分析 建立层次分析法模型 分析权重的方法 ​编辑 填表指标的权重​编辑 一致性检验 一致性检验的引入 一致性检验的步骤 计算判断矩阵 归一化处理 算术平均法求权重 几何平均法求权重 特征值法求权重(常用) 汇总结果…

逻辑数据模型之层次数据模型、网状数据模型和关系数据模型

上一篇文章简单介绍了概念数据模型、逻辑数据模型、物理数据模型的基本概念、特性以及三者所对应的数据库的开发阶段。现在针对逻辑数据模型中所用到的三种数据模型---层次数据模型、网状数据模型以及关系数据模型做一个相信的介绍与对比分析。 一、层次数据模型 定义&#xff…

三种数据模型---层次模型、网状模型以及关系模型

一、层次数据模型 定义&#xff1a;层次数据模型是用树状<层次>结构来组织数据的数据模型。 其实层次数据模型就是的图形表示就是一个倒立生长的树&#xff0c;由基本数据结构中的树&#xff08;或者二叉树&#xff09;的定义可知&#xff0c;每棵树都有且仅有一个根节点…