Hello, world! 学习STM32,从用它点亮我的LED小灯开始,可以提高自我学习兴趣,但其意义却不仅于此,更重要的意义到目前为止想到了两条:
尽管只想到两条,但认为已经足够充分让我做出如此选择了^v^.
只是点亮一只LED小灯,但它也足足花了我一周的时间(但还有几个问题没真正弄明白),所涉及的东西并不太少,最后总结一下,大概要知道如下的东东:
Oh, My God!
我只是要点亮一只LED小灯而已!没错,在这里并没有打算做更多的事情。虽然涉及很多的东西,但别忘了目的也正在于此,每个方面都会涉及一些,但在每个知识点上所要掌握的却很少很少,例如指令,这里可能只会用到几条,所以大可不必担心!一向不太强求自己去记额外的东西,在这里,没有掌握的东西只会有二类,一是用不着,二是现在还用不着。太多的东西我们只要检索就行了,如指令,看一遍然后打印出来放在手边就行了,大脑内存有限,况且现在硬盘这么便宜,网络这么发达%&%#$%@#$,在这里图的只是先混个脸熟。
大概了解一下,STM32里面有很多的东东,不可能毕其功于一役,我的计划是一年,且让我慢慢学来^v^。
点亮一只LED,也是一波好几折,从最开始引脚没有配置,再到引脚时钟没有打开,等等。最后终于看到我的小LED开始闪烁了^v^。这里将程序贴出,以期与同道中人交流学习。
( 由于上传格式限制,附件为txt档,将后缀改为.asm后加到keil工程里可直接编译通过。)
;**************************************************************************************
;Author: Kevin
;Date: 2010/01/8
;CPU: STM32103RB
;Function: To flash the LEDs which are connected to PA0~PA7,
; just a simple demo of how to use assembly
language to program STM32 MCU.
;*************************************************************************************
STACK_TOP EQU 0X00002000
;-----------------------------------------------
AREA RESET,CODE,READONLY
DCD STACK_TOP
DCD
POWERON
POWERON
LDR R0,=START
BX R0
;------------------------------------------------------------------------------
AREA BLINK_LED,CODE,READONLY
ENTRY
START
;----------------------------------------------------------------
LDR R1,=0X40021000
LDR R0,=0X00000003 ; RCC_CR
STR R0,[R1,#0X00]
LDR R0,=0X00000000
STR R0,[R1,#0X004] ;RCC_CFGR
LDR R0,=0X00000014
STR R0,[R1,#0X14]
LDR R0,=0XFFFFFFFF
STR R0,[R1,#0X18]
;-----------------------------------------------------------------
;configure the PA0~PA7 in MODE: General purpose
output_push-pull.
MOVS R0,#0X22222222
LDR R1,=0X40010800
STR R0,[R1,#0X00]
;----------------------------------------------------------------------
MAIN
LDR R1,=0X40010800
LDR R0,=0Xfffffff1
STR R0,[R1,#0X0C] ;write 0xffffffff
to GIPOA_ODR, turn off the LEDs
;----------------------------
BL DELAY ;delay some time
;----------------------------
LDR R0,=0XFFFFFFF2
STR R0,[R1,#0X0C] ;write 0x0000000 to
GIPOA_ODR, turn on the LEDs
;----------------------------
BL DELAY
;---------------------------- ;delay some time
B MAIN ;jump to
MAIN
;-------------------------------------------------------------------------
DELAY
LDR R3,=0X0002FFFF
DELAY_1
SUBS R3,R3,#0X01
BEQ DELAY_OUT
B DELAY_1
DELAY_OUT
BX LR
;-------------------------------------------------
END