当前位置:   article > 正文

在keil下创建工程并调试STM32汇编源程序【单片机入门】_生成的hex文件怎么选芯片

生成的hex文件怎么选芯片

本篇博客用于介绍在keil环境下仿真测试一个简单的stm32汇编语言程序,
运行程序,通过观察寄存器变化来验证实验

一、新建一个keil工程

  1. 点击 New μVision Project,从而新建一个工程文件

    在这里插入图片描述

    在这里插入图片描述

  2. 选择你所要使用的芯片型号,这里我选择芯片 STM32103VE 进行测试(这个名字要记住,因为后面设置参数要使用这个)

    在这里插入图片描述

  3. 设置芯片的一些环境,勾选 CMSIS 中的 COREDevice 中的 Starup

    在这里插入图片描述

二、在工程中添加汇编语言程序

  1. 找到 Project 工作区中的 Source Group 1 文件夹(这个文件夹名称可能引人而异)

    在这里插入图片描述

  2. 右击 Source Group 1 并点击 Add New Item to Group ‘Source Group 1’ 添加源文件

    在这里插入图片描述

  3. 在弹出的文件类型选择框中选择__Asm File (.s)__类型文件,命令并保存
    在这里插入图片描述

三、编译接口环境设置

3.1无硬件,软件仿真情况下的设置

  1. 点击页面上的魔法棒,对程序环境进行设置 在这里插入图片描述

  2. 选择Output框,勾选Create HEX File
    在这里插入图片描述


  1. 继续在点击魔法棒后弹出的框中选择 Debug 选项

因为我们做的是无硬件的仿真,所以勾选左侧的 Use Simulator
(右侧的那些选项为硬件测试的设置,不用管)
在这里插入图片描述


  1. 设置参数
    这一步很重要,如果设置错误,后续寄存器可能无法观察到变化
    Dialogue DLL 中的填写内容改为 DARMSTM.DLL
    Parameter 中填写 -pSTM32F103ZE(这个名称要与你选择的芯片型号一致)

即填写为下面表格这样

Dialogue DLLParameter
DARMSTM.DLL-pSTM32F103VE

在这里插入图片描述
这个设置详细讲解参考以下博客
STM32-仿真调试时的SystemInit死循环


  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


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

3.2有外接硬件测试调试设置

如果有外接硬件的话,可以参考以下博客的设置
ARM汇编基础之基于MDK创建纯汇编语言的STM32工程


3.3运行调试程序

  1. 右击代码的一列,点击 Insert/Remove Breakingpoint 插入断点
    在这里插入图片描述

  2. 依次点击界面 bulid 按钮 与 debug 按钮开始程序调试
    在这里插入图片描述

  3. 点击左上角的 step 按钮逐步步进程序(也可以按键盘上的F11进行步进)
    在这里插入图片描述

  4. 随着程序的步进可以观察到单片机内部的寄存器数值变化,此结果是与汇编程序的理想结果一致的,实验结束。
    在这里插入图片描述

四、观察生成的Hex文件

Hex文件格式是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式有很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex。

Hex文件如果用特殊的程序来查看(一般记事本就可以实现)。打开后可发现,整个文件以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)。

4.1在文件夹中找到你的Hex文件

许多同学反映无法找到生成文件在哪里HEX,其实HEX文件被放在了系统自动生成的一个文件夹里,就在下图表示的这个文件夹里(名字取决于你的工程文件名)。

这个文件夹在你的工程文件夹里

在这里插入图片描述

找到你的工程文件夹,点开Objects文件夹
在这里插入图片描述

这就找到了HEX文件的所在之处了

在这里插入图片描述

4.2 观察最终生成的 Hex 文件

  1. 观察最终生成 Hex文件的各段的大小

buildrebuild 之后,界面下方的 output 界面可以观察到所生成的HEX文件的信息
在这里插入图片描述

  1. 观察Hex文件第一行内容
    在这里插入图片描述

参考博客:HEX文件格式详解
第一行内容分别是0x02,0x00,0x00,0x04,0x08,0x00,0xF2

名称含义
0x02该行数据中有两个数据
0x00 0x00本行数据的起始地址位
0x04用来标识扩展线性地址的记录
0x08 0x00该行两个字节的数据
0xF2校验和

第一个 0×02 表示该行数据中有两个数据

第二个,第三个 0x00 0x00 表示本行数据的起始地址位

第四个字节有 0x00 0x01 0x02 0x03 0x04 0x05 ,分别有以下含义

’00’Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录

’01’文件结束记录:用来标识文件结束,放在文件的最后,标识HEX文件的结尾

’02’扩展段地址记录:用来标识扩展段地址的记录

’03’开始段地址记录:开始段地址记录

’04’扩展线性地址记录:用来标识扩展线性地址的记录

’05’开始线性地址记录:开始线性地址记录

最后一个字节 0xf8 为校验和。校验和 = 0x100 - 累加和。
在nodepad++中,如果该校验和不是绿色,则表示该校验和是错的。

注意,0×04 标识扩展线性地址的记录,所以如上图中的020000040002f8中,拓展地址是0002。那么第二行数据的起始地址就是0002c000,即0x0002c000开始


五、总结

  本文介绍了在keil环境下,演示了如何创建工程文件、生成Hex文件、debug的具体设置,并演示了如何在keil中进行汇编语言源文件的添加与调试运行,最后对生成的Hex文件的第一行内容进行了分析。

  Hex文件对于之后的烧入是必要的,因此对Hex文件的生成以及格式都需要进行一定的了解。本次实验只进行了软件的仿真实验,并未进行真正的硬件调试,后续会继续调试硬件,并会在博客中进行补充完善。




参考博客:
1.基于MDK创建纯汇编语言的STM32工程——汇编实现LED闪烁
2.STM32基于汇编方式创建工程文件和闪烁LED灯
3.ARM汇编基础之基于MDK创建纯汇编语言的STM32工程
4.基于 MDK 创建 STM32 汇编语言工程并分析 HEX 文件内容
5.HEX文件格式详解

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/778143
推荐阅读
相关标签
  

闽ICP备14008679号