STM32 Tool

Es handelt sich hier um einen JavaScript Codegenerator. Weitere Infos unten. Bei Problemen bitte Info an mich.
Eigentlich würde der Adressrechner hier auch rein gehören, aber da er fest im Einstiegsartikel eingebunden ist, lass ich ihn da.

General purpose input output (GPIO):

Rückumwandlung Infos zur Rückumwandlung
CRL (Pin 0-7)
CRH (Pin 8-15)
Hier kann der Hexwert für die Register eingegeben werden (mit <ENTER> bestätigen).
Dann werden daraus wieder die Einstellungen ausgelesen. Da Eingänge mit Pull-up oder down vom ODR Register abhängig sind, werden beide als Eingang mit Pull-down gewertet.
Bei Eingängen wird der Out Speed immer auf 50MHz eingestellt.
Pin Eingang Ausgang Out Speed Infos
Pin 0 IA IF IU ID OP OD AP AD Mögliche Pin Konfigurationen:
Bezeichnung kurz
Analog Eingang (Analog mode) IA
Hochohmiger Eingang (Floating input) IF
Eingang mit Pull-up IU
Eingang mit Pull-down ID
Ausgang mit Low und High (General purpose push-pull) OP
Ausgang mit Low und hochohmig (General purpose Open-drain) OD
Alternative Funktion (Alternate function Push-pull) AP
Alternative Funktion (Alternate function Open-drain) AD

Weitere Infos: (Seite 148)

Peripherieregister müssen immer mit 32-Bit (access by words) angesprochen werden. Wenn man nur einen Pin ändern will, muss man die Portkonfiguration mit einbeziehen und neu überschreiben.
Beispiel:
GPIOC->CRL = (GPIOC->CRL & 0xF0FFFFFF) | 0x03000000; //Pin 6 OP
GPIOC->CRL = (GPIOC->CRL & 0xF0FFFFFF) | 0x04000000; //Pin 6 IF
 

Pin 1 IA IF IU ID OP OD AP AD
Pin 2 IA IF IU ID OP OD AP AD
Pin 3 IA IF IU ID OP OD AP AD
Pin 4 IA IF IU ID OP OD AP AD
Pin 5 IA IF IU ID OP OD AP AD
Pin 6 IA IF IU ID OP OD AP AD
Pin 7 IA IF IU ID OP OD AP AD
Pin 8 IA IF IU ID OP OD AP AD
Pin 9 IA IF IU ID OP OD AP AD
Pin 10 IA IF IU ID OP OD AP AD
Pin 11 IA IF IU ID OP OD AP AD
Pin 12 IA IF IU ID OP OD AP AD
Pin 13 IA IF IU ID OP OD AP AD
Pin 14 IA IF IU ID OP OD AP AD
Pin 15 IA IF IU ID OP OD AP AD
  Set ODR Register (Pull-up/down) Port:
Der Zustand im ODR Register entscheidet , ob ein Ausgang High oder Low ist.
Bei Eingängen mit Pull up/down legt das ODR fest, ob es ein Pullup oder Pulldown wird. Daher muss das Register mit eingestellt werden, wenn man Eingänge mit Pull up/down konfiguriert.
 

Codeausgabe:

Ausblenden / Schließen

Startup und Taktsteuerung:

CR und CFGR Register Clock control und Clock configuration
PLL (Phase locked Loop) Aktiv
    Taktquelle extern
    HSE halbieren
Zur Vervielfältigung des Systemtakts (max 72MHz).
Taktquelle des PLL: 0 = 4MHz (halbe HSI) oder 1 = HSE (HSE kann auch halbiert werden)
Wird abgeschaltet, wenn der Stop oder Standby Modus aktiv wird.
CSS (Clock security system) ON Ein Detektor prüft den HSE. Sollte dieser nicht OK sein, wird das Bit 19 (CSS) wieder abgeschaltet. (Seite 128)
HSE ON
HSE Bypass
Kann nicht abgeschaltet werden, wenn er als Systemtakt verwendet wird.
Wird HSE Bypass aktiviert, kann eine externe Taktquelle bis 50MHz verwendet werden. (Seite 125)
Wird abgeschaltet, wenn der Stop oder Standby Modus aktiv wird.
HSI (Internal High Speed Clock) ON Wird automatisch aktiviert, nachdem der Stop / Standby Modus verlassen wurde oder der HSE einen Fehler generierte.
Kann nicht abgeschaltet werden, wenn er als Systemtakt verwendet wird. Auf den Flashspeicher kann nur zugegriffen werden, wenn HSI aktiv ist.
SYSCLK Taktquelle Hiermit wird festgelegt, welche Taktquelle als Systemtakt verwendet werden soll. Wird nach Stop, Standby oder bei HSE Fehler (wenn CSS aktiv) automatisch auf HSI eingestellt.
HSI TRIMM HSI TRIMM (Internal high-speed clock trimming): zum einstellen der HSI.
Der Standardwert 16 ergibt 8MHz (+-1%). Schrittweite ist ca. 40KHz.
MCO (Main Clock Output) Den Takt an die MCO Funktion weiterleiten (max 50MHz, da Peripherieausgang).
Der MCO Pin (A8) muss dafür aber als AF-Ausgang konfiguriert werden
.
USB Prescaler Zum generieren der 48MHz für USB. Muss eingeschaltet sein, bevor der USB Takt aktiviert werden kann. Kann nicht ausgeschaltet werden, solange der USB Takt aktiv ist.
0: PLL ist auf 72 MHz eingestellt
1: PLL ist auf 48 MHz eingestellt
Advanced High Speed Bus Eingangstakt: SYSCLK Ausgangstakt: HCLK
Maximal 72MHz. Muss mindestens 25MHz sein, wenn Ethernet verwendet wird.
APB2 Taktfrequenz Eingangstakt: SYSCLK->HCLK Ausgangstakt: PCLK2
Maximal 72MHz. Für ADC Clock, TIM1 und weitere Peripherie
APB1 Taktfrequenz Eingangstakt: SYSCLK->HCLK Ausgangstakt: PCLK1
Maximal 36MHz. Für TIM2-7 und weitere Peripherie
ADC Taktfrequenz Eingangstakt: SYSCLK->HCLK->PCLK2 Ausgangstakt: ADCCLK
Maximal 14MHz. Für Analogeingänge.
AHBENR Register Advanced High Speed Bus peripheral clock enable
MAC Rx MAC Tx MAC (Ethernet)

Takte für den AHB einschalten

Weitere Infos im Reference Manual (Seite 133)

USB OTG FS clock
SDIO
FSMC
CRC
FLITF
SRAM interface
DMA1 DMA 2
AHB2ENR Register Advanced Peripherial Bus 2 clock enable
ADC 1  ADC 2  ADC 3

Takte für den APB 2 einschalten

Weitere Infos im Reference Manual (Seite 134)
USART 1
SPI 1
GPIO A GPIO B GPIO C GPIO D
GPIO E GPIO F GPIO G AFIO
TIM 1 TIM 8 TIM 9
TIM 10 TIM 11
AHB1ENR Register Advanced Peripherial Bus 1 clock enable
DAC

Takte für den APB 1 einschalten

Weitere Infos im Reference Manual (Seite 136)
PWR
BKP (Backup interface clock)
CAN 1 CAN 2
USB
I2C 1 I2C 2
USART 2 USART 3
UART 4 UART 5
SPI 2 SPI 3
WWDG (Window watchdog clock)
TIM 2 TIM 3 TIM 4 TIM 5
TIM 6 TIM 7
TIM 12 TIM 13 TIM 14
BDCR und CSR Register Backup domain control register
RTC clock enable

Real time Clock Einstellungen

Weitere Infos im Reference Manual (Seite 448)
LSE ON LSE Bypass
Taktquelle
LSI ON
Flash_ACR Register Flash access control register
Prefech ON half cycle access ON Prefetch buffer enable and Half cycle (for power optimization) (Seite 52)
Latenz Zero wait state, 0 - 24 MHz (Seite 53)
One wait state, 24 - 48 MHz
Two wait states, 48 - 72 MHz
 

Codeausgabe:

Ausblenden / Schließen

Umrechner:

Eingabe Ausgabe
||| Bit 31-16
||| Bit 15-0
0x00000000
Hex: Formel: ____ ____ ____ ____
____ ____ ____ ____

Dieser Konverter ist hilfreich, wenn es um die Beschaltung von 32Bit Registern geht.
Im Datenblatt das entsprechende Bit raussuchen und hier als Häkchen setzen. Wenn der Mauszeiger auf einem Häkchen "parkt", wird das dazugehörige Bit angezeigt. Alternativ kann auch der Hex Wert oder eine Rechenformel benutzt werden.

Ausblenden / Schließen

Beschreibung

Im Grunde genommen, sind viele dieser Tools nix anderes, als ein etwas einfacherer Zugriff auf die Konfigurationsregister. Sie sind immer in einzelne Abschnitte aufgeteilt, da ich sie so Modul für Modul unter Kontrolle habe. Die erstellten Codeblöcke können aus dem Textfeld einfach raus kopiert werden.
Die Tools sind auf die Mainstreams STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx und STM32F107xx ausgelegt. Dafür habe ich etwas im Reference manual RM0008 rumgewühlt.
Mit der Angabe: (Seite 44) wird bei einigen Funktionen vermerkt, auf welcher Seite im manual RM0008 man zusätzliche Informationen findet.

Mir fehlt aber die Zeit, alle Funktionen richtig zu testen, weshalb es möglicherweise zu ungewollten Effekten kommt. Sollten jemand Unregelmäßigkeiten auffallen, bitte ich um einen entsprechenden Hinweis, damit ich es korrigieren kann. Die Verwendung steht jedem frei, für entstandene Schäden (auch wenn ich sie für unwarscheinlich halte) hafte ich aber nicht.

Das STM32 Tool wird derzeit nicht erweitert...

STM32_Init.c

Auflösung: 1317x846

STM32 Init Editor

Die Keil µVision IDE verfügt über die Möglichkeit, aus speziellen Kommentaren eine Einstellungsoberfläche zu erstellen.
Hier eine Liste, der Keil Samples, welche oft diese Datei enthalten: ARM Download Files
Die STM32_Init.c ist die entsprechende Konfigurationsdatei.
Da hiermit relativ komfortabel so ziemlich alles eingestellt werden kann, sehe ich keinen großen Nutzen für das STM32 Tool und daher erweitere ich es auch erst mal nicht weiter. Andere Hersteller haben bestimmt auch ähnliche Möglichkeiten.

Nach dem Einstellen, wird ein relativ ähnlicher Code erzeugt, wie es bei mir der Fall ist. Durch das direkte schreiben, in die entsprechenden Register, benötigt man wenig Code und auch etwas weniger Speicherplatz auf dem Chip.
Der erzeugte Code ist zwar nicht so gut lesbar, aber das wird bei Verwendung des Editors kaum stören.