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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren