天天看点

MDK基于STM32汇编程序并编写软件程序一.创建新项目二、编写汇编代码并运行三、分析hex文件四、总结五、参考

在这在这

  • 一.创建新项目
  • 二、编写汇编代码并运行
  • 三、分析hex文件
  • 四、总结
  • 五、参考

一.创建新项目

keil5和其他软件不太一样,不是在file里创新项目,而是在project里

MDK基于STM32汇编程序并编写软件程序一.创建新项目二、编写汇编代码并运行三、分析hex文件四、总结五、参考

接下来就是创建项目,这里的名字是TEST

MDK基于STM32汇编程序并编写软件程序一.创建新项目二、编写汇编代码并运行三、分析hex文件四、总结五、参考

板子选择的是STM32F103RC

MDK基于STM32汇编程序并编写软件程序一.创建新项目二、编写汇编代码并运行三、分析hex文件四、总结五、参考

根据图勾选,选好之后直接ok就行了

MDK基于STM32汇编程序并编写软件程序一.创建新项目二、编写汇编代码并运行三、分析hex文件四、总结五、参考

二、编写汇编代码并运行

在source group里新建一个item

MDK基于STM32汇编程序并编写软件程序一.创建新项目二、编写汇编代码并运行三、分析hex文件四、总结五、参考

创建一个test.s文件

MDK基于STM32汇编程序并编写软件程序一.创建新项目二、编写汇编代码并运行三、分析hex文件四、总结五、参考

汇编代码如下:

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

           

然后点击那个魔法棒进行仿真调试

MDK基于STM32汇编程序并编写软件程序一.创建新项目二、编写汇编代码并运行三、分析hex文件四、总结五、参考

选择debug界面,选择使用仿真调试,同时将Dialog.DLL和后面的Parameter改为DARMSTM.DLL和-pSTM32F103RC,Parameter里根据自己的设备来选

MDK基于STM32汇编程序并编写软件程序一.创建新项目二、编写汇编代码并运行三、分析hex文件四、总结五、参考

如果需要生成hex文件,需要在output里选上

MDK基于STM32汇编程序并编写软件程序一.创建新项目二、编写汇编代码并运行三、分析hex文件四、总结五、参考

然后后面就可以进行仿真调试,不过得先build一下,才能进行仿真调试,旁边的那个带红色d的按钮就是仿真调试

MDK基于STM32汇编程序并编写软件程序一.创建新项目二、编写汇编代码并运行三、分析hex文件四、总结五、参考

进入仿真调试界面后,可以点run直接运行,也可以一步一步的调试,由于这个程序到后面是一个死循环,不设置断点也是可以的,然后点一下run旁边的叉就可以得到结果了,而寄存器里的内容也与我们所写的代码能对上。

MDK基于STM32汇编程序并编写软件程序一.创建新项目二、编写汇编代码并运行三、分析hex文件四、总结五、参考

三、分析hex文件

看out put 的目录,去找里面的hex文件

MDK基于STM32汇编程序并编写软件程序一.创建新项目二、编写汇编代码并运行三、分析hex文件四、总结五、参考

文件大小为2kb:

MDK基于STM32汇编程序并编写软件程序一.创建新项目二、编写汇编代码并运行三、分析hex文件四、总结五、参考

文件内容如下:

MDK基于STM32汇编程序并编写软件程序一.创建新项目二、编写汇编代码并运行三、分析hex文件四、总结五、参考

如图,第一行的:020000040800F2中,可以看作是0x02 0x00 0x00 0x04 0x08 0x00 0xf2

第一个 0x02 为数据长度。

紧跟着后面的0x00 0x00 为地址。

再后面的0x04为数据类型,类型共分以下几类:

‘00’ Data Record//数据记录

‘01’ End of File Record//文件结束记录

‘02’ Extended Segment Address Record//扩展段地址记录

‘03’ Start Segment Address Record//开始段地址记录

‘04’ Extended Linear Address Record//扩展线性地址记录

‘05’ Start Linear Address Record//开始线性地址记录

然后,接着0x04后面的两个 0x08 0x00就是数据。

最后一个0xF2是校验码,效验码=0x100-累加和。

四、总结

keil5的仿真调试只需要选择仿真调试的那个按钮就可以了,不过下面的dll因为版本问题需要手动去更改一下,也出现过调试的时候卡在systeminit()函数里的,查了一下也是dll的问题,后面也是查了资料才知道是因为调用了标准库函数导致。

五、参考

基于MDK创建纯汇编语言的STM32工程——汇编实现LED闪烁

hex文件百度百科

STM32烧录后卡在SystemInit无法进入main函数的解决办法

继续阅读