STM32

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

STM32

Der STM32 ist ein Mikrocontroller mit einer 32-Bit Cortex CPU von ST ([www.st.com]http://www.st.com/mcu/inchtml-pages-stm32.html) Der STM32 gibt es von ST in unzähligen Varianten mit mehr und weniger Pheriperie eingebettet. Somit ist es ST möglich eine 32 Bit-CPU für weniger als 1 EUR an zu bieten.

  • Cortex-M3 Kern
  • Flash 16Kb ... 1MB
  • Gehäuse 36 ... 144 Pins als QFN, LQFT und BGA
  • Bis zu 72MHz
  • Bis zu 64 KB S-RAM
  • Externes Businterface
  • Spannungsbereich 2,0 ... 3,6V
  • Bis zu 112 IOs 5V tolerant
  • Interner kallibrierter RC-Oszillator mit 8MHz
  • Externer Quarz
  • RTC Zeit, Vbat, mit 32,768 KHz Quarz
  • Bis zu 11 Timer, je Timer bis zu 4 IC/OC/PWM Ausgänge. Davon 2x Motion Control Timer
  • Systic Counter
  • Bis zu 3 AD-Wandler mit 16 AD-Eingängen
  • Bis zu 2 DMA's mit jeweils bis zu 12 Kanäle
  • JTAG und SWD (Single Wire Debug) Interface
  • Bis zu 2x I²C
  • Bis zu 5 USART mit LIN, IrDA und Modem Control
  • CAN
  • USB 2.0 Full Speed
  • SDIO Interface (z.B. SD-Card Reader)
  • Ethernet
  • ... (Siehe Datenblätter)
  • STM erweitert ständig die Features...

Struktur der Dokumenatation:

Als Beispiel der Dokumentation zeige ich mal stellvertretend den STM32F103RC. Die Seite von ST: http://www.st.com/mcu/devicedocs-STM32F103RC-110.html Beinnhaltet alle nötigen Informationen/Dateien/Dokumente passend zu diesem Prozessor. In der Regel reichen 2 Dokumente aus, die den Prozessor beschreiben:

  • Datasheet "STM32F103xC/D/E"
  • Reference Manual "RM0008"

Im ersten Datasheet sind alle Pheriperiemodule beschrieben, die im ausgewählten Prozessor enthalten sind. Im zweiten ist der gesammte Prozessor im Detail beschrieben, gültig für alle STM32 Prozessoren.

Hinzu kommen Dokumente von ARM, die den Cortex-M3 Kern beschreiben. Siehe z.B. hier: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.set.cortexm/index.html Hier gibt es den Opcode wenn man ihn in Assember programmieren möchte: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0406b/index.html

Zusätzlich sollten auch die Errata Sheets beachtet werden.

FW-Lib:

ST bietet eine umfangreiche FW-LIB Bibliothek. Es ist eine einzige Bibliothek für alle STM32 Derivate. Das ist der große Vorteil von ST. Ein mal programmieren und in allen STM32 verwendbar. Alle Funktionen sind gekapselt in einfache Strukturen und Funktionsaufrufe. Somit muss man sich nicht selbst um die Pheriperieregister kümmern. Die FW-Lib kann ebenfalls von der STM32 Seite kostenlos geladen werden:

  • Firmware "STM32F10x_StdPeriph_Lib"

In dem Archiv ist die FW-LIB, zu jeder Pherieperie gibt es bis zu 12 Demos und eine Beschreibung als CHM Datei "stm32f10x_stdperiph_lib_um.chm"

Debug-Interface:

Als Debug Interface stehen zwei Varianten zur Auswahl:

  • JTAG
  • SWD (Single Wire Debug)

Für JTAG sind 6 Steuerleitungen nötig, für SWD 2 (zzgl GND/3,3V).

Der 10-Polige JTAG-Stecker:

Ich habe einen 10 Poligen Debug-Stecker entworfen, der alle Varianten sowie einen UART Anschluss enthält:

Jtag-debug-port10.png

Die Funktionen:

  • JTAG
  • SWD
  • Debug-UART-Anschluss (verbunden mit einem freien UART vom STM32) (alternativ ein MAX232 Chip dazwischen schalten)
  • Weniger Platzbedarf auf der Platine (Standard-JTAG 20 Polig)
  • Über 4-Poligen Würfel kann der UART benutzt werden (Pin 7/8/9/10)
  • Es kann ein Jumper gesteckt werden für eine Option (Pin 7/8) ohne dass es sich mit dem RS232 Chip beißt (sofern er eingebaut wurde)
  • Über einen 5-Poligen einreihigen Stecker kann SWD (SingleWireDebug) verwendet werden (Pin 1/3/5/7/9)
  • den ganzen Stecker braucht es nur, wenn man den herkömlichen JTAG nutzen möchte.
  • Kurzschlussschutz, da GND und +3V3 nicht gegenüber liegen

In all meinen Projekten verwende ich nur noch diese Anordnung, denn sie ist einfach praktisch. Alles drauf und die Pins sind perfekt angeordnet für jede Art der Anwendung.

Vorteile:

Vorteile gegenüber ARM7:

  • besserer Interrupt-Controller, deutlich schnellere Ausführungszeit bei Interrupts
  • Tumb-2 Befehlssatz wird schneller ausgeführt

Vorteile gegenüber LPC1700:

  • Flexiblere Gehäuseformen
  • Mehr Pherieperie
  • Flexiblere Varianten der Pheriperie >> bei weniger einen deutlichen Preisvorteil
  • ab 0,85 EUR (Stand 2010)

Nachteil gegenüber LPC1700:

  • nur 72 MHz Coretakt

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

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

Nachteil für Hoppy-Anwender

  • nicht direkt "Steckbrettauglich", da kein DIL Gehäuse verfügbar

Aber das ist auch der einzige Nachteil ;)

Software/Programmierung:

Als Programmieroberfläche kann eine kostenlose Struktur verwendet werden:

  • Eclipse
  • Coudesourcery Light
  • OpenOCD
  • Yagarto Tools
  • Eclipse Plugin "GDB Hardware Debugging"

Programmieradapter

  • z.B. OpenOCD ARM-USB-OCD (nicht kostenlos)

Installation für STM32

  • Eclipse "Galileo" installation:
   http://www.eclipse.org/ >> Downloads >> "Eclipse IDE for C/C++ Developers (79 MB)"
   http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/SR1/eclipse-cpp-galileo-SR1-win32.zip
   Entpacken der Datei eclipse-cpp-galileo-SR1-win32.zip nach "C:\WinARM\" (Ordner neu erstellen)
  • Yagarto Tools:
   http://www.yagarto.de/ >> "Download (for Windows)" >> "YAGARTO Tools"
   http://www.yagarto.de/download/yagarto/yagarto-tools-20091223-setup.exe
   Installieren, Auswahl Verzeichnis "C:\WinARM\yagarto-tools"
  • CodeSourcery:
   http://www.codesourcery.com/ >> Products>Sourcery G++>Editions>Lite >> Try Now
   http://www.codesourcery.com/downloads/public/public/gnu_toolchain/arm-none-eabi/arm-2009q3-68-arm-none-eabi.exe
   Installieren, Auswahl Verzeichnis "C:\WinARM\CodeSourcery"
  • OpenOCD, kompilliert von Martin-Thomas:
   http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/winarmtests/
   Die letzte Version ist "dont_download_this_OpenOCD_package_V0_3_1_mthomas.zip"
   Die aktuellste ist im Sourceforge als Quelldateien.
  • ST UM0427 (FW-Lib con st.com):
   http://www.st.com >> Auswahl CPU STM32F103xxx >> "Firmware" "STM32F10x_FW_Archive"
   http://www.st.com/mcu/devicedocs-STM32F103RC-110.html
   In dem ZIP ist ein ZIP mit der Firmware "\Archive\um0427.zip"
   Das ZIP "um0427.zip" Entpacken nach "C:\WinARM\examples\stm32_FW2.0.3\

Eclipse: Help >> Install New Software... >> http://download.eclipse.org/tools/cdt/releases/galileo

   "Eclipse C/C++ Development Tools" + "Eclipse C/C++ GDB Hardware Debugging" installieren

Demo-Projekte:

Martin Thomas hat ein umfangreiches Projekt erstellt, in der die Eclipse Einstellungen enthalten sind:

"ChaN's FAT-Module with STM32 SPI" http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html