IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【嵌入式02】基于MDK创建纯汇编语言STM32工程 -> 正文阅读

[嵌入式]【嵌入式02】基于MDK创建纯汇编语言STM32工程


一、基于MDK创建汇编语言STM32工程

  1. 打开Keil MDK

  2. 选择project --> New μVision Project...
    在这里插入图片描述

  3. 选择项目工程存放的位置,并进行命名

  4. 点击保存

  5. 设置工程的目标环境,这里是基于STM32F103ZET6
    弹出的窗口如下图所示,既可以通过Search直接进行输入查找;也可通过小文件+号进行手中寻找。在这里插入图片描述

  6. 选择运行环境
    CMSIS中选择COREDevice中选择Startup,其中包含了启动文件。
    选择后可以发现窗格变绿。
    在这里插入图片描述

  7. 在打开后的界面左侧Project栏,打开Target1,鼠标右键单击Source Group1, 选择Add New Item to Group
    在这里插入图片描述

  8. 添加源文件,创建汇编项目。选择Asm File(.s),设置源文件名称,并保存
    在这里插入图片描述

通过以上步骤,即可完成汇编语言STM32工程创建。

二、测试代码

1.源代码

编译并调试如下代码

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.仿真器设置(采用软件仿真)

在这里插入图片描述
步骤:

Debug选项卡中选择Use Simulator,表示使用软件仿真;

选择Run to main()则表示跳过汇编代码,直接跳转到main函数开始仿真;

设置下面的Dialog DLL项为DARMSTM.DLLTARMSTM.DLL

parameter项为-pSTM32F103C8,用于设置支持STM32F103C8的软硬件仿真。

注意!不进行勾选的话无法进行仿真!

三、编译调试

在这里插入图片描述
编译工程并进入调试模式。

进入调试界面后,点击左上角step over键,点击三次后,选择左侧的X(stop键),可以得到预期结果。

寄存器R5R6R7R8与程序设置一致,如下图所示。

四、生成HEX文件

在写好文件后,点击工具栏的魔法棒

选择Output页,勾选Create HEX File,点击ok

点击工具栏的编译按钮

打开项目所在文件夹(大概率在Object文件夹下)即可发现.hex文件
在这里插入图片描述

1、HEX文件解析

hex文件可以通过UltraEdit、Notepad++、记事本等工具打开。
在这里插入图片描述
上图所示,使用Notepad++打开后会不同含义的数据颜色不同

每行数据都会有一个冒号开始,后面的数据由:数据长度、地址、标识符、有效数据、校验数据等构成

以上图的第一行为例,进行解析:

第1个字节10,表示该行具有0x10个数据,即16个字节的数据;

第2、3个字节C000,表示该行的起始地址为0xC000;

第4个字节00,表示该行记录的是数据;

第5-20个字节,表示的是有效数据;

第21个字节73,表示前面数据的校验数据,校验方法:0x100-前面字节累加和;

其中,第4个字节具有5种类型:00-05,含义如下:
00 —— 表示后面记录的是数据
01 —— 表示文件结束
02 —— 表示扩展段地址
03 —— 表示开始段地址
04 —— 表示扩展线性地址
05 —— 表示开始线性地址

单片机的hex文件以00居多,都用来表示数据。hex文件的结束部分如下图所示。
在这里插入图片描述
最后一行的01表示文件结束了,最后的FF表示校验数据,由0x100-0x01=0xFF得来。

2、扩展地址

上面的地址都是两个字节,范围从0x000-0xFFFF,如果地址是0x17FFFF该怎么办呢?需要用到扩展字段
在这里插入图片描述

第一行中,第一个字节为0x02,表示只有两个字节的数据,而扩展段的标识符为0x04表示后面的数据0x0800为扩展线性地址,基地址的计算方法为:

(0x0800<<16)=0x08000000,在0x04标识段出现之前,下面的数据都是这个基地址。

第二行的地址是0x0000,那么实际地址应是0x08000000+0x0000=0x08000000;

第二行的地址是0x0010,那么实际地址应是0x08000000+0x0010=0x08000010.

五、总结

利用Keil MDK创建汇编语言stm32工程并不复杂,虽然断点调试过程中出现了一些问题,但最终得以解决。如果想要实现预期,还是需要掌握了解汇编语言,需要不断实践,在之后配合硬件学习,相信会有跟进一步的学习和掌握。


参考文献
[1] https://blog.csdn.net/Bruce_Qee/article/details/119089365

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-29 10:27:52  更:2021-09-29 10:28:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:39:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码