STM汇编程序设计

一、STM32三种BOOT模式的差异

1、三种启动模式的介绍

① BOOT1=x,BOOT0=0,从用户闪存启动,这是正常的工作模式。
② BOOT1=0,BOOT0=1,从系统存储器启动,这种模式启动的程序功能由厂家设置。就是通常说的ISP程序。这个区域的内容,芯片在出厂后便不可再擦除,修改,它是一个ROM区。
③ BOOT1=1,BOOT0=1,从内置SRAM启动,这种模式可以用于调试。

2、图示

在这里插入图片描述

3、实验

①boot0=0,boot1=0的时候,从闪存存储器启动
在这里插入图片描述
在这里插入图片描述
②boot0=1,boot1=0的时候,从系统存储器启动
在这里插入图片描述
在这里插入图片描述

二、编写一个汇编语言

1、新建一个工程

命名为TEST

2、配置

选择103ZE在这里插入图片描述

3、运行环境

勾选下图选项
在这里插入图片描述

4、添加源文件

在这里插入图片描述
选择汇编文件,命名为TEST
在这里插入图片描述

5、测试代码

 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

在这里插入图片描述
注意:下图前需要有空格,否则会报错
在这里插入图片描述

6、仿真器设置

在这里插入图片描述
这里根据自己需要选择ST-LINK
在这里插入图片描述
在这里插入图片描述
选择SW
在这里插入图片描述

7、编译调试

在这里插入图片描述
可以看到结果符合预期
在这里插入图片描述

8、观察hex文件各段大小

编译后将显示出各段大小
在这里插入图片描述

9、HEX文件前8个字节内容及含义

①内容:
在这里插入图片描述
②含义:
02是这个记录中数据数据字节的数量
0000是地址域,对于扩展线性地址记录这个域总是0000
04是记录类型(扩展线性地址记录)

10、更新

在烧录的过程中提示ST-LINK需要更新的问题,若不能直接更新,则需要自行从网上下载相应的更新程序进行更新
更新程序
提取码:jzdd

三、用汇编语言完成一个输出“hello world”的程序到串口

1、建立工程

创建一个工程
在这里插入图片描述
创建一个汇编文件
在这里插入图片描述
在这里插入图片描述

2、代码

实现灯每间隔1s闪烁一次

LED0 EQU 0x422101a0 
RCC_APB2ENR EQU 0x40021018
GPIOA_CRH EQU 0x40010804



Stack_Size      EQU     0x00000400

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp







                AREA    RESET, DATA, READONLY

__Vectors       DCD     __initial_sp               ; Top of Stack
                DCD     Reset_Handler              ; Reset Handler
                    
                    
                AREA    |.text|, CODE, READONLY
                    
                THUMB
                REQUIRE8
                PRESERVE8
                    
                ENTRY
Reset_Handler 
                BL LED_Init
MainLoop        BL LED_ON
                BL Delay
                BL LED_OFF
                BL Delay
                
                B MainLoop
             
LED_Init
                PUSH {R0,R1, LR}
                
                LDR R0,=RCC_APB2ENR
                ORR R0,R0,#0x04
                LDR R1,=RCC_APB2ENR
                STR R0,[R1]
                
                LDR R0,=GPIOA_CRH
                BIC R0,R0,#0x0F
                LDR R1,=GPIOA_CRH
                STR R0,[R1]
                
                LDR R0,=GPIOA_CRH
                ORR R0,R0,#0x03
                LDR R1,=GPIOA_CRH
                STR R0,[R1]
                
                MOV R0,#1 
                LDR R1,=LED0
                STR R0,[R1]
             
                POP {R0,R1,PC}

             
LED_ON
                PUSH {R0,R1, LR}    
                
                MOV R0,#0 
                LDR R1,=LED0
                STR R0,[R1]
             
                POP {R0,R1,PC}
             
LED_OFF
                PUSH {R0,R1, LR}    
                
                MOV R0,#1 
                LDR R1,=LED0
                STR R0,[R1]
             
                POP {R0,R1,PC}             
             
Delay
                PUSH {R0,R1, LR}
                
                MOVS R0,#0
                MOVS R1,#0
                MOVS R2,#0
                
DelayLoop0        
                ADDS R0,R0,#1

                CMP R0,#330
                BCC DelayLoop0
                
                MOVS R0,#0
                ADDS R1,R1,#1
                CMP R1,#330
                BCC DelayLoop0

                MOVS R0,#0
                MOVS R1,#0
                ADDS R2,R2,#1
                CMP R2,#15
                BCC DelayLoop0
                
                
                POP {R0,R1,PC}    
             
                NOP
             END

3、实验结果

在这里插入图片描述

四、总结

通过这次作业,我学会了汇编语言的一些基本语言的用法,掌握了如何利用汇编语言编写一个简单的程序并输出,利用调试来检验自己程序功能是否能够正常实现,也加深了我对于keil软件的理解,熟悉了使用方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值