Suche…


Bemerkungen

In diesem Abschnitt erhalten Sie einen Überblick darüber, was stm32 ist und warum ein Entwickler es möglicherweise verwenden möchte.

Es sollte auch alle großen Themen in stm32 erwähnen und auf die verwandten Themen verweisen. Da die Dokumentation für stm32 neu ist, müssen Sie möglicherweise erste Versionen dieser verwandten Themen erstellen.

Was ist STM32?


STM32 ist eine von ST Microelectronics entwickelte 32-Bit-Flash-Mikrocontrollerfamilie. Es basiert auf dem ARM® Cortex®-M-Prozessor und bietet eine 32-Bit-Produktpalette, die sehr hohe Leistung, Echtzeitfähigkeiten, digitale Signalverarbeitung und einen Betrieb mit niedriger Leistungsaufnahme und niedriger Spannung kombiniert.

Eine ausführliche Beschreibung der einzelnen Serien, Entwicklungswerkzeuge und der Deklaration der Teilenummern finden Sie in Wikipedia .

Produktreihe

Cortex-M0 / -M0 + Cortex-M3 Cortex-M4 Cortex-M7
Hochleistung: STM32F2 STM32F4 STM32F7 , STM32H7
Mainstream: STM32F0 STM32F1 STM32F3
Ultra-Low-Power: STM32L0 STM32L1 STM32L4

Entwicklungsboards

STM32 Nucleo ( mbed-fähig ) Entdeckungs-Kits Evaluierungsboards
Typischer Anwendungsfall: Flexibles Prototyping, Community Prototyping, kreative Demos Vollständige Funktionsbewertung
Erweiterungsmöglichkeiten: +++ ++ ++
Konnektivität: Arduino TM, ST, Morpho ST ST

Versionen

Ausführung Veröffentlichungsdatum
1.0.0 2016-11-01

( Hinweis: Es gibt viele IDE, Toolchain und Bibliotheken, die mit STM32 einsatzbereit sind. Die folgenden Einstellungen erfordern einen minimalen Aufwand, um sie zum Laufen zu bringen, aber es ist nur einer von vielen. Fühlen Sie sich frei, andere zu erkunden, ist es nicht Der Zweck dieses Beispiels besteht darin, jeden dazu zu zwingen, die hier verwendeten Werkzeuge zu verwenden.)


IDE-Installation

System Workbench für STM32 : Kostenlose IDE unter Windows, Linux und OS X. Sie wurde von AC6 erstellt und steht nach der Registrierung auf der Website der OpenSTM32-Community zum Download zur Verfügung .

Die IDE selbst basiert auf Eclipse, enthält jedoch einige Extras für die STM32-Entwicklung wie:

  • Ac6 STM32 MCU GCC-Toolchain
  • OpenOCD und GDB (arm-none-eabi-gdb) mit automatisch generierten Debug-Konfigurationen, abhängig von der Zielplatine
  • Eingebaute Optionen zum Programmieren oder Löschen von Chips

Um mit STM32 zu beginnen, bevor Sie ein eigenes Board erstellen, wird empfohlen, mit einem Discovery- , Nucleo- oder Eval-Board zu experimentieren, das mit einem integrierten SWD-Programmierer / Debugger (Serial Wire Debug) namens ST-Link geliefert wird.

Projekt erstellen

In diesem Beispiel wird ein STM32F4 Discovery-Kit verwendet , das einen STM32F407VG-Mikrocontroller enthält. (Jedes andere Board kann ebenfalls verwendet werden.)

  1. Öffnen Sie SW4STM32 und erstellen Sie ein neues C-Projekt: Datei → Neu → C-Projekt

  2. Geben Sie ihm einen Namen wie „STM32F4_Discovery-Blinky“ und vom Projekttyp Liste wählen Sie die ausführbare Datei / Ac6 STM32 MCU - Projekt. Standardmäßig ist die einzige verfügbare Toolchain Ac6 STM32 MCU GCC . Weiter klicken.

    Geben Sie hier die Bildbeschreibung ein

  3. Der nächste Schritt ist Debug / Release-Einstellungen . Sie können jetzt überspringen, indem Sie auf Weiter klicken.

  4. Board-Auswahl Vorhandene Karten können wie in diesem Beispiel der STM32F4 Discovery ausgewählt werden oder es können neue benutzerdefinierte Karten hinzugefügt werden.

    Geben Sie hier die Bildbeschreibung ein

  5. Der nächste Schritt ist die Konfiguration der Projekt-Firmware . Wählen Sie zwischen Keine Firmware , Standard Peripheral Library (SPL) oder Hardware Abstraction Layer (HAL). Es wird in Frage gestellt, welche für die Entwicklung besser geeignet ist, aber diese Frage ist in diesem Beispiel nicht zulässig. In diesem Beispiel wird die HAL-Bibliothek verwendet, da sie derzeit von ST Microelectronics unterstützt wird. Ein weiteres verfügbares Softwaretool für HAL ist STM32CubeMX , ein Initialisierungscode-Generator. In den Softwarepaketen STM32CubeFx oder STM32CubeLx sind auch mehrere Beispielanwendungen verfügbar. Laden Sie die Zielfirmware herunter, wenn diese fehlt, und es wird empfohlen, die Optionen "Low-Level-Treiber im Projekt hinzufügen" und "Als Quellen in der Anwendung" auszuwählen. Klicken Sie abschließend auf Fertig stellen.

    Geben Sie hier die Bildbeschreibung ein

LED-Anwendung blinken

Da dieses Projekt mit einem STM32F4 Discovery erstellt wurde, gibt es bereits mehrere einsatzbereite Funktionen im Projektordner / STM32F4_Discovery-Blinky / Utilities / STM32F4-Discovery /, mit denen die Peripheriegeräte des Discovery Kits (Beschleunigungssensor, Audio) angeschlossen werden können , LEDs, Drucktaste). In diesem Beispiel ist die void BSP_LED_Init(Led_TypeDef Led) und die void BSP_LED_Toggle(Led_TypeDef Led) Funktionen werden aus der stm32f4_discovery.c - Datei verwendet werden , um die grüne LED zu blinken, das ist LED4 . Um zu entscheiden, welche LED welche ist, verwenden Sie die Schaltpläne des Discovery-Kits .

Geben Sie hier die Bildbeschreibung ein

Die eigentlichen Pin- und Portnamen sind bereits von #define und einer enum ausgeblendet. Verwenden Sie die enum Strg + Klicken , um sie zu verfolgen.

  1. Im Inneren des main , rufen Sie die HAL_Init() Funktion , die alle Peripheriegeräte zurücksetzt, initialisiert die Flash - Schnittstelle und die Systick. (Systick wird verwendet, um eine Verzögerung für das Blinken zu erzeugen.)
  2. Die Systemuhr muss konfiguriert werden. Dies kann mit der STM32CubeMX-Uhrkonfigurationsfunktion oder im Referenzhandbuch erfolgen. In diesem Beispiel wird der Systemtakt von der internen PLL (Phase Locked Loop) gespeist, die von einem externen 8-MHz-Quarzoszillator (HSE) geliefert wird. Prescalers wurden so eingestellt, dass die maximal verfügbare Frequenz erreicht wird, die bei der F4 Discovery 168 MHz beträgt.
  3. Initialisierung der Peripheriegeräte, in diesem Fall ein GPIO-Pin.
  4. Rufen Sie in einer Endlosschleife die LED-Umschaltung und die Funktion HAL_Delay() . HAL_Delay() verwendet den Systick und generiert eine Verzögerung in Millisekunden.

Der gesamte Code ist der folgende:

#include "stm32f4xx.h"
#include "stm32f4_discovery.h"
            
void SystemClock_Config(void);

int main(void)
{
    /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    HAL_Init();

    /* Configure the system clock */
    SystemClock_Config();

    /* Initialize one of the LED GPIO pin */
    BSP_LED_Init(LED4);

    while(1)
    {
        BSP_LED_Toggle(LED4);
        HAL_Delay(1000);       // in miliseconds
    }
}

/**
 * @brief  System Clock Configuration
 *         The system Clock is configured as follow :
 *            System Clock source            = PLL (HSE)
 *            SYSCLK(Hz)                     = 168000000
 *            HCLK(Hz)                       = 168000000
 *            AHB Prescaler                  = 1
 *            APB1 Prescaler                 = 4
 *            APB2 Prescaler                 = 2
 *            HSE Frequency(Hz)              = HSE_VALUE
 *            PLL_M                          = (HSE_VALUE/1000000u)
 *            PLL_N                          = 336
 *            PLL_P                          = 2
 *            PLL_Q                          = 7
 *            VDD(V)                         = 3.3
 *            Main regulator output voltage  = Scale1 mode
 *            Flash Latency(WS)              = 5
 * @param  None
 * @retval None
 */
void SystemClock_Config(void)
{
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_OscInitTypeDef RCC_OscInitStruct;

  // Enable Power Control clock
  __PWR_CLK_ENABLE();

  // The voltage scaling allows optimizing the power consumption when the
  // device is clocked below the maximum system frequency, to update the
  // voltage scaling value regarding system frequency refer to product
  // datasheet.
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  // Enable HSE Oscillator and activate PLL with HSE as source
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

  // This assumes the HSE_VALUE is a multiple of 1MHz. If this is not
  // your case, you have to recompute these PLL constants.
  RCC_OscInitStruct.PLL.PLLM = (HSE_VALUE/1000000u);
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  // Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
  // clocks dividers
  RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK
      | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
}

Mit dem Hammer bauen Geben Sie hier die Bildbeschreibung ein , und laden Sie die Anwendung herunter, indem Sie mit der rechten Maustaste auf den Projektordner klicken und die Option Ziel → Programmchip auswählen.

Eine andere Möglichkeit zum Herunterladen ist die Verwendung von Debuggen . Klicken Sie dazu auf den Pfeil neben dem Bug-Symbol Geben Sie hier die Bildbeschreibung ein Klicken Sie in der Symbolleiste auf das Menü Debug Configuration .... Erstellen Sie eine neue Ac6 STM32 Debugging- Konfiguration. Wenn das Feld C / C ++ - Anwendung leer ist, geben Sie Folgendes ein:

Debuggen Sie \ STM32F4_Discovery-Blinky.elf

Andere Debug-Parameter wie die OpenOCD-Konfigurationsdatei und die verwendeten Telnet- und GDB-Ports werden automatisch generiert und vom Framework ausgefüllt. Klicken Sie schließlich auf die Schaltfläche Debug.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow