STM32: USART data register immer auf 00?

Gast #3421616
Lesenswert?
• ▲
▼
Hallo,

ich möchte mit dem unten gezeigten code einen Teil des SRAMs meines 
STM32F100RB über USART1 ausgeben. Allerdings kommen auf dem terminal nur 
Null-Bytes an.

Ich habe die Routine mal debugged und es funktioniert auch (fast) alles, 
bis zu dem Punkt, an dem der aktuelle Speicherwert in das Data Register 
von USART1 geschrieben werden soll (USART1->DR liegt bei 0x40013804).

Ich hatte anfangs versucht, den Speicher an dieser Adresse zu 
überwachen, um zu sehen, ob mein Wert tatsächlich dahingeschrieben wird. 
Allerdings habe ich gelesen, dass dies für den Debugger gar nicht 
sichtbar ist. Ich arbeite mit Keil und habe versucht die Register für 
USART1 mittels View > System Viewer > USART1 einzusehen. Aber auch hier 
bleibt DR immer auf 0x0000.

Was mache ich falsch? Im Code erkenne ich keine Fehler. Vllt. liegt es 
and er Verkabelung? Ich habe mein FOCA break-out board an PA9 / PA10, 
sowie GRND und 3.3V auf dem STM32 angeschlossen. FOCA und STM32 sind 
jeweils per USB am PC angeschlossen.

Dank und Gruß

1
iu2             ldr     r0, =0x40021000
2

3
                ldr     r1, =0x00004004
4
                str     r1, [r0, #0x18]
5

6
                ldr     r0, =0x40010800
7

8
                ldr     r1, =0x444444B4
9
                str     r1, [r0, #4]
10

11
                ldr     r0, =0x40013800 ; UART1
12

13
                movs    r1, #0
14
                strh    r1, [r0, #4]    ;  +4 USART_DR
15

16
                movs    r1, #69         ; 8MHz / 69 == 115200
17
                strh    r1, [r0, #8]    ;  +8 USART_BR
18

19
                movs    r1, #0x0600
20
                strh    r1, [r0, #16]   ; +16 USART_CR2 = 0x600
21

22
                movs    r1, #0
23
                strh    r1, [r0, #16]   ; +16 USART_CR2 = 0
24

25
                movs    r1, #0
26
                strh    r1, [r0, #24]   ; +24 USART_GTPR = 0 - Prescaler
27

28
                movw    r1, #0x200C     ; 8-bit, no parity, enable TX,TX
29
                strh    r1, [r0, #12]   ; +12 USART_CR1
30

31
                ldr     r2, =0x2000     ; Size = Length (8K)
32
                ldr     r3, =0x20000000 ; Mem = RAM Address
33
iu1             ldrh    r1, [r0, #0]    ; USART->SR
34
                ands    r1, #0x80       ; TXE
35
                beq     iu1
36
                ldrb    r1, [r3], #1    ; [Mem++]
37
                strh    r1, [r0, #4]    ; USART->DR
38
                subs    r2, r2, #1      ; Size--
39
                bne     iu1

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.