Hallo zusammen,
ich habe ein STM32VL-Discovery Board und habe die Startup-Routine
(startup_stm32f10x_md_vl.s()) insofern modiziert, dass zusätzlicher ASM
Code am Anfang von Reset_Handler: eingefügt wurde. Dieser gibt einige
Bytes auf USART1 aus.
Das ganze funktioniert nun prima, wenn ich im Debug-Modus bin. Sprich,
im Debug-Modus werden die Bytes über USART gesendet und kann sie in
RealTerm empfangen.
Wenn ich das Board allerdings "normal" laufen lasse, erhalte ich
lediglich ein paar Null-Bytes und mehr nicht.
Woran kann dies liegen? Die Start-Up-Routine wird doch auch im
"normalen" Modus durchlaufen, oder übersehe ich da etwas?
Hier der modifizierte Abschnitt der startup_stm32f10x_md_vl.s:
1 | Reset_Handler PROC
| 2 | EXPORT Reset_Handler [WEAK]
| 3 | IMPORT __main
| 4 | IMPORT SystemInit
| 5 |
| 6 | ;------- Hier beginnt der von mir eingefügte Code
| 7 |
| 8 | iu2 ldr r0, =0x40021000
| 9 |
| 10 | ldr r1, =0x00004004
| 11 | str r1, [r0, #0x18]
| 12 |
| 13 | ldr r0, =0x40010800
| 14 |
| 15 | ldr r1, =0x444444B4
| 16 | str r1, [r0, #4]
| 17 |
| 18 | ldr r0, =0x40013800 ; UART1
| 19 |
| 20 | movs r1, #0
| 21 | strh r1, [r0, #4] ; +4 USART_DR
| 22 |
| 23 | movs r1, #69 ; 8MHz / 69 == 115200
| 24 | strh r1, [r0, #8] ; +8 USART_BR
| 25 |
| 26 | movs r1, #0x0600
| 27 | strh r1, [r0, #16] ; +16 USART_CR2 = 0x600
| 28 |
| 29 | movs r1, #0
| 30 | strh r1, [r0, #16] ; +16 USART_CR2 = 0
| 31 |
| 32 | movs r1, #0
| 33 | strh r1, [r0, #24] ; +24 USART_GTPR = 0 - Prescaler
| 34 |
| 35 | movw r1, #0x200C ; 8-bit, no parity, enable TX,TX
| 36 | strh r1, [r0, #12] ; +12 USART_CR1
| 37 |
| 38 | ldr r2, =0x2000 ; Size = Length (8K)
| 39 | ldr r3, =0x20000000 ; Mem = RAM Address
| 40 | iu1 ldrh r1, [r0, #0] ; USART->SR
| 41 | ands r1, #0x80 ; TXE
| 42 | beq iu1
| 43 | ldrb r1, [r3], #1 ; [Mem++]
| 44 | strh r1, [r0, #4] ; USART->DR
| 45 | subs r2, r2, #1 ; Size--
| 46 | bne iu1
| 47 |
| 48 |
| 49 | ;------- Hier endet der von mir eingefügte Code
| 50 |
| 51 | LDR R0, =SystemInit
| 52 | BLX R0
| 53 | LDR R0, =__main
| 54 | BX R0
| 55 | ENDP
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
|