STM32: Unterschied zwischen den Versionen

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
Zeile 111: Zeile 111:
'''Vorteile gegenüber ARM7:'''
'''Vorteile gegenüber ARM7:'''


* besserer Interrupt-Controller, deutlich schnellere Ausführungszeit bei Interrupts
* 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
* Thumb-2 Befehlssatz wird schneller ausgeführt



Version vom 8. April 2010, 07:44 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
  • 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 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/index.jsp?topic=/com.arm.doc.set.cortexm/index.html. Hier gibt es den Opcode wenn man ihn in Assembler 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.

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 Hoppy-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:

  • 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 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