基于MDK的汇编语言编写及小灯闪烁的汇编程序实现

2023-05-16

基于MDK的STM32汇编语言编写及小灯闪烁的汇编程序实现

  • 一、新建工程
  • 二、配置环境
    • 1、选择设备
    • 2、选择运行环境
    • 3、添加源文件
  • 三、测试代码
    • 1、源码
    • 2、仿真器设置
    • 3、编译调试
  • 四、HEX文件解读
  • 五、闪烁LED的程序
  • 六、总结
    • 参考

一、新建工程

1、打开KEIL5,新建一个工程
在这里插入图片描述
2、在弹出的窗口选择保存位置,文件名称设置为TEST,点击保存
在这里插入图片描述

二、配置环境

1、选择设备

新工程建立好后,弹出设备选择窗口,因为我的开发板版本为STM32F103VET6,因此选择相应的开发板,点击保存
在这里插入图片描述

2、选择运行环境

CMSIS下选择CORE;Device下Startup,其中包含了启动文件;
在这里插入图片描述

3、添加源文件

1、选中Source Group 1,右键,选择Add New Item to Group
在这里插入图片描述
2、添加源文件,因为创建汇编项目,选择 Asm File (.s) ,设置文件名称为TEST,点击保存
在这里插入图片描述
3、出现一个空白文本,显示如下
在这里插入图片描述

三、测试代码

1、源码

1、把下列代码粘贴到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

2、仿真器设置

1、点击魔术棒进行设置,仿真器的选择根据自己的实际情况进行选择,我这里选择DAP仿真器,如下图所示;
在这里插入图片描述

进行设置时要将电脑与开发板连接,接通电源,否则无法查看到开发板信息。

2、点击Setting后,按照如下设置,能在3处看到相应设备信息,设置好后一直点OK
在这里插入图片描述

3、编译调试

1、先编译程序,无误后进入仿真调试:
在这里插入图片描述
2、由仿真结果可以看到,寄存器的值与程序设定一致
在这里插入图片描述
3、在仿真调试模式下,可以点击以下按钮进行调试
在这里插入图片描述
4、可以看到,动态调试时,变量地址有改变
在这里插入图片描述
在这里插入图片描述

四、HEX文件解读

1、生成HEX文件
打开魔术棒,点击Output,勾选生成HEX文件,确定,然后可以在这个工程保存的目录下找到。
在这里插入图片描述

2、HEX文件格式
开始符号+字节数+地址+类型+数据+校验

冒号llaaaatt[dd…]cc
1字节2字节1字节n字节1字节

3、HEX文件解读:
在这里插入图片描述
由上图HEX文本第一行为例——:020000040800F2
按照HEX文件格式,它可以这样分——:+02+0000+04+0800+F2
  “:”是开始符号;

  02是字节数,代表这个记录当中数据字节的数量;

  0000代表当中数据的开始地址;

  04是数据类型,它可能是以下数据类型当中的一个:

00数据记录
01文件结束
02扩展的段地址
03开始段地址
04扩展线性地址
05开始线性地址

  0800是数据;

  F2是校验和域。

校验值计算方法:0x100 - (该行数据所有的数据的累加和%256)
如:020000040800F2
  0x100-((0x02+0x00+0x00+0x04+0x08+0x00)%256)=0xF2

五、闪烁LED的程序

1、按照以上方式建立新的工程,不需要配置环境
2、把以下程序写入

LED0 EQU 0x42218194
RCC_APB2ENR EQU 0x40021018
;GPIOA_CRH EQU 0x40010804
GPIOB_CRL EQU 0x40010C00

Stack_Size      EQU     0x00000400

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp

                AREA    RESET, DATA, READONLY

__Vectors       DCD     __initial_sp               
                DCD     Reset_Handler              
                    
                    
                AREA    |.text|, CODE, READONLY
                    
                THUMB
                REQUIRE8
                PRESERVE8
                    
                ENTRY
Reset_Handler 
                BL LED_Init
MainLoop        BL LED_ON
                BL Delay
                BL LED_OFF
                BL Delay
                
                B MainLoop
             
LED_Init
                PUSH {R0,R1, LR}
                
                LDR R0,=RCC_APB2ENR
                ORR R0,R0,#0x08		
                LDR R1,=RCC_APB2ENR
                STR R0,[R1]
                
                LDR R0,=GPIOB_CRL
                BIC R0,R0,#0XFF0FFFFF	
                LDR R1,=GPIOB_CRL
                STR R0,[R1]
                
                LDR R0,=GPIOB_CRL
                ORR R0,R0,#0X00300000
                LDR R1,=GPIOB_CRL
                STR R0,[R1]
                
                MOV R0,#1 
                LDR R1,=LED0
                STR R0,[R1]
             
                POP {R0,R1,PC}

             
LED_ON
                PUSH {R0,R1, LR}    
                
                MOV R0,#0 
                LDR R1,=LED0
                STR R0,[R1]
             
                POP {R0,R1,PC}
             
LED_OFF
                PUSH {R0,R1, LR}    
                
                MOV R0,#1 
                LDR R1,=LED0
                STR R0,[R1]
             
                POP {R0,R1,PC}             
             
Delay
                PUSH {R0,R1, LR}
                
                MOVS R0,#0
                MOVS R1,#0
                MOVS R2,#0
                
DelayLoop0        
                ADDS R0,R0,#1

                CMP R0,#330
                BCC DelayLoop0
                
                MOVS R0,#0
                ADDS R1,R1,#1
                CMP R1,#330
                BCC DelayLoop0

                MOVS R0,#0
                MOVS R1,#0
                ADDS R2,R2,#1
                CMP R2,#15
                BCC DelayLoop0
                
                POP {R0,R1,PC}    

                END

3、编译好后烧录到开发板,最终结果:
在这里插入图片描述

六、总结

  以上就是基于MDK的一个汇编语言的简单编写和动态调试、HEX文件的简单解读,还有令小灯闪烁的汇编程序。

参考

1、ARM汇编基础之基于MDK创建纯汇编语言的STM32工程.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于MDK的汇编语言编写及小灯闪烁的汇编程序实现 的相关文章

  • 基于MDK的汇编语言编写及小灯闪烁的汇编程序实现

    基于MDK的STM32汇编语言编写及小灯闪烁的汇编程序实现 一 新建工程二 配置环境1 选择设备2 选择运行环境3 添加源文件 三 测试代码1 源码2 仿真器设置3 编译调试 四 HEX文件解读五 闪烁LED的程序六 总结参考 一 新建工程
  • KEIL MDK平台 S3C2440 汇编语言软件仿真

    KEIL MDK平台 S3C2440 汇编语言软件仿真 KEIL MDK平台 S3C2440 汇编语言软件仿真建立工程 xff0c 编辑汇编语言程序编译链接源程序调试博客同款例程https download csdn net downloa
  • MDK KEIL 烧录STM32下载错误:Flash Timeout.Reset the Target and try it again.解决办法(芯片解锁 解除读报护)

    使用keil开发STM32点下载时出现下面的报错 xff1a 点确定后 xff1a 出现如上情况很可能是该芯片锁死 xff0c 即设置了读写保护 解决方法是想办法解锁芯片 xff0c 可以使用ST Link配合stlink utility软
  • 蓝桥杯嵌入式组环境配置(keil mdk+sdk+STM32cubemx)

    1 keil mdk下载 官网也可以下载 地址 MDK ARM Version 5 38a Evaluation Software Request keil com 没梯子速度太慢了 我已经把安装包放在了云盘里链接 xff1a 链接 xff
  • MDK debug时出现*** error 65: access violation at

    简介 本文针对的是访问内存权限的问题 xff0c 其他问题暂时不讨论 问题描述 使用mdk arm调试keil工程的时候遇到错误 error 65 access violation at 0xE0042004 no write permis
  • MDK + Jlink + SDRAM 裸奔2440教程

    MDK 43 Jlink 43 SDRAM 裸奔2440教程 Author xff1a Aston ofgec deu org 1 背景 很多人学习嵌入式编程都是从裸机开始的 xff08 我个人也是 xff09 这并不是偶然 xff0c 想
  • 两个版本MDK搭建和三种调试器的使用-第3季第4部分视频课程-朱有鹏-专题视频课程...

    两个版本MDK搭建和三种调试器的使用 第3季第4部分视频课程 698人已学习 课程介绍 本课程是 朱有鹏老师单片机完全学习系列课程 第3季第4个课程 xff0c 全面讲解了2个版本MDK xff08 4 14和5 23 xff09 三种调试
  • Keil MDK 安装pack包

    安装pack包 pack包安装有两种方法 xff0c 一种是在keil中直接更新 xff0c 另一种是到官网下载pack包然后安装 我比较推荐第二种方法 xff0c 第一种方法很大概率会失败 xff08 这里以STM32F103c8单片机为
  • MDK-ARM与STM32CubeMX软件的下载及安装

    一 STM32CubeMX 的下载及安装 第一步 xff1a 下载应用软件 1 1 软件下载地址 xff1a www st com stm 32 cubemx 1 2 JAVA开发环境的搭建 xff0c JAVA下载地址 xff1a www
  • Keil MDK配置ARM汇编/C语言混合开发环境

    Keil MDK配置ARM开发环境 1 安装Keil MDK 安装方法这里不再说明 xff0c 懂得都懂 xff01 x1f436 2 安装ARM开发包 在Keil MDK5之后 xff0c 不再原生支持ARM7 9 xff0c 需要自行安
  • 基于 MDK 创建 STM32 汇编程序:串口输出 Hello world

    目录 一 编写代码二 结果显示三 总结四 参考资料 说明 xff1a 本文在 基于 MDK 创建 STM32 汇编语言工程并分析 HEX 文件内容 的基础上用汇编程序完成一个输出 Hello world 到串口的程序 实验工具 野火串口调试
  • MDK Trace功能

    RealView MDK可以轻松实现TRACE功能 针对ARM Cortex M3内核的芯片 xff0c 只需要要RealView MDK软件和ULINK2仿真器就可以直接实现TRACE功能 xff0c 不需要额外的TRACE硬件仿真器支持
  • Xpdf-3 for MDK

    http www linuxfans org nuke modules php name 61 Site Downloads amp op 61 geninfo amp did 61 2385 Xpdf 3 for MDK 类别 其它软件
  • STM32 第5讲 MDK下载安装注册及配置

    目录 MDK下载安装注册MDK简介MDK下载MDK安装器件支持包安装注册鸡 MDK配置 MDK下载安装注册 MDK简介 MDK不同版本对比 MDK下载 MDK安装使用 61 MDK软件安装 43 器件支持包安装 MDK软件下载 xff1a
  • MDK软件仿真使用

    开始仿真前需要先配置环境 xff0c 如果手动创建环境不能进入仿真要考虑去看一下工程配置选项的问题 xff0c 本次仿真使用AT32F403VGT7型号 xff0c 如图 xff1a 点击开始仿真 xff0c 下面对仿真工具栏的选项进行具体
  • MDK配色方案更改

    文章目录 WIN10更改护眼背景MDK软件配色方案更改 设置常用关键字参考 WIN10更改护眼背景 按windows 43 R快捷键 xff0c xff0c 打开运行 xff0c 在弹出来的输入框中写上regedit xff0c 点确定或回
  • MDK的格式化代码工具及添加快捷方式

    文章目录 Astyle介绍插件安装参数设置格式化整个工程参数说明快捷键设置参考 Astyle介绍 Astyle 即Artistic Style xff0c 是一个可用于C C 43 43 C 43 43 CLI Objective C C
  • GPIO操作0基础

    1 1GPIO结构 1 2固件库组织代码步骤 1 3IO口操作步骤 常用技巧总结 1 4IO口位操作 1 1 GPIO结构 1 基本结构 2 工作模式 3 寄存器地址 typedef struct stm32f10x h 定位到 GPIO
  • MDK Error #550解决方案

    Error 550 Requested device STM32F302R8Tx STMicroelectronics not found 这个报错是因为我们没有安装pack包 解决方法如下 5条消息 Keil STM32F3xx DFP
  • 关于KEIL MDK调试ARM程序不能仿真的问题

    在单片机程序调试过程中 由于程序量小 利用仿真器进行仿真调试方便直观 所以一般经常使用 但是keil经常会出现罢工 无法用仿真器调试的现象 如下图 解决方法也很简单 按照下图设置即可

随机推荐

  • 多帧点云文件动画显示

    使用python库 Open3d安装Open3d pip install open3d span class token operator 61 61 span span class token number 0 8 span span c
  • Intel HAXM is required to run this AVD.HAXM is not installed.

    问题 xff1a 在使用Android Studio打开AVD模拟器时 xff0c 无法打开模拟器并提示出现错误 xff1a Intel HAXM is required to run this AVD span class token p
  • Could not identify launch activity: Default Activity not found

    运行Java程序出现下面的问题 因为在AndroidManifest xml中没有定义activity xff0c 加上activity的定义就可以了 span class token operator lt span intent spa
  • 基于对话框的MFC界面添加菜单栏

    在资源视图中右键单击 gt 添加资源 gt menu gt 新建 并命名ID为IDR MENU1 新建之后默认ID为IDR MENU1 xff08 若想要修改ID xff0c 可以找到属性栏 xff08 方法见下 xff09 xff0c 之
  • Ubuntu修改文件权限

    修改文件权限 xff1a chmod chmod 修改文件权限有两种使用格式 xff1a 字母法与数字法 给文件的同组用户和其他用户减去读权限 ps 只能对自己的文件进行权限操作 增加读写权限 设置文件所有者的权限为读 修改文件所有者 xf
  • PyQGIS中一次性加载多个shp文件

    目录 遍历添加多个图层 打印图层列表清单 打开QGIS Desktop 3 22 16 xff0c 点击菜单栏 设置 gt Python控制台 在Python控制台中点击 显示编辑器 按钮 xff0c 打开Python编辑器 点击Pytho
  • PyQGIS获取要素以及要素中的几何属性

    from qgis core import QgsProject QgsVectorLayer 1 指定输入图层路径 path to airports layer 61 r 34 E PyQGIS Source Data Ex5 pt sh
  • 【解决思路】当前不会命中断点,还未为文档加载任何符号

    问题 xff1a 在调试代码过程中 xff0c 计算机突然蓝屏而强制关闭并重启 xff0c 以至于vs在运行调试的过程中就在非正常的情况下被迫关闭 重启之后 xff0c 继续打开并运行项目 xff0c 却发现无法进行调试代码 于是我把鼠标移
  • PyQGIS获取字段列表

    from qgis core import QgsVectorLayer QgsProject path to airports layer 61 r 34 E PyQGIS Source Data Ex5 pt shp 34 layer
  • 【用示例学习与理解C++系列】类的构造方法

    前言 本文主要是通过简单的示例 xff0c 去学习与理解C 43 43 类的构造方法 构造方法的作用 为什么存在构造方法 xff1f 为什么需要构造方法 xff1f 那是因为当我们在代码中定义一类变量 xff08 实例化一个类的实例 对象时
  • CSP-M2 :神奇的序列

    文章目录 HRZ的序列题目输入输出解题代码 HRZ学英语 滑动窗口题目输入输出解题代码 咕咕东的奇妙序列题目输入输出解题代码 HRZ的序列 题目 相较于咕咕东 xff0c 瑞神是个起早贪黑的好孩子 xff0c 今天早上瑞神起得很早 xff0
  • 转化Foggy_Cityscapes数据集为voc和yolo格式用作目标检测

    目录 一 数据集下载 xff08 1 xff09 解压后文件夹目录 xff08 2 xff09 gtFine格式如下所示 xff1a 二 转换为VOC数据集格式 xff08 1 xff09 生成xml标签 xff08 2 xff09 将le
  • 如何获取数据库的逻辑文件名、数据库文件的路径

    1 sp helpdb 数据库名 2 获取数据库文件路径 select ltrim rtrim filename from 数据库名 sysfiles where charindex 39 MDF 39 filename gt 0 sele
  • Linux进度条以及makefile相关知识

    一 在Linux环境下实现进度条 xff0c 其原理是 xff1a 用sleep函数或usleep函数控制每隔多长时间输出一次 xff0c 每次输出字符会比上次输出字符多一个 在此代码中 xff0c 用 r而不用 n的原因 xff1a n表
  • hdu - 4642 - Fliping game(博弈)

    题意 xff1a Alice和Bob玩游戏 xff0c 一个N M的矩阵 xff0c 里面是1或0 xff0c 每人每次选择一个1的位置 xff0c 然后将这个位置到右下角的整个矩形元素全部取反 xff08 1变0 xff0c 0变1 xf
  • 图形界面报错“已拒绝X11转移申请”的解决方法

    今天想通过本机给虚拟机起x manager图形界面的时候报出 解决办法 xff1a 原来X11 forwarding依赖 xorg x11 xauth 软件包 xff0c 所以必须先安装 xorg x11 xauth 软件包 yum ins
  • bash: ifconfig: command not found 解决办法

    经常遇到 34 bash xxxx command not found 34 这样的问题 xff0c 用root用户也不行 xff0c 在网上查阅了此问题 xff0c 解决方法如下 xff1a 原文1 http hi baidu com j
  • 用CMfcShellTree和CMFCShellListCtrl实现资源管理器并过滤扩展名

    资源管理器 CMfcShellTree和CMFCShellListCtrl是VS2008 SP1和VS2010内自带的控件 xff0c 用这两个控件实现资源管理器只需几行代码 CMFCShellTreeCtrl m tree CMyShel
  • 解决虚拟机下CentOS系统无法识别usb设备

    其实不是什么 解决 xff0c 虚拟机默认是自动挂载usb设备的 只是要注意插usb设备的时候 xff0c 虚拟机必须要处于当前窗口 然后就会自动弹出已安装好usb设备的提示 xff08 如果系统比较卡 xff0c 需要多等一会 xff09
  • 基于MDK的汇编语言编写及小灯闪烁的汇编程序实现

    基于MDK的STM32汇编语言编写及小灯闪烁的汇编程序实现 一 新建工程二 配置环境1 选择设备2 选择运行环境3 添加源文件 三 测试代码1 源码2 仿真器设置3 编译调试 四 HEX文件解读五 闪烁LED的程序六 总结参考 一 新建工程