程序代码:
.text
.global _start
_start:
@LED1
@GPIOE的外设时钟 RCC_MP_AHB4ENSETR 0x50000a28 [4]->1
LDR R0 , =0x50000A28 @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1
ORR R1,R1,#(0x1<<4) @[4]设置为1
STR R1,[R0] @将修改后的值写回去
@设置PE10为输出 GPIO_MODER[21:20]->01 0x500600
LDR R0,=0x50006000 @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1中
BIC R1,R1,#(0x3<<20) @将[21:20]设置为00
ORR R1,R1,#(0x1<<20) @[21:20]设置为01
STR R1,[R0] @将修改后的值写回去
@设置PE10为推挽输出 GPIOE_OTYPER[10]->0 0x5006004
LDR R0,=0x50006004 @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1中
BIC R1,R1,#(0x1<<10) @[10]设置为0
STR R1,[R0] @将修改后的值写回去
@设置PE10低速输出 GPIO_OSPEEDR[21:20]->00 0x5006008
LDR R0,=0x50006008 @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1中
BIC R1,R1,#(0x3<<20) @[21:20]设置为0
STR R1,[R0] @将修改后的值写回去
@设置PE10无上拉下拉电阻 GPIOx_PUPDR[21:20]->00 0x5006008
LDR R0,=0x5000600c @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1中
BIC R1,R1,#(0x3<<20) @[21:20]设置为0
STR R1,[R0] @将修改后的值写回去
@LED2
@GPIOE的外设时钟 RCC_MP_AHB4ENSETR 0x50000a28 [5]->1
LDR R0 , =0x50000A28 @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1
ORR R1,R1,#(0x1<<5) @[5]设置为1
STR R1,[R0] @将修改后的值写回去
@设置PE10为输出 GPIO_MODER[21:20]->01 0x500600
LDR R0,=0x50007000 @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1中
BIC R1,R1,#(0x3<<20) @将[21:20]设置为00
ORR R1,R1,#(0x1<<20) @[21:20]设置为01
STR R1,[R0] @将修改后的值写回去
@设置PE10为推挽输出 GPIOE_OTYPER[10]->0 0x5006004
LDR R0,=0x50007004 @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1中
BIC R1,R1,#(0x1<<10) @[10]设置为0
STR R1,[R0] @将修改后的值写回去
@设置PE10低速输出 GPIO_OSPEEDR[21:20]->00 0x5006008
LDR R0,=0x50007008 @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1中
BIC R1,R1,#(0x3<<20) @[21:20]设置为0
STR R1,[R0] @将修改后的值写回去
@设置PE10无上拉下拉电阻 GPIOx_PUPDR[21:20]->00 0x5006008
LDR R0,=0x5000700c @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1中
BIC R1,R1,#(0x3<<20) @[21:20]设置为0
STR R1,[R0] @将修改后的值写回去
@LED3
@GPIOE的外设时钟 RCC_MP_AHB4ENSETR 0x50000a28 [4]->1
LDR R0 , =0x50000A28 @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1
ORR R1,R1,#(0x1<<4) @[4]设置为1
STR R1,[R0] @将修改后的值写回去
@设置PE10为输出 GPIO_MODER[17:16]->01 0x500600
LDR R0,=0x50006000 @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1中
BIC R1,R1,#(0x3<<16) @将[17:16]设置为00
ORR R1,R1,#(0x1<<16) @[17:16]设置为01
STR R1,[R0] @将修改后的值写回去
@设置PE10为推挽输出 GPIOE_OTYPER[8]->0 0x5006004
LDR R0,=0x50006004 @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1中
BIC R1,R1,#(0x1<<8) @[8]设置为0
STR R1,[R0] @将修改后的值写回去
@设置PE10低速输出 GPIO_OSPEEDR[17:16]->00 0x5006008
LDR R0,=0x50006008 @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1中
BIC R1,R1,#(0x3<<20) @[17:16]设置为0
STR R1,[R0] @将修改后的值写回去
@设置PE10无上拉下拉电阻 GPIOx_PUPDR[17:16]->00 0x5006008
LDR R0,=0x5000600c @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1中
BIC R1,R1,#(0x3<<16) @[17:16]设置为0
STR R1,[R0] @将修改后的值写回去
LOOP: @B不让程序结束
bl LED1_ON
bl DELAY
bl LED1_OFF
bl DELAY
bl LED2_ON
bl DELAY
bl LED2_OFF
bl DELAY
bl LED3_ON
bl DELAY
bl LED3_OFF
bl DELAY
B LOOP
@点灯 GPIOE_ODR[10]->1 0x0006014
LED1_ON:
LDR R0,=0x50006014 @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1中
ORR R1,R1,#(0x1<<10) @将[10]设置为0
STR R1,[R0] @将修改后的值写回去
mov pc,lr @程序返回
@灭灯 GPIOE_ODR[10]->0 0x0006014
LED1_OFF:
LDR R0,=0x50006014 @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1中
bic R1,R1,#(0x1<<10) @将[10]设置为0
STR R1,[R0] @将修改后的值写回去
mov pc,lr @程序返回
@点灯 GPIOE_ODR[10]->1 0x0006014
LED2_ON:
LDR R0,=0x50007014 @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1中
ORR R1,R1,#(0x1<<10) @将[10]设置为0
STR R1,[R0] @将修改后的值写回去
mov pc,lr @程序返回
@灭灯 GPIOE_ODR[10]->0 0x0006014
LED2_OFF:
LDR R0,=0x50007014 @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1中
bic R1,R1,#(0x1<<10) @将[10]设置为0
STR R1,[R0] @将修改后的值写回去
mov pc,lr @程序返回
@点灯 GPIOE_ODR[8]->1 0x0006014
LED3_ON:
LDR R0,=0x50006014 @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1中
ORR R1,R1,#(0x1<<8) @将[8]设置为0
STR R1,[R0] @将修改后的值写回去
mov pc,lr @程序返回
@灭灯 GPIOE_ODR[8]->0 0x0006014
LED3_OFF:
LDR R0,=0x50006014 @指定基地址
LDR R1,[R0] @将寄存器数据读取出来保存到R1中
bic R1,R1,#(0x1<<8) @将[8]设置为0
STR R1,[R0] @将修改后的值写回去
mov pc,lr @程序返回
@延时:
DELAY:
LDR r3,=0x5000000
MIN:
cmp r3,#0
subne r3,r3,#1
bne MIN
mov pc,lr @程序返回
.end