Forum: Mikrocontroller und Digitale Elektronik Suche Beispiel Blink-LED fuer STM32f407VG Discovery in Assembler


von Daniel F. (franken_3)


Lesenswert?

Hallo,

ich habe bereits im Internt gesucht und auch hier im Forum, konnte 
bisher aber leider nichts genaues finden.

Ich versuche mich aktuell an Assembler-Programmierung für das 
Discovery-Board. Ich wuerde gerne mal eine LED anschalten. Hab schon 
versucht ein Programm zu machen, aber es passiert leider nichts.

Für ein Beispiel wäre ich sehr Dankbar.


Falls es jemand interessiert, hier mal mein Versuch:
1
    .section .vectortable,"a"   // vector table at begin of ROM
2
3
    .align  2
4
    .word   0x20004000      // initial Stack Pointer
5
    .word   0x00002001      // initial Program Counter
6
7
8
9
    .text                   // section .text
10
11
    .align  1
12
    .syntax unified
13
    .thumb
14
    .thumb_func
15
    .global init
16
    .type   init, %function
17
#----------------------------------------------------------------------------------------#
18
init:
19
    CPSID   i               // disable all interrupts
20
21
    MOVS    r0, #0          
22
    MOVS    r1, #0
23
    MOVS    r2, #0
24
    MOVS    r3, #0
25
    MOVS    r4, #0
26
    MOVS    r5, #0
27
    MOVS    r6, #0
28
    MOVS    r7, #0
29
    MOV     r8, r0
30
    MOV     r9, r0
31
    MOV     r10, r0
32
    MOV     r11, r0
33
    MOV     r12, r0
34
35
  CPSID   i                 // disable all interrupts
36
37
    .align  1
38
    .syntax unified
39
    .thumb
40
    .thumb_func
41
    .global main
42
    .type   main, %function
43
44
main:
45
   
46
47
    LDR r1, = 0x40023800            //RCC-BASE
48
    LDR r2, = 0x8                   //RCC_PortD
49
    LDR r0, [r1, 0x0]
50
    ORRS r0, r0 , r2
51
    STR r0, [r1, 0x0]               //enable clock
52
53
54
    LDR r1, = 0x40020C00            //load PERIPH BASE PORTD
55
    //ADDS    r1, r1, 0x00020000      // load AHPB1 Base
56
    //ADDS    r1, r1, 0x0C00          //Load PortD PeriphBase
57
    LDR r2, = 0x01000000            //LOAD MASK 0000:0001:24x0
58
    LDR r0, [r1, 0x00]              //load CRL value
59
    ORRS r0, r0, r2                 //enable GPIO Pin 12
60
    STR r0, [r1, 0x00]              //Ruckspeichern
61
62
    LDR r0, [r1, 0x04]              //load CRH value
63
    LDR r3, = 0x1000
64
    ORRS r0, r0, r3                 //enable Pin 12 PushPull Outpu
65
    STR r0, [r1, 0x04]              //Ruckspeichern
66
67
    LDR r0, [r1, 0x08]              //load Speed   RCC_AHB1Periph_GPIOD
68
    ORRS r0, r0, r2                 //enable Speed Medium
69
    STR r0, [r1, 0x08]              //Ruckspeichern
70
71
    LDR r0, [r1, 0x0C]              //load Pull Up Down
72
    ORRS r0, r0, r4                 //enable noPuPd
73
    STR r0, [r1, 0x0C]              //Ruckspeichern
74
75
    LDR r0, [r1, 0x18]              //load Pull Up Down
76
    ORRS r0, r0, r3                 //SET Output
77
    STR r0, [r1, 0x18]              //Ruckspeichern
78
79
#--- main loop
80
.L1:
81
   
82
83
    B       .L1                 // springe unbedingt nach .L1
84
85
86
    .align  1
87
    .syntax unified
88
    .thumb
89
    .thumb_func
90
    .global delay
91
    .type   delay, %function
92
93
94
    .align 1
95
    .global stop
96
stop:
97
    B       stop
98
99
100
101
.lp1:      
102
    .ltorg
103
104
105
    .end

von Blink-LED (Gast)


Lesenswert?

>Beispiel Blink-LED fuer STM32f407VG Discovery in Assembler

das erzeugt Dir mit Vergnuegen der Compiler aus einem der reichlich
vorhandenen C-Beispiele.

von Daniel F. (franken_3)


Lesenswert?

Hallo,

habe ich nun mal probiert. Das Problem ist, das ich dabei wenn ich die 
ST-Libarys verwende einen riesigen unübersichtlichen Code bekomme.
Ich bin ja gerade erst dabei in die Cortex Assembler Programmierung 
einzusteigen und bräuchte da mal was einfaches zum Verständnis der 
Arbeitsweise.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Daniel Frank schrieb:
> Das Problem ist, das ich dabei wenn ich die ST-Libarys verwende einen
> riesigen unübersichtlichen Code bekomme.
Dann lass sie weg...

Aber um Ernst: Du wirst dir ganz einfach mal ganz genau anschauen 
müssen, wie der Controller startet. Und dann überlegen, wo du mit deinen 
paar Assemblerbefehlen aufsetzen kannst.

> hier mal mein Versuch:
Worauf basiert der? Warum siehst du dir nicht einfach einen 
funktionierenden Startupcode an? Und machst dann ein wenig Reverse 
Engineering?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.