新建工程
- 点击菜单栏的Project,
- 在弹出的窗口点击选项New uVision Project,创建新的工程,如下图所示:
环境配置
- 设置工程的目标环境,本文使用的是
STM32F103ZET6
,因此在弹出的窗口选择相应的选项,点击保存即可;具体如下图所示;
ARM
的CMSIS
已经把开发所需要的软件组件都封装好了,因此直接选择即可;
1.CMSIS
下选择CORE
;
2.Device
下Startup
,其中包含了启动文件
如下图所示: - 鼠标右键单击
Source Group 1
,选择Add New Item to Group
,创建一个.s
文件,如下图所示:
创建后如下图所示:
代码如下:
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
#运行结果:
点击编辑运行,输出生成hex文件:
最后可以看到,结果符合预期,寄存器R5,R6,R7,R8的值和程序设置一致。
在HEX文件中,第一行020000040002f8中,可以看做是0x02 0x00 0x00 0x04 0x02 0x02 0xf8,其前四个字节和最后一个字节有特殊含义。中间为数据
- 第一个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开始
编写一个LED显示程序
再新建一个项目,往里边添加一个.s文件:
编译通过并且成功生成.hex文件,通过串口烧录程序烧金板子后如下图所示:
由于这个程序是通过控制I/O口PA8电位的变化从而使LED灯发生变化,而我们使用的野火stm32mini开发板LDE没有在PA8而是在PC1和PC2,所以开发板的等不能正常显示。
参考链接:https://blog.youkuaiyun.com/u010632165/article/details/106481146
https://blog.youkuaiyun.com/weixin_43836778/article/details/108598294