STM32 Notizen

RAM Bootcode 0xF108F85F

Was hat es mit diesem ominösen Bootcode auf sich? Wenn man das Ganze mal disassembliert, wird die Sache klarer:
ldr.w pc,[pc, #-264]
Damit ist auch klar, dass dieser "magische" Bootcode nur für eine bestimmte MCU gilt (oder exakter: eine bei der der Resetvektor den gleichen Offset vom Ram-Boot-Vektor hat). Der hier stammt glaube ich ursprünglich von einem Besipiel für den STM32F1

Flashsize register 0x1ffff7cc

Dort steht die Grösse des FLASH in KiB, also z.B. 0x0040 bedeutet der Controller hat 64 KiB FLASH

Wert von USARTDIV für gegebene BAUD-Rate berechnen

Bei der Berechnung des korrekten Teilers muss auch der Wert des OVER8-Bits (Bit 15 von USART_CR1) beachtet werden. OVER8=0 heisst 16-faches Oversampling, die Formel ist dann BAUD = Fck / USARTDIV mit BRR == USARTDIV. Das ist am einfachsten zu berechnen. Mit OVER1=1 lautet die Formel BAUD = (2*Fck) / USARTDIV - was ebenfalls einfach zu berechnen ist. Allerdings ist hier eben nicht BRR gleich USARTDIV. Die genauen Details stehen im Reference Manual ;-) Dort findet sich auch eine Tabelle, welche Baudraten sich ohne/mit geringem Fehler einstellen lassen (so als Tipp: Es gibt wesentlich mehr als beim AVR).

Informationen zu ELF object files anzeigen

ELF header und alle ELF section headers (und deren Grösse) anzeigen:
arm-none-eabi-readelf -e example.elf arm-none-eabi-readelf -e example.o
Grössen / Adressen von text,data,bss Segmenten anzeigen. Die Option -d zeigt Dezimalwerte (nützlich für die Grösse), option -x zeigt Hexadezimalwerte (für die Adressen meist verständlicher), die Option -A zeigt alles ausführlicher an.
arm-none-eabi-size -A -d example.elf