STM32: Unterschied zwischen den Versionen

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
Zeile 126: Zeile 126:
* ... und weitere 1000 Punkte ...
* ... und weitere 1000 Punkte ...


'''Nachteil für Hoppy-Anwender'''
'''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.
* 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.

Version vom 8. April 2010, 08:27 Uhr

STM32

Der STM32 ist ein Mikrocontroller von ST ([www.st.com]http://www.st.com/mcu/inchtml-pages-stm32.html) mit einer 32-Bit ARM Cortex-M3 CPU. (http://www.arm.com/products/processors/cortex-m/index.php). 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össen und -formen. Durch u.a. die geringe benötigte Chipfläche des Core ist es ST möglich, eine 32 Bit-CPU für weniger als 1 EUR an zu bieten.

  • Cortex-M3 Kern
  • 16KB ... 1MB Flash-ROM und bis zu 64KB SRAM
  • Gehäuse 36 ... 144 Pins als QFN, LQFP und BGA
  • Derzeit bis 72MHz, Modelle bis 120MHz sind angekündigt
  • Externes Businterface
  • Spannungsbereich 2,0 ... 3,6V
  • Bis zu 112 IOs, viele davon 5V-tolerant
  • Interner kalibrierter RC-Oszillator mit 8MHz
  • Externer Quarz
  • Real-Time-Clock mit eigenem Quarz und separater Stromversorgung
  • Bis zu 11 Timer, je Timer bis zu 4 IC/OC/PWM Ausgänge. Davon 2x Motion Control Timer
  • Systick Counter
  • Bis zu 3 12-Bit AD-Wandler mit insgesamt 16 AD-Eingängen
  • Bis zu 2 DMA Controller mit jeweils bis zu 12 Kanälen
  • JTAG und SWD (Single Wire Debug) Interface
  • Bis zu 2x I²C
  • Bis zu 5x USART mit LIN, IrDA und Modem Control
  • Bis zu 2x CAN
  • USB 2.0 Full Speed
  • SDIO Interface (z.B. SD-Card Reader)
  • Ethernet
  • ... (Siehe Datenblätter)

Struktur der Dokumentation:

Als Beispiel der Dokumentation zeige ich mal stellvertretend den STM32F103RC. Die Seite von ST: http://www.st.com/mcu/devicedocs-STM32F103RC-110.html Beinhaltet alle nötigen Informationen/Dateien/Dokumente passend zu diesem Prozessor.

Diese Dokumente von ST beschreiben den Controller:

  • Datasheet "STM32F103xC/D/E" oder einer anderen Modellreihe
  • Reference Manual "RM0008"
  • Cortex-M3 Programming Manual "PM0056"
  • Flash Programming Reference "PM0042"

Im Datasheet sind die speziellen Eigenschaften eines bestimmten Modells bzw. einer 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 Prozessoren. Details zum Prozessor 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 das Flash Programming Manual 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. Siehe z.B. hier: http://infocenter.arm.com/help/topic/com.arm.doc.ddi0337-/ . Hier gibt es den Opcode wenn man ihn in Assembler programmieren möchte: http://infocenter.arm.com/help/topic/com.arm.doc.ddi0403-/

Zusätzlich sollten auch die Errata Sheets beachtet werden.

Empfohlen sei auch die Appnote: "STM32F10xxx hardware development: getting started" http://www.st.com/stonline/products/literature/an/13675.pdf

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. 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. 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 Peripherie gibt es bis zu 12 Demos und eine Beschreibung als CHM Datei "stm32f10x_stdperiph_lib_um.chm"

CMSIS:

Parallel zur Firmware-Library gibt es für die "Selbermacher" die CMSIS, die einen Teil der HW und den Core Support abdeckt. Im Rahmen des CMSIS Standard (www.onARM.com) wurden die Headerfiles standardisiert, der Zugriff auf die Register erfolgt per Peripheral->Register. Weiterhin existieren eine Zahl von Helferfunktionen für den NVIC, als auch eine SystemInit - Funktion, welche sich um die PLL kümmert.

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). Das SWD Interface verfügt ausserdem über eine weitere Leitung, SWO. Über diesen Kanal kann ein vereinfachtes Trace des Core ermöglicht, sowie printf-like Daten über den ITM Channel 0 geschickt und im Debugger ausgegeben werden.

Die Coresight-Debug-Architektur ermöglicht ein non-invasive debugging, d.h. es können während des Betriebes ohne Beeinflussung des Prozessors Daten vom Speicher gelesen und in selbigen geschrieben werden.

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:

  • Interrupt-Controller jetzt Teil des Prozessors (als Core Peripheral), die Vector Table ist jetzt eine echte Vector Tabelle (keine jmps o.ä. 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. 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.
  • Thumb-2 Befehlssatz wird schneller ausgeführt

Vorteile gegenüber LPC1700 und LPC1300:

  • Flexiblere Gehäuseformen mit mehr Peripherie bei kleinen Gehäusen
  • Genauerer ADC, insbesondere gegenüber LPC1300
  • Flexiblere Varianten der Peripherie >> bei weniger einen deutlichen Preisvorteil
  • ab 0,85 EUR (Stand 2010)

Nachteil gegenüber LPC1700:

  • Nur 72 MHz statt 100 MHz Taktfrequenz

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.

Software/Programmierung:

Als Programmieroberfläche kann eine kostenlose Struktur verwendet werden (wie meinen?):

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

Folgende Umgebungen sind als Demoversion (32k Codesize) verfügbar, idR sind dutzende von Examples dabei:

Programmieradapter

  • J-Link / J-Trace Cortex-M3 (www.segger.com), als NonComercial für ca. 60,- zu haben, läuft in µVision, IAR, gdb
  • z.B. OpenOCD ARM-USB-OCD (nicht kostenlos)
  • Keil ULINK2, ULINK pro
  • RLink von Raisonance (ab 99€)


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 Firmware:
   http://www.st.com >> Auswahl CPU STM32F103xxx >> "Firmware" "STM32F10x_StdPeriph_Lib"
   http://www.st.com/mcu/devicedocs-STM32F103RC-110.html
   In dem ZIP ist ein ZIP mit der Firmware "\Archive\um0427.zip"
   Das ZIP "stm32f10x_stdperiph_lib.zip" Entpacken nach "C:\WinARM\examples\stm32_FW3.2.0\

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

Bezugsquellen

Versandhäuser für Privatpersonen:

Gewerblich lieferen natürlich viele wie Farnell, Digikey usw.