STM32L152 无 HAL 的裸机 Rust

问题描述 投票:0回答:0

我目前在 11 年级,在课堂上用汇编程序进行了一些编程。为了好玩,我坐下来尝试使用 Rust 而不是汇编程序。我设法让 LED 灯亮起,但闪烁仍然不起作用。我想问问是否有人可以给我一些关于如何使这段代码更好地工作或让它工作的提示。我试着只用不安全的和 write_volatile 来做到这一点。我将项目上传到 Github 存储库:https://github.com/HttpRafa/school/tree/asm-j0

我已经用完整的汇编程序编写了 Blink 程序并且它可以工作。所以所有的地址和偏移量都应该是正确的。

.word 0x20000400            //Anfang Stackpionter -> SP
.word 0x080000ed            //reset_handler: Programmadresse nach reset
.space 0xe4             //Reservierter Platz für Interrupt-Vektoren

//###### Registerdefinitionen: Namen, Basisadresse/Offset ######
.equ RCC,0x40023800         //Basisadresse: System-Clock
.equ AHBENR,0x1C            //Offset:

.equ GPIOA,0x40020000       //Basisadresse GPIOA
.equ MODER,0x00             //Offset: MODER "Mode Register"
.equ ODR,0x14               //Offset: ODR "Output Data Register"
 

.global _start              //für Linker wichtig: Definition, an welcher Adresse das Programm anfängt
_start: 

ldr r1, =RCC            //GPIOA,B,C aktivieren (7:...111)
ldr r0, =0x00008007     //
str r0, [r1,AHBENR]     

ldr r1, =0x40020000
ldr r0, =0xA8000400
str r0, [r1, #0x00]

main:
  bl led_on
  bl wait
  bl led_off
  bl wait
b main                      //Endlosschleife Hauptprogramm- Sprung zu main

wait:
  mov r3, #65000
  mov r4, #0
  for_0:
    add r4, r4, #1
    cmp r4, r3
    bne for_0
  bx r14

led_on:
  ldr r0, =0x20
  ldr r1, =0x40020000
  str r0, [r1, #0x14]
  bx r14

led_off:
  ldr r0, =0x00
  ldr r1, =0x40020000
  str r0, [r1, #0x14]
  bx r14`
assembly rust arm bare-metal
© www.soinside.com 2019 - 2024. All rights reserved.