【无标题】

2023-12-21 21:47:31

.text 
.global _start
_start: 

@===================LED1======================
    @设置GPIOE时钟使能  RCC_MP_AHB4ENSETR[4]->1   0X50000A28
    LDR R0,=0X50000A28  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    ORR R1,R1,#(0x1<<4)  @将第4位设置为1
    STR R1,[R0] @将修改后的值写回去

    @设置PE10为输出  GPIOE_MODER[21:20]->01   0X50006000
    LDR R0,=0X50006000  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x3<<20)  @将第[21:20]位设置为01
    ORR R1,R1,#(0x1<<20)
    STR R1,[R0] @将修改后的值写回去

    @设置PE10为推挽输出 GPIOE_OTYPER[10]->0  0X50006004
    LDR R0,=0X50006004  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x1<<10)  @将第[10]位设置为0
    STR R1,[R0] @将修改后的值写回去

    @设置PE10为低速输出 GPIOE_OSPEEDR[21:20]->00  0x50006008
     LDR R0,=0X50006008  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x3<<20)  @将第[21:20]位设置为00
    STR R1,[R0] @将修改后的值写回去

    @设置PE10输出时无上拉下拉电阻  GPIOE_PUPDR[21:20]->00  0X5000600C
    LDR R0,=0X5000600C  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x3<<20)  @将第[21:20]位设置为00
    STR R1,[R0] @将修改后的值写回去

@===================LED2======================
    
@设置GPIOF时钟使能 RCC_MP_AHB4ENSETR[4]->1 0x50000A28
	LDR R0,=0x50000A28 @指定寄存器地址
  LDR R1,[R0] @将寄存器数值取出来放在R1中
  ORR R1,R1,#(0x1<<5) @将第5位设置为1
  STR R1,[R0] @将修改后的值写回去
 
  @设置PF10为输出 GPIOF_MODER[21:20]->01 0x50007000
  LDR R0,=0x50007000 @指定寄存器地址
  LDR R1,[R0] @将寄存器数值取出来放在R1中
  BIC R1,R1,#(0x3<<20) @ 20、21 位清零
  ORR R1,R1,#(0x1<<20) @20 位置1
  STR R1,[R0] @将修改后的值写回去
 
  @设置PF10为推晚输出 GPIOF_OTYPER[10]->0 0x50007004
  LDR R0,=0x50007004 @指定寄存器地址
  LDR R1,[R0] @将寄存器数值取出来放在R1中
  BIC R1,R1,#(0x1<<10) @将第10位设置为0
  STR R1,[R0] @将修改后的值写回去
 
  @设置PF10为低速输出 GPIOF_OSPEEDR[21:20]->00 0x50007008
  LDR R0,=0x50007008 @指定寄存器地址
  LDR R1,[R0] @将寄存器数值取出来放在R1中
  BIC R1,R1,#(0x3<<20) @将第 20、21 位清零
  STR R1,[R0] @将修改后的值写回去
 
  @设置PF10输出时无上拉下拉电阻 GPIOF_PUPDR[21:20]->00 0x5000700C
  LDR R0,=0x5000700C @指定寄存器地址
  LDR R1,[R0] @将寄存器数值取出来放在R1中
  BIC R1,R1,#(0x3<<20) @将第 20、21 位清零

@===================LED3======================

    @设置PE10为输出  GPIOE_MODER[21:20]->01   0X50006000
    LDR R0,=0X50006000  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x3<<20)  @将第[21:20]位设置为01
    ORR R1,R1,#(0x1<<20)
    STR R1,[R0] @将修改后的值写回去

    @设置PE8为推挽输出 GPIOE_OTYPER[8]->0  0X50006004
    LDR R0,=0X50006004  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x1<<8)  @将第[8]位设置为0
    STR R1,[R0] @将修改后的值写回去


    @设置PE8为低速输出 GPIOE_OSPEEDR[17:16]->00  0x50006008
     LDR R0,=0X50006008  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x3<<16)  @将第[17:16]位设置为01
    STR R1,[R0] @将修改后的值写回去


	@设置PE8输出时无上拉下拉电阻  GPIOE_PUPDR[17:16]->00  0X5000600C
    LDR R0,=0X5000600C  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x3<<16)  @将第[17:16]位设置为01
    STR R1,[R0] @将修改后的值写回去


flash:
   bl led1_on  @灯亮
   bl led2_on  @灯亮
   bl led3_on  @灯亮
   bl delay  @延时
   bl led1_off  @灯灭
   bl led2_off @灯亮
   bl led3_off @灯亮
   bl delay
   b flash

led1_on:
     @设置PE10输出高电平  GPIOE_ODR[10]->1   0x50006014
    LDR R0,=0X50006014  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    ORR R1,R1,#(0x1<<10)  @将第[10]位设置为1
    STR R1,[R0] @将修改后的值写回去
    mov pc,lr

led2_on:
     @设置PE10输出高电平  GPIOE_ODR[8]->1   0x50006014
    LDR R0,=0X50006014  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    ORR R1,R1,#(0x1<<8)  @将第[10]位设置为1
    STR R1,[R0] @将修改后的值写回去
    mov pc,lr

led3_on:
     @设置PF10输出高电平  GPIOE_ODR[10]->1   0x50006014
    LDR R0,=0X50007014  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    ORR R1,R1,#(0x1<<10)  @将第[10]位设置为1
    STR R1,[R0] @将修改后的值写回去
    mov pc,lr

led1_off:
     @设置PE10输出高电平  GPIOE_ODR[10]->0   0x50006014
    LDR R0,=0X50006014  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x1<<10)  @将第[10]位设置为0
    STR R1,[R0] @将修改后的值写回去
    mov pc,lr

led2_off:
     @设置PE10输出高电平  GPIOE_ODR[10]->0   0x50006014
    LDR R0,=0X50006014  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x1<<8)  @将第[10]位设置为0
    STR R1,[R0] @将修改后的值写回去
    mov pc,lr

led3_off:
     @设置PE10输出高电平  GPIOE_ODR[10]->0   0x50006014
    LDR R0,=0X50007014  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x1<<8)  @将第[10]位设置为0
    STR R1,[R0] @将修改后的值写回去
    mov pc,lr

delay:
    LDR  R3,=0x10000000
mm:
    cmp r3,#0
    subne r3,r3,#1
    bne mm
    mov pc,lr


.end

实现3个灯一起亮一起熄灭

文章来源:https://blog.csdn.net/SinbiaLurika/article/details/135139643
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。