最近stm32的小项目弄的差不多了,无聊之余用arm9裸机程序的写法来写stm32,使得stm32 工程不再依赖库文件,只用一个.s运行,不过代码比较简单,随便写了个LED闪灯,喜欢汇编的朋友可以来一起"自找麻烦",呵呵
主要的代码如下:
;上面就是原来的向量表了
;下面是代码段
AREA |.text|, CODE, READONLY
; Reset handler
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
; LDR R0, =SystemInit ;这个函数不用,注释掉了
; BLX R0 ;现在程序运行在8M的时钟下,原始时钟
LDR R3,=LED_INIT
BLX R3
WHILE_LOOP
LDR R3,=LED_LIGHT
BLX R3
BL mDELAY_xMS ;这里适当的延时
BL LED_OFF
BL mDELAY_xMS
B WHILE_LOOP ;循环闪灯,led就闪烁起来了
ENDP
mDELAY_xMS PROC
ldr R0,=0x00F4240 ;1000000
MOV R1,#1
LOOP
SUB R0,R0,R1
CMP R0,#0
BNE LOOP
; MOV PC,LR
BX LR
ENDP
LED_INIT PROC ;初始化LED,根据PA1初始化各寄存器,我的板子LED是接在PA1
LDR R0,=0x40021018
mov R1,#4
str R1,[R0]
LDR R0,=0x40010800
MOV R1,#0x00000030
str R1,[R0]
LDR R0,=0x40010810
mov R1,#2
; MOV PC,LR
BX LR
ENDP
LED_LIGHT PROC
ldr R0,=0x40010810 ;led亮
mov R1,#0x20000
str R1,[R0]
;MOV PC,LR
BX LR
ENDP
LED_OFF PROC
ldr R0,=0x40010810 ;led 灭
mov R1,#2
str R1,[R0]
; MOV PC,LR
BX LR
ENDP
程序简单,就不贴闪灯的现象了,stm32和arm9都是arm核,指令还是有很多能通用的,这样写着玩还行,要是大一点的工程全用汇编来写那就是傻子了