请选择 进入手机版 | 继续访问电脑版

STM32汇编程序及点灯实验

[复制链接]
欣然自乐 发表于 2020-12-31 20:29:02 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
目录



(一)Keil下编写汇编步伐

1、新建工程

1、点击菜单栏的Project,在弹出的窗口点击选项New uVision Project,创建新的工程

2、设置项目工程的路径和名称,点击生存

2、设置情况

1、设置工程的目的情况,本文基于STM32F103ZET6,因此在弹出的窗口选择相应的选项,点击生存即可

2、ARM的CMSIS已经把开辟所需要的软件组件都封装好了,因此直接选择即可

3、鼠标右键单击Source Group 1,具体如下图所示;


3、测试代码

1、编译并调试如下代码
  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
复制代码

2、硬件仿真器根据自己的实际情况举行选择,如下图所示;

3、按照下图所示,编译工程并进入调试模式

4、进入调试界面可以看到,寄存器的值和步伐设置一致,

(二)HEX文件格式说明

1、简介

  .HEX 文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII 文本文件。在Intel HEX 文件中,每一行包含一 个 HEX 记载 。 这些记载由对应呆板语言码和/或常量数据的十六 进 制编码数字组成。HEX 文件通常用于传输将被存于ROM 大概EPROM 中的步伐和数据。大多数EPROM 编程器或模拟器使用HEX 文件。
2、格式说明

HEX格式文件以行为单位记载数据,每行都由任意数量的十六进制数组成。它们按以下格式排列

格式说明冒号数据每行都由冒号开头A数据长度 1 Byte ,表示本行数据的长度B数据地点 2 Byte ,表示数据的起始地点C数据范例 1 ByteD具体数据 N Byte ,表示本行中数据字节的数量,它和A说明的数据长度一致E校验和 1 Byte ,检验和 = 0x100 - 累加和 数据范例详解‘00’数据记载:用来记载数据,HEX文件的大部门记载都是数据记载‘01’文件竣事记载:用来标识文件竣事,放在文件的最后,标识HEX文件的末了‘02’扩展段地点记载:用来标识扩展段地点的记载‘03’开始段地点记载:开始段地点记载‘04’扩展线性地点记载:用来标识扩展线性地点的记载‘05’开始线性地点记载:开始线性地点记载3、举例说明 (上述工程生成的 .hex文件)

在“魔法棒”中勾选“create HEX file”,然后再运行步伐,就可以在相应的文件夹中找到.HEX文件


HEX文件分析:
  

  • 第一行 :020000040800F2 中,可以看做是0x02 0x00 0x00 0x04 0x08 0x00 0xf2
  • 第一个0×02表示该行数据中有两个数据
  • 第二个,第三个0x00 0x00表示本行数据的起始地点位
  • 第四个字节 0x04 表示扩展线性地点记载,对应上述的TT域
  • 第五个、第六个 0x08 0x00表示数据字节,与**数据长度域(LL)**中对应,即第一个 0x02
  • 最后一个字节0xf2为校验和。校验和= 0x100 - 累加和
(三)基于STM32 汇编每隔断1秒钟闪烁一次LED的步伐

1、按上面的步调重新再创建一个纯汇编语言的STM32工程,选择运行情况时,不消再勾选 “Startup” 和 “CORE”。
  1. LED0 EQU 0x42218194RCC_APB2ENR EQU 0x40021018;GPIOA_CRH EQU 0x40010804GPIOB_CRL EQU 0x40010C00Stack_Size      EQU     0x00000400                AREA    STACK, NOINIT, READWRITE, ALIGN=3Stack_Mem       SPACE   Stack_Size__initial_sp                AREA    RESET, DATA, READONLY__Vectors       DCD     __initial_sp                               DCD     Reset_Handler                                                                      AREA    |.text|, CODE, READONLY                                    THUMB                REQUIRE8                PRESERVE8                                    ENTRYReset_Handler                 BL LED_InitMainLoop        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,#0x08                                LDR R1,=RCC_APB2ENR                STR R0,[R1]                                LDR R0,=GPIOB_CRL                BIC R0,R0,#0XFF0FFFFF                        LDR R1,=GPIOB_CRL                STR R0,[R1]                                LDR R0,=GPIOB_CRL                ORR R0,R0,#0X00300000                LDR R1,=GPIOB_CRL                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}                    END
复制代码
2、设置好后烧录到开辟板中,效果图如下:


来源:https://blog.csdn.net/lxy13608322474/article/details/111773624
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )