目录
1 stm21工程的创建
1.1 新建工程
启动mdk,点击菜单栏中的project
自行选择文件保存路径以及文件名称
1.2 配置环境
- 选择设备
本文选择STM32F103C8,之后进入以下窗口界面 - 选择运行环境
ARM的CMSIS已经把开发所需要的软件组件都封装好了,因此直接选择即可;
CMSIS
下选择CORE
;
Device
下Startup
,其中包含了启动文件;
- 添加源文件
鼠标右键单击Source Group 1
,选择Add New Item to Group
本文介绍汇编项目,所以选择Asm File (.s)
,创建汇编文件,创建完成后结果如图
1.3 测试代码
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 代码的编译与调试
2.1 仿真器设置
点击魔法棒,选择Debug
,勾选Use Simulator,表示使用软件仿真,设置下面的“Dialog DLL”项为“DARMSTM.DLL”和“TARMSTM.DLL”;parameter项为“-pSTM32F103C8”,用于设置支持STM32F103C8
的软硬件仿真。
2.2 在线调试
- 编译无误后,点击调试按钮
之后进入的页面
- 复位,全速运行,停止运行
复位:让程序复位到起点,调试设置恢复到初始状态
全速运行:快捷键F5,可以让程序运行常看运行状态,也可以在特定位置打断点,让程序运行到特定位置,查看运行状态。
点击添加断点,将光标放在所要设置断点位置,点击工具栏中按钮,添加断点
点击全速运行(或F5),在遇到断电时会停下
-
单步调试
快捷键F11,每点击一次单步调试,程序运行一步,遇到函数会跳进函数执行
-
逐行调试
快捷键F10,每点击一次,程序运行一行,遇到函数跳过函数执行
-
跳出调试
快捷键Ctrl + F11,程序跳出当前函数执行,直到跳出最外面的函数(main函数)
-
运行到光标处
快捷键Ctrl + F10,将光标放在某一行,点击该按钮(或Ctrl + F11),程序执行到光标的位置就会停止下来(前提是程序能执行到光标的位置)
-
跳转到暂停行
这个功能在程序停止运行时有效,主要的作用就是在打开了很多文件时,不知道将程序翻到哪里去了,点击按钮即可知道我们的程序暂停在那个位置
3 生成并观察HEX文件
3.1 HEX文件的生成
点击魔法棒,在output
中勾选Create HEX File
完成之后重新编译,打开项目所在文件夹,.hex文件即在此处。若此处没有,即在项目路径下的Objects里面。
3.2 HEX文件格式说明
.hex文件部分内容如下:
一般HEX记录格式如下
-
起始码:每行数据作为一帧,并由:作为起始码
-
字节长度:两个十六进制数字(一对十六进制数字),指示数据字段中的字节数(十六进制数字对)。最大字节数为255(0xFF)。16(0x10)和32(0x20)是常用的字节数
-
地址:四个十六进制数字,代表数据的16位起始存储器地址偏移量。数据的物理地址是通过将此偏移量添加到先前建立的基地址来计算的,因此允许内存寻址超过16位地址的64 KB限制。基地址默认为零,可以通过各种类型的记录进行更改。基地址和地址偏移量始终表示为大端值
-
指令类型:两个十六进制数字00到05,定义了这行数据的具体含义
-
数据:n字节数据序列,由2个n十六进制数字表示
-
校验码:(两个十六进制数字),可以用来验证记录没有错误的计算值
参照HEX文件格式,我们需要了解前八个字节的含义
:02 0000 04 0800 F2
02:表示记录当中有2个字节
0000: 数据的起始地址
04: 表示HEX的记录类型为扩展线性地址记录
0800: 代表地址段
F2: 是这个记录的校验和
总结
学习了解了keil的使用,并了解到了HEX文件的格式与含义,初次使用keil软件,虽然过程中有许多挫折,但通过查找资料还是可以完成的
参考
https://blog.csdn.net/isyuuun/article/details/120559821?spm=1001.2014.3001.5502