ARM:2024/4/11

实现三个灯的闪烁

代码:
cs 复制代码
.text 
.global _start
_start: 
    
    @使能GPIOE的外设时钟   RCC_MP_AHB4ENSETR 0x50000a28   [4]->1
    LDR R0,=0X50000A28  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    ORR R1,R1,#(0x1<<4)   @[4]设置为1
    STR R1,[R0]  @将修改之后的值写回去

    @使能GPIOF的外设时钟   RCC_MP_AHB4ENSETR 0x50000a28   [5]->1
    LDR R0,=0X50000A28  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    ORR R1,R1,#(0x1<<5)   @[5]设置为1
    STR R1,[R0]  @将修改之后的值写回去


@LED1

    @设置PE10为输出   GPIOE_MODER [21:20]->01   0X50006000
    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   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]设置为0
    STR R1,[R0]  @将修改之后的值写回去

    @设置PE10无上拉下拉电阻 GPIOx_PUPDR
    LDR R0,=0X5000600C  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<20)   @[21:20]设置为0
    STR R1,[R0]  @将修改之后的值写回去




@LED2

    @设置PF10为输出   GPIOE_MODER [21:20]->01   0X50007000
    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]  @将修改之后的值写回去

    @设置PF10为推挽输出  GPIOE_OTYPER[10]->0   0X50007004
    LDR R0,=0X50007004  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x1<<10)   @[10]设置为0
    STR R1,[R0]  @将修改之后的值写回去

    @设置PF10低速输出  GPIOE_OSPEEDR[21:20]->00  0X50007008
    LDR R0,=0X50007008  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<20)   @[21:20]设置为0
    STR R1,[R0]  @将修改之后的值写回去

    @设置PF10无上拉下拉电阻 GPIOx_PUPDR
    LDR R0,=0X5000700C  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<20)   @[21:20]设置为0
    STR R1,[R0]  @将修改之后的值写回去



@LED3

    @设置PE8为输出   GPIOE_MODER [17:16]->01   0X50006000
    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]  @将修改之后的值写回去

    @设置PE8为推挽输出  GPIOE_OTYPER[10]->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]设置为0
    STR R1,[R0]  @将修改之后的值写回去

    @设置PE8无上拉下拉电阻 GPIOx_PUPDR
    LDR R0,=0X5000600C  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<16)   @[17:16]设置为0
    STR R1,[R0]  @将修改之后的值写回去




LOOP:  @不让程序结束

@LED1
    bl LED_ON
    bl DELAY
    bl LED_OFF
    bl DELAY
    B LOOP


@亮灯
LED_ON:
@LED1
    LDR R0,=0X50006014  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    ORR R1,R1,#(0x1<<10)   @[10]设置为1
    STR R1,[R0]  @将修改之后的值写回去
@LED2
    LDR R0,=0X50007014  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    ORR R1,R1,#(0x1<<10)   @[10]设置为1
    STR R1,[R0]  @将修改之后的值写回去
@LED3
    LDR R0,=0X50006014  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    ORR R1,R1,#(0x1<<8)   @[8]设置为1
    STR R1,[R0]  @将修改之后的值写回去

    MOV PC,LR  @程序返回

@灭灯
LED_OFF:
@LED1
    LDR R0,=0X50006014  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x1<<10)   @[10]设置为0
    STR R1,[R0]  @将修改之后的值写回去
@LED2
   LDR R0,=0X50007014  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x1<<10)   @[10]设置为0
    STR R1,[R0]  @将修改之后的值写回去
@LED3
    LDR R0,=0X50006014  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x1<<8)   @[8]设置为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
相关推荐
chuwengeileyan11 天前
过零比较器 proteus
嵌入式硬件
foundbug9991 天前
51单片机 PT100 温度测量程序
单片机·嵌入式硬件·51单片机
星夜夏空991 天前
STM32单片机学习(21) —— I2C通信
stm32·单片机·学习
qq_333120971 天前
深入探讨8051单片机C351语言及编译器应用
单片机·嵌入式硬件·51单片机
时光の尘1 天前
【STM32实战】ESP8266 通过 MQTT 协议对接 OneNET 云平台实现数据上传与下发(源码可直接移植)
stm32·mqtt·嵌入式·iot·esp8266
十年编程老舅1 天前
读懂 MCU 启动:从上电到程序运行全链路
单片机·嵌入式硬件·mcu·嵌入式·cpu·嵌入式开发·ram
北京盟通科技官方账号1 天前
Windows如何实现硬实时?LxWin双系统隔离架构深度解析
stm32·嵌入式硬件·具身智能·ethercat·人形机器人·实时系统·windows实时扩展
国科安芯2 天前
低噪声LDO如何破解测试测量与医学成像的电源困局
网络·单片机·嵌入式硬件·安全性测试
半条-咸鱼2 天前
【STM32】HAL库的本质 及 芯片内部GPIO模块细节
stm32·单片机·嵌入式硬件
小叮当⇔2 天前
阻容品牌推荐
嵌入式硬件