STM32

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

STM32 ist ein Mikrocontroller-Familie von ST mit einer 32-Bit ARM Cortex-M3/M4 CPU. Diese Architektur ist speziell für den Einsatz in Microcontrollern neu entwickelt und löst damit die bisherigen ARM7-basierten Controller weitestgehend ab. Den STM32 gibt es von ST in unzähligen Varianten mit variabler Peripherie und verschiedenen Gehäusegrößen und -formen. Durch die geringe Chipfläche des Cores ist es ST möglich, eine 32 Bit-CPU für weniger als 1 € anzubieten.

Blockdiagramm STM32F103xC/D/E

STM32-Familien

Bisher gibt es drei STM32-Familien, wobei sich die Größte (STM32F) in weitere Unterfamilien (Linien) aufteilt:

  • STM32F1
    • Connectivity line
    • Performance line
    • USB Access line
    • Access Line
    • Value line
  • STM32F2
    • Wie die STM32F1 Serie, jedoch 120MHz, Camera-Interface, 32-Bit Timer, Crypto-Engine...
  • STM32L (LowPower)
    • mit LCD Treiber
  • STM32T (Touch)
  • STM32W (RF-MCU)
  • STM32F4 (CM4)
    • ARM® Cortex™-M4-based STM32 F4, 168MHz
    • DSP instructions and the floating point unit
    • LQFP64, LQFP100, LQFP144, LQFP176 and UFBGA176 packages

Hier eine Übersicht zum auswählen eines STM32Fxxx

Features

  • Cortex-M3 bzw. Cortex-M4 Kern in der STM32F4xx Serie
  • 16KB ... 1MB Flash-ROM
  • 4KB ... 192KB SRAM
  • 4KB EEPROM (STM32L)
  • 512 one-time programmable Bytes(STM32F2/4)
  • Gehäuse 36 ... 176 Pins als QFN, LQFP und BGA
  • Derzeit sind über 250 STM32 Derivate/Varianten verfügbar
  • Bis 72MHz CPU-Takt, bis 120MHz beim STM32F2xx, bis 168 MHz beim STM32F4xx, wobei eine spezielle prefetch-hardware bis 120/168 MHz eine Geschwindigkeit erzielen soll, die 0 Wait-States entspricht. Der CPU-Takt wird über einen Multiplikator aus dem internen RC-Takt oder einem externen Quarz-Takt abgeleitet.
  • Externes Businterface (nur bei Gehäusen ab 100 Pin und nur bei STM32F4, STM32F2 und STM32F1 Performance line)
  • LCD Treiber für 8x40 Punkte (nicht beim STM32F2xx)
  • Spannungsbereich 1,65 ... 3,6V, nur eine Betriebsspannung nötig
  • Temperaturbereich bis 125 °C
  • Bis zu 140 IOs, viele davon 5V-tolerant
  • Interner, kalibrierter RC-Oszillator mit 8MHz (16MHz bei STM32F2xx)
  • Externer Quarz
  • Real Time Clock mit eigenem Quarz und separater Stromversorgung
  • Bis zu 16 Timer, je Timer bis zu 4 IC/OC/PWM Ausgänge. Davon 2x Motion Control Timer (bei STM32F103xF/G)
  • Systick Counter
  • Bis zu 3 12-Bit AD-Wandler mit insgesamt 24 AD-Eingängen, integrierter Temperatursensor
  • Bis zu 2 12-Bit DA-Wandler
  • Bis zu 2 DMA Controller mit bis zu 12 Kanälen (16 beim STM32F2xx)
  • Bis zu 2x I²C
  • Bis zu 5x USART mit LIN, IrDA und Modem Control (6 beim STM32F2xx)
  • Bis zu 3x SPI
  • Bis zu 2x I²S
  • Bis zu 2x CAN
  • RNG - Random Number Genrator (STM32F2xx)
  • Cryptographic Processor (CRYP) (STM32F2xx)
  • Hash Processor (HASH) (STM32F2xx)
  • Kamera-Interface (DCMI) (STM32F2xx)
  • USB 2.0 Full Speed / OTG
  • USB 2.0 Hi Speed OTG mit extra PHY-Chip (STM32F2xx)
  • SDIO Interface (z.B. SD-Card Reader)
  • Ethernet
  • Watchdog mit Window-Mode
  • Jedes Peripheriemodul ist separat einschaltbar, wodurch sich erheblich Strom sparen lässt
  • JTAG und SWD (Serial Wire Debug) Interface
  • Bis zu 6 Hardware-Breakpoints für Debuggen
  • und vieles mehr . . .

Struktur der Dokumentation:

Als Beispiel der Dokumentation soll stellvertretend der STM32F103RC genannt werden. Die Seite von ST beinhaltet alle nötigen Informationen passend zu diesem Prozessor.

Diese Dokumente von ST beschreiben den Controller:

Im Datasheet sind die speziellen Eigenschaften einer bestimmten Modellreihe beschrieben und die exakten Daten und Pinouts aufgeführt. Die Peripheriemodule werden nur aufgeführt, nicht detailliert beschrieben. In der Referenz ist der gesamte Controller mit Peripheriemodulen im Detail beschrieben, gültig für alle STM32 Controller. Details zum Prozessorkern selbst und den nicht STM32-spezifischen mit dem Cortex-M3 Core assoziierten Modulen wie dem Interrupt-Controller und dem Systick-Timer findet man jedoch nicht dort, sondern im Cortex-M3 Manual. Wer nicht die ST Firmware-Library verwendet, der benötigt zusätzlich die Flash Programming Reference für die Betriebsart des Flash-ROMs, d.h. die frequenzabhängige Konfiguration der Waitstates. Hinzu kommen optionale Dokumente von ARM, die den Cortex-M3 Kern beschreiben. Hier gibt es den Opcode wenn man ihn in Assembler programmieren möchte. Zusätzlich sollten auch die Errata Sheets beachtet werden. Empfohlen sei auch die Appnote "STM32F10xxx hardware development: getting started".

‎STM32F10x Standard Peripherals Library

ST bietet eine umfangreiche Firmwarebibliothek, eine einzige Bibliothek für alle STM32 Derivate. Das ist der große Vorteil von ST (gibt es beispielsweise auf den Cortex-M3 Controllern von TI auch, ist teilweise in einem separaten ROM untergebracht). Einmal programmieren und in allen STM32 verwendbar. Alle Funktionen sind gekapselt in einfache Strukturen und Funktionsaufrufe. Somit muss man sich nicht selbst um die Peripherieregister kümmern. Diese Library und ihre Dokumentation setzen das grundlegende Verständnis der Funktion des jeweiligen Peripheriemoduls voraus, wie es die o.A. Referenz und diverse Appnotes vermitteln. Diese FW-Lib (Download von ST) ist ein MUSS für jeden, denn darin sind auch jede Menge Beispiele für alle Peripheriemodule.

Details siehe: ‎STM32F10x Standard Peripherals Library.

Mit libopencm3 ist derzeit auch eine Open-Source Alternative (GPL, Version 3 oder höher) zur ST Library in Entwicklung, die zukünftig auch Cortex-M3 Controller von anderen Herstellern unterstützen soll.

CMSIS

Parallel zur Firmware-Library (FW-Lib) gibt es für die "Selbermacher" die CMSIS (ARM® Cortex™ Microcontroller Software Interface Standard), die grundsätzlich nur den herstellerübergreifenden ARM-Core abdeckt. Hierzu gehört bei den Cortex-M4-Cores auch die DSP und Floating-Point Funktionalität. Weiterhin existieren eine Zahl von Helferfunktionen für den NVIC, den Sys-Tick-Counter, sowie eine SystemInit-Funktion, welche sich um die PLL kümmert.

Im Rahmen des CMSIS-Standards (www.onARM.com) wurden die Headerdateien standardisiert, der Zugriff auf die Register erfolgt per Peripheral->Register. Die CMSIS C-Dateien bzw. Header enthalten auch Anpassungen für die verschiedenen Compiler. Die Portierung eines Real-Time-Betriebsystems sollte unter Verwendung der CMSIS, für Chips der verschiedenen Hersteller, stark vereinfacht möglich sein (z.B. einheitliche Adressen für Core-Hardware/Sys-Tick-Counter).

Die CMSIS ist im Download der FW-Lib enthalten. Die Compiler-Hersteller liefern eine jeweils zur ihrer Tool-Version passende bzw. geprüfte FW-Lib (incl. CMSIS) aus. Diese Libs können, gegenüber den Downloads beim Chip-Hersteller, auch ältere Version beinhalten.

Debug- und Trace-Interface (CoreSight™ Debug and Trace Technologie)

Übersicht über beide Funktionalitäten und den Schnittstellen: http://www.keil.com/support/man/docs/ulink2/ulink2_cs_core_sight.htm

Die Coresight-Debug-Architektur ermöglicht ein nicht-invasives Debugging, d.h. es können während des Betriebes (meistens) ohne Beeinflussung des Prozessors Daten vom Speicher gelesen und in selbigen geschrieben werden.

Debugger Funktionen

Der Debugger-Teil besitzt drei Funktionen:

  • Run Control: z.B. Programm-Start, Stopp und Einzel-Schritte.
  • (Program) Break Points: Ein Programm hält an, wenn der Programm Counter eine bestimmte Programm-Adresse erreicht.
    • Beinhaltet keine Data Watch Funktionalität, welche im Trace-Teil (DWT) realisiert wird.
  • Memory Access: Lesen und Schreiben von Speicheradressen.
    • Diese Funktionalität beinhaltet keine direkte Flash-Programmierung. Der Programmiervorgang für einen Flash ist herstellerspezifisch und muss von dem verwendeten Debugger unterstützt werden.

Trace Funktionen

Die Trace-Funktionalität wird in drei Funktionen aufgeteilt:

  • ETM (Embedded Trace Macrocell): Optional, nicht jede CPU besitzt diese Hardware (Kostenfaktor, Austattung).
  • ITM (Instrumentation Trace Macrocell): Über diesen Kanal kann ein vereinfachtes Trace des Core ermöglicht werden, sowie "printf-ähnlich" Daten über den ITM Channel 0 geschickt und im Debugger ausgegeben werden.
  • DWT (Data Watchpoint & Trace Unit):
    • Data Watch: 4 Access-Break-Points ( z.B. der Debugger bleibt stehen, wenn das Programm auf einen Speicher zugreift oder der Wert einer Variablen einen bestimmten Wert annimmt).
    • Trace Unit: Programmverlauf (durch Lesen des Program Counters) und Interrupt Aufrufe verfolgen, sowie Zeitmessungen.

Einige der Trace-Funktionalitäten können über die JTAG-Schnittstelle angesprochen werden. Die schnelle Trace-Funktionalität (mit 4 bit Parallel-Port) steht nur mit der erweiterten DEBUG + ETM Schnittstelle zur Verfügung. Im Gegensatz zum Debugger-Teil (Run Control, Break Points und Memory Access) werden Trace-Funktionen nicht von allen Debuggern unterstützt. Debugger mit der vollen Trace-Funktionalität kosten deutlich mehr.

Die Aktivierung des parallelen Trace-Ports erfordert, je nach CPU Hersteller, zusätzliche Debugger-Makros für die Aktivierung und Port-Freischaltung. Zusätzlich sind die Schnittstellenauswahl und Einstellung (Frequenzen) im Entwicklungs-Tool (IDE) wichtig, um erfolgreich den Programm-Verlauf "tracen" zu können.

Debug und Trace-Schnittstellen

Als Debug Interface stehen zwei Varianten zur Auswahl:

  • JTAG: Dafür sind mindestens 6 Steuerleitungen nötig.
  • SWD (Serial Wire Debug): Hier mindestens 2 Steuerleitungen (3 mit SWO, zzgl GND und 3,3V). Die SWD Schnittstelle ist in der Regel schneller und kann auch Funktionen aus dem Trace-Teil beinhalten (z.B. ITM, dafür wird der SWO-Pin benötigt).

Standard-JTAG Steckerbelegungen: http://www.keil.com/support/man/docs/ulink2/ulink2_hw_connectors.htm

Der 10polige JTAG-Stecker von mmvisual

mmvisual hat mit dieser Steckerbelegung die Standard JTAG Schnittstelle erweitert:

Ich habe diesen Part in den Artikel JTAG verschoben. Hinzu gekommen ist die Adapterplatine 10-Polig auf Standard JTAG 20 Polig mit TTL/V24 Wandler. Siehe hier.

STM32 RS232 (CAN und USB) Programmiertool

Auch ohne JTAG lässt sich ein STM32 programmieren (Bootloader-Aktivierung). Dabei stehen, je nach CPU-Typ, verschiedene Möglichkeiten zur Verfügung:

  • RS-232 (bisher alle STMs)
  • USB (nur in bestimmten MCUs mit entsprechender Bootloader-Version und PIN-Anzahl, z.B. STM32F105/107)
  • CAN (wie USB nur in bestimmten MCUs)

3 zusätzliche Verbindungen müssen auf dem Board gepatcht werden. Für einen Test geht es auch mit Tastern für RESET und BOOT0.
RESET=RTS (L-aktiv)
BOOT0=DTR (H-aktiv)
BOOT1=LOW

Details sind hier im Forum: STM32 Programmiertool

Vorteile

Vorteile gegenüber ARM7:

  • Interrupt-Controller jetzt Teil des Prozessors (als Core Peripheral), die Vector Table ist jetzt eine echte Vektortabelle, keine Sprungliste wie bei ARM7. Durch Automatismen zwischen Core und NVIC (auto register save r0..r3, lr, sp, pc) bei Interrupt Entry wird eine deutlich schnellere Ausführungszeit bei Interrupts erreicht. Der Interrupt Code muss sich nicht mehr selbst um die Sicherung der o.g. Register kümmern und eine besondere Konfiguration der Handler im Compiler entfällt. Sind vor Beendigung einer ISR (d.h. Rücksprung zum User Code) weitere Interrupts pending, so werden diese ausgeführt, ohne dass eine komplette pop-push-sequenz der Register notwendig ist. Schön beschrieben ist es hier im Insider's Guide unter 2.4.5 / Seite 20.
  • Thumb-2 Befehlssatz, deutlich schneller als Thumb-1 und ebenso kompakt
  • Weniger Pins für Debugging benötigt durch SWD
  • Mehr Hardware Breakpoints machen debuggen einfacher
  • Software ist einfacher weil die Umschaltung zwischen ARM Mode und Thumb Mode wegfällt

Vorteile gegenüber LPC1700 und LPC1300:

  • Flexiblere Gehäuseformen mit mehr Peripherie bei kleinen Gehäusen
  • FW-Lib für alle STM32 gleich, alle AppNotes/Demos beziehen sich auf diese eine FW-Lib was die Entwicklung der eigenen Applikation sehr beschleunigt.
  • Genauerer und flexiblerer ADC, insbesondere gegenüber LPC1300
  • Flexiblere Varianten der Peripherie >> bei weniger einen deutlichen Preisvorteil
  • ab 0,85 EUR (Stand 2010) Allerdings gibts den LPC1100 mit Cortex-M0 schon ab 0,65 $!

Nachteil gegenüber LPC1700:

  • STM32F1xx: nur 72 MHz statt 100 MHz (LPC1759: 120 MHz) Taktfrequenz; STM32F2xx hat diesen Nachteil nicht (ebenfalls 120MHz, STM32F4xx mit 168MHz) (Aber NXP hat schon 150MHz angekündigt)
  • Der LPC1700 besitzt deutlich mehr Mechanismen, um die Auswirkung der Waitstates des Flash-ROMs auf Code- und Datenzugriffe zu reduzieren und das bedeutet mehr Performance bei gleicher Taktfrequenz. Beim STM32F2 entfällt dieser Nachteil wohl aufgrund des ART accelerators.
  • Alle LPC1xxx haben 32 Bit Timer. Bei den STM32 haben das nur die STM32F2xx (2 Stück)
  • I2S Einheit von ST hat keinen FIFO und im 24/32Bit Modus müssen 2x16Bit Halbwörter übertragen werden.

Vorteile gegenüber anderen "Kleinen" wie z.B. PIC, Atmel usw.

  • nahezu gleicher Preis bei Hobby Anwendungen
  • 32 Bit ohne Umwege in Assembler rechenbar
  • bessere Peripherie
  • ... und weitere 1000 Punkte ...

Nachteil für Hobby-Anwender

  • Nicht direkt "Steckbrettauglich", da kein DIL Gehäuse verfügbar. Der ebay-Shop dipmicro führt jedoch sehr günstige Lötadapter für Umsetzung von LQFP48 auf DIP48. QFP64 in 0.5mm Pinabstabd und nicht 0.8mm wie AVR

HW-Beschaltung

Der STM32 benötigt für den Betrieb nur (Minimalbeschaltung):

  • VCC 2..3,3V (je nach Typ)
  • AVCC 2..3,3V (sehr wichtig, der STM32 lässt sich ohne diese Spannung nicht programmieren)
  • GND
  • Reset Pin 100nF nach GND (ein Pull-Up Widerstand von ca. 40k ist intern vorhanden)
  • Boot-Pin(s)

ansonsten nur ein paar einzelne C's 100nF an VCC/GND.

Um Programmieren zu können werden noch die serielle Schnittstelle oder JTAG oder die SWD Pins benötigt.

Programmierung

Als Programmieroberfläche kann eine kostenlose Struktur verwendet werden. Es ist für den Einsteiger schwierig herauszufinden welche Open-Source Programme man braucht damit es funktioniert, daher hier eine Zusammenstellung:

Sehr nützlich für Linux-Anwender auch diese Seite: STM32/ARM Cortex-M3 HOWTO: Development under Ubuntu.

Folgende kommerzielle Umgebungen sind verfügbar:

  • Keil µVision (Demo max. 32KB Code): Die sehr komfortable µVison IDE ist neben dem ARM Compiler per Menue auch für einen beliebigen GNU-Compiler konfigurierbar. Damit besteht das 32k-Limit nur noch für den integrierten Debugger / Simulator. µVison selbst kann kostenlos mit dem MDK-Evaluationkit heruntergeladen werden.
  • IAR (Demo max. 32KB Code)
  • Raisonance Ride7 (GCC Compiler, kostenlose Version auf Debugging von max. 32KB Code limitiert, keine Limitierung beim Complilieren)
  • Atollic (Lite Version ohne Code-Limit, auf GCC basierend)
  • CoIDE (Kostenlose GCC, Eclipse basierende IDE mit einem Code-Generator Tool)
  • Rowley Crossworks (Demo 30 Tage unbeschränkt, 150$ für nichtkommerzielle Nutzung, auf GCC basierend)
  • Code Red (GCC basierend)

Programmieradapter

Programmieradapter Open-Source

Der Controller hat auch einen fest eingebauten Boot-Lader. Damit läßt er sich auch über eine gewöhnliche serielle Schnittstelle programmieren, ohne daß man einen JTAG-Adapter benötigt.

Tipps für Installation mit Eclipse können in diesem Thread gelesen werden.

Installation für STM32 (Linux)

Variante A

  • Benötigte Hardware
    • Ein Desktop PC oder Laptop mit Linux OS (openSuSE, Ubuntu, ...) alternativ: Ein Windows System mit Linux in einer virtuellen Maschine
    • root Zugang zum Linux OS (superuser Passwort)
    • GNU C Compiler
    • Programmer ARM-USB-TINY-H (optimal) alternativ: OpenOCD kompatiblen Programmer
    • Prototypboard Olimex STM32-P107 (optimal) alternativ: irgendein board mit STM32 uC und JTAG Port


  • Download + Installation (in einem Terminal)
 wget http://hlb-labor.de/cortexm3/install_ToolChain_STM32.sh
 chmod +x install_ToolChain_STM32.sh
 ./install_ToolChain_STM32.sh

Die Installation sollte im Idealfall voll automatisch durchlaufen. Anschliessend wird ein Beispielprojekt mit Multitasking OS und LED-Heartbeat kompiliert und auf den uC programmiert. Für andere Protoboards/ Programmer muss die ToolChain entsprechend der readme Anleitung umkonfiguriert werden.

Das Projekt kann im QtCreator (http://qt.nokia.com/) geöffnet und bearbeitet werden.

Variante B

Die Installation einer Toolchain (Make, Flash, Debug via JTAG, IDE) ist in folgendem Manual beschrieben:

"How-to manual - Installing a toolchain for Cortex-M3/STM32 on Ubuntu 10.04"

Die Beschreibung im OpenOffice Format erlaubt die Weiterbearbeitung des Textes und das Entnehmen von Quelltexten ohne den Verlust von Formatierungen.

Verwendete Hardware:

  • JTAG device
    • Olimex “ARM-USB-OCD-H”, basierend auf FTDI “FT2232H”
  • Microcontroller
    • Olimex “STM32-H103” basierend auf STM32F103RBT6 mit 128KB Flash, 20KB RAM, 3xUART, ...

Die Toolchain sollte sich leicht an andere "FT2232" basierte JTAG Probes und "Cortex-M3" Derivate anpassen lassen.

Das Manual umfasst die Installation und Inbetriebnahme sowie Hinweise und Bug-fixes zu folgenden Komponenten:

  • OpenOCD
  • stm32flash
  • Sourcery CodeBench Lite for ARM EABI
  • STM32F10x standard peripheral library
  • Project templates
  • Makefiles
  • Linker Sript
  • Startup Code
  • Doxygen
  • Git
  • Terminal emulation
  • Eclipse IDE
  • Links zu Datenblättern, Manuals und Toools

Installation für STM32 (Windows)

Hier ist der Anfang des Artikels STM32 Eclipse Installation, hier ist neueres beschrieben als hier aufgeführt. Wenn der Artikel fertig ist, dann wird dieser Teil gelöscht.

  • Eclipse "Helios" installieren mit GNU ARM Eclipse Plug-in

Eclipse IDE for C/C++ Developers[1] downloaden und installieren

Wird CodeSourcery G++ Lite verwendet, so muss die PATH Variable angepasst werden, damit das Plugin die CodeSourcery exe-Files findet[3]. Alternativ das eclipse von einem script aus starten und zuerst den PATH erweitern.

Soll das ST-LINK verwendet werden, so kann der Atollic ST-LINK GDBSERVER aus der Atollic free version genutzt werden. Mit dem gdbserver im eclipse kann damit problemlos geflasht und gedebuggt werden (JTAG und SWD). Die Startup- und Linkerscripts der Atollic free version können für ein Projekt in dieser Konstallation genutzt werden.

  • Eclipse "Galileo" installation[4]. Und das Servicepack 1[5]

Entpacken der Datei eclipse-cpp-galileo-SR1-win32.zip nach "C:\WinARM\" (Ordner neu erstellen)

  • Eclipse PlugIn[6] hinzufügen: Help → Install New Software... → "Eclipse C/C++ Development Tools" + "Eclipse C/C++ GDB Hardware Debugging" installieren
  • Yagarto Tools[7]
  • CodeSourcery: Achtung! Die Menustruktur ändert sich durchaus mal, dann suchen gehen. http://www.codesourcery.com/ → Products → Sourcery G++ → Editions>Lite Edition → ARM → Downloads. Direkter Download[8]. Installieren, Auswahl Verzeichnis "C:\WinARM\CodeSourcery"
  • OpenOCD: Kompilierte Version für Windows[9] installieren nach "C:\WinARM\OpenOCD_0_4_0" ist auch auf der Seite[10] beschrieben. PS: Sollte der Olimex ARM-USB-OCD verwendet werden, dann darf nicht der Treiber von Olimex verwendet werden, sondern der vom OpenOCD Download[11].
  • ST Firmware: http://www.st.com → Auswahl CPU STM32F103xxx → "Firmware" "STM32F10x_StdPeriph_Lib"[12]. Das ZIP "stm32f10x_stdperiph_lib.zip" Entpacken nach "C:\WinARM\examples\stm32_FW3.4.0\

Installation für STM32 auf einem zweiten Rechner

  • Kopieren des Verzeichnisses C:\WinARM\ (Zuvor wurden aus diesem Grund alle Setup-Pakete nach C:\WinARM\... installiert)
  • Die PATH-Variable in der Systemsteuerung mit den C:\WinARM\.... Verzeichnissen nachführen
  • Fertig.

Installation für STM32 mit AtollicTrueStudio (+Demo)

Demo-Projekte

Errata, Tipps und Tricks

  • AD-Wandler PA0: Im Errata steht, dass hier Fehler in der Wandlung entstehen könnten, also einen anderen Pin verwenden.
  • CAN-Bus PD0/PD1: Remap geht erst ab der 100-Pin-Version. Steht im RM0008 unter 9.3.3.: "CAN1 alternate function remapping". Alle Infos von RM0008 9.3.x sind interessant
  • CAN und USB sind nur bei der "◦Connectivity-Line" gleichzeitig nutzbar. Siehe Datenblätter.
  • Mit internem RC-Oszillator kann die CPU mit maximal 64MHz betrieben werden. Mit einem externen Quarz sind dann 72MHz möglich.
  • Für USB Betrieb muss die CPU mit 48MHz oder 72MHz betrieben werden (bei STM32F1xx).
  • Der Idle Interrupt vom Usart wird zwar ausgelöst, aber nicht vom entsprechenden Statusflag angezeigt
  • Der DMA fängt beim aktivieren immer von vorn an zu zählen, auch wenn er nur kurz angehalten wurde
  • STM32F2xx hat kein Flash Size Register, bei STM32F4xx ist zwar ein flash Size Register beschrieben, kollidiert aber in der Adresse mit einem anderen Register

Tipps für Umsteiger von Atmel/PIC/8051

  • Prozessortakt hat unterschiedliche Taktquellen und eine PLL.
  • Alle Peripheriemodule haben einen extra Clock, den man aktivieren muss.
  • Wenn man z.B. einen UART benutzen möchte, so muss man den Clock vom UART, Alternate Function IO (AFIO) und dem GPIO-Port aktivieren.
  • Ansonsten hat man nahezu doppelt so viele Möglichkeiten in den Peripheriemodulen.
  • Forum zu Interrupts vs. Events

Bezugsquellen

Controller

Versandhäuser für Privatpersonen

Gewerblich liefern natürlich viele wie Mouser, Farnell, Digikey usw...

Evaluation Boards

Weblinks, Foren, Communities

  1. http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/heliosr
  2. http://sourceforge.net/projects/gnuarmeclipse/
  3. für Discovery notwendig
  4. [1] → Downloads → "Eclipse IDE for C/C++ Developers (79 MB)
  5. Eclipse SR1
  6. http://download.eclipse.org/tools/cdt/releases/galileo
  7. [2] "Download (for Windows)" → "YAGARTO Tools" http://www.yagarto.de/download/yagarto/yagarto-tools-20091223-setup.exe Installieren, Auswahl Verzeichnis "C:\WinARM\yagarto-tools"
  8. [3]
  9. [4] → Download → Software → OpenOCD
  10. Yagarto.de
  11. [5]
  12. http://www.st.com/mcu/devicedocs-STM32F103RC-110.html