赞
踩
1、Keil5:
官网下载地址:https://www.keil.com/download/product/
2、Keil注册器:
链接:https://pan.baidu.com/s/1XFTEdhNFIx4HuZfYKxrc6g
提取码:4869
3、stm32包
链接:https://pan.baidu.com/s/1Pe8ppEkdTWRvZhPErhDTSQ
提取码:4869
点击运行下载的支持包,NEXT开始安装,安装完成,点击Finish。
1、keil5以及注册器安装完成后,关闭杀毒软件,然后以管理员身份运行keil5。
2、在file->license management中,找到CID,并复制下来。
3、关闭声音,运行注册器,选择arm并输入刚刚复制的CID,生成一段代码
4、将这段代码输入license management的LIC中,点击add lic
一、点击project -> new project
选择一个路径来存放你的项目文件,并输入你的项目文件名称,这里我写的是project。
点击保存。
二、在弹出的页面中,选择你自己所用的芯片。我选用的是野火的指南者,因此选择的是对应的STM32F103VE。
三、芯片选择完成后选择运行环境,勾出图中框的部分即可。
勾选后选择ok,项目就构建好了。
点击左上角的新建文件,待文件出现后点击保存,将文件保存在项目路径下。
因为这里要编写汇编语言,因此文件后缀名是.s。以后用c语言开发的话一般用.c或者.h文件。
右键点击项目里的Source Group 1,选择添加现有文件(图中所框住的部分)
然后在弹出的页面中选择刚刚保存的.s文件,将其加入本项目。
点击add,再关闭这个窗口。这时候再看左边的项目结构,就会发现文件已经加入项目里面了。现在可以对其进行编写了。
在保存的文件中编写以下代码:
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
这段代码的功能是往寄存器R0-R8中填入数据。
在编写好代码后,点击上方的魔术棒图标,如图选择output并勾选生成hex文件。
再点击debug,如图所示,选择使用左边的仿真器,并填写好自己的设备信息。
我使用的野火指南者,就按图上显示的那样填写。不同的板子要填写的内容也不一样。
在func3的末尾打上一个断点,然后点击调试按钮,如图所示:
点击调试按钮后进入调试界面。
在界面的左边是寄存器的内容,当进行调试的时候,左边的寄存器内容会发生变化。右边上面是执行的指令,下面是源代码。
点击左上角的运行或者单步调试,就可以看见左边的寄存器内容发生了变化。
随着程序的运行,寄存器中的内容开始发生变化。
在选择生成hex文件后,编译项目会生成一个hex文件。这个hex文件下载到单片机中即可运行对应的程序。
至于这个hex文件里面又是什么呢
以上面的代码为例,它生成的hex文件内容如下:
:020000040800F2 :100000000006002031010008390100083B0100080A :100010003D0100083F010008410100080000000008 :100020000000000000000000000000004301000884 :1000300045010008000000004701000849010008D0 :100040004B0100084B0100084B0100084B01000860 :100050004B0100084B0100084B0100084B01000850 :100060004B0100084B0100084B0100084B01000840 :100070004B0100084B0100084B0100084B01000830 :100080004B0100084B0100084B0100084B01000820 :100090004B0100084B0100084B0100084B01000810 :1000A0004B0100084B0100084B0100084B01000800 :1000B0004B0100084B0100084B0100084B010008F0 :1000C0004B0100084B0100084B0100084B010008E0 :1000D0004B0100084B0100084B0100084B010008D0 :1000E0004B0100084B0100084B0100084B010008C0 :1000F0004B0100084B0100084B0100084B010008B0 :100100004B0100084B0100084B0100084B0100089F :100110004B0100084B0100084B0100084B0100088F :100120004B0100084B0100084B0100084B0100087F :100130000948804709480047FEE7FEE7FEE7FEE77B :10014000FEE7FEE7FEE7FEE7FEE7FEE704480549B7 :10015000054A064B70470000A50200087901000817 :100160000000002000060020000200200002002005 :1001700070477047704700004FF00A004FF00B01C6 :100180004FF00C024FF00D0300F009F800F00AF8F0 :1001900000F00BF8DFF81CE0DFF81CF0FEE74FF092 :1001A000050570474FF0060670474FF007074FF000 :1001B000080870479F010008AB01000810B500F067 :1001C00001F810BD0CB50020019000903348006884 :1001D00040F480303149086000BF3048006800F4C6 :1001E000003000900198401C0190009818B90198C7 :1001F000B0F5A06FF1D12948006800F4003010B1CB :100200000120009001E0002000900098012843D1D7 :100210002348006840F01000214908600846006843 :1002200020F0030008600846006840F00200086003 :100230001A484068194948600846406848600846BE :10024000406840F4806048600846406820F47C10B4 :1002500048600846406840F4E81048600846006876 :1002600040F08070086000BF0C48006800F000702B :100270000028F9D00948406820F003000749486089 :100280000846406840F00200486000BF03484068EC :1002900000F00C000828F9D10CBD0000001002404D :1002A0000020024010B51348006840F001001149D9 :1002B000086008464068104908400E4948600846F2 :1002C00000680E4908400B4908600846006820F4A1 :1002D000802008600846406820F4FE0048604FF423 :1002E0001F008860FFF76AFF4FF000600449086054 :1002F00010BD0000001002400000FFF8FFFFF6FEF6 :0403000008ED00E024 :040000050800017975 :00000001FF
对于如何理解这些数据,我参考了这篇博客:https://blog.csdn.net/MQ0522/article/details/121648987
正如这篇博客里所说,文件里的每一行都是一条数据记录,以冒号开头,以换行结尾。而数据则使用十六进制的ASCII码表示。
对于每一条记录,有六个部分,从左往右依次是:
冒号(1个字符),数据长度(一个字节),起始地址(两个字节),数据类型(一个字节),数据(字节数是数据长度值的两倍),校验和(最后一个字节)
数据长度N:表示本行的数据长度,采用十六进制,范围是0x00~0xff
起始地址:本行数据的起始地址,16进制:0~FFFF
注意,当数据类型为0x01~0x05时,起始地址为0000
数据类型:一个字节表示,有以下几种情况:
00:表示记录数据
01:表示文件的结束
02:标识扩展段地址
03:标识开始段地址
04:标识扩展线性地址
05:标识开始线性地址
数据:
本条记录的主体,数据长度为N
校验和:用0x100-累加和(前面所有十六进制数之和)表示
1. https://blog.csdn.net/MQ0522/article/details/121648987
2. https://blog.csdn.net/qq_45659777/article/details/120496577
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。