Im Bereich der eingebetteten Systeme spielen Mikrocontroller als Schlüsselkomponenten eine wichtige Rolle in Szenarien wie der automatischen Steuerung, dem Internet der Dinge und industriellen Anwendungen. Der von ST Company auf den Markt gebrachte STM32F407 ist ein leistungsstarker und stromsparender 32-Bit-Mikrocontroller, der aufgrund seiner hervorragenden Funktionen und seiner Benutzerfreundlichkeit die Aufmerksamkeit des Marktes auf sich gezogen hat. In diesem Artikel werden wir uns eingehend mit den Funktionen, Spezifikationen, Anwendungsbereichen und der Entwicklungsumgebung des STM32F407 befassen.
Über STM32F407
Die Chip-Serie STM32F407 ist ein leistungsstarker Mikrocontroller, der von STMicroelectronics auf Basis des ARM Cortex™-M4-Kerns auf den Markt gebracht wurde. Er nutzt einen 90-Nanometer-NVM-Prozess und ART (Adaptive Real-Time Memory Accelerator™).
STM32F407 Funktionen
Der STM32F407 basiert auf dem ARM Cortex-M4-Kern, verfügt über DSP-Befehle und eine Gleitkommaeinheit (FPU) und hat eine Taktfrequenz von bis zu 168 MHz. Hier sind seine Hauptmerkmale:
- Hohe Leistung
Ausgestattet mit einem 32-Bit-Cortex-M4-Kern, der Fließkommaoperationen und eine geringe Taktzykluslatenz unterstützt, bietet er hohe Rechenleistung.
- Geringer Stromverbrauch
Mithilfe der dynamischen Spannungsanpassungstechnologie kann zwischen verschiedenen Stromverbrauchsmodi umgeschaltet und der Energieverbrauch des Systems reduziert werden.
- Mehrere Speicherkonfigurationen
Bis zu 1 MB Flash und 192 KB RAM, um den Speicherplatzanforderungen verschiedener Anwendungen gerecht zu werden.
- Leistungsstarke Peripherieunterstützung
Der STM32F407 verfügt über umfangreiche Kommunikationsschnittstellen wie SPI, I2C, UART usw. Er unterstützt bis zu 3 12-Bit-ADC-Wandler, 2 DAC-Wandler und hochauflösende Timer.
- Sicherheit und Zuverlässigkeit
Das integrierte Hardware-CRC-Modul bietet eine Echtzeit-Fehlererkennungsfunktion für Prüfsummen; der Watchdog-Timer kann den Betriebsstatus des Systems überwachen und Software-Deadlocks verhindern.
STM32F407 Spezifikationen
| Specification | Details |
|---|---|
| MCU Model | STM32F407ZGT6 |
| Flash Memory | 1MB |
| Clock Frequency | Up to 168MHz |
| ADC | Three 12-bit |
| DAC | Two 12-bit |
| DMA | Two DMA controllers |
| Timers | Up to 17 timers |
| GPIO | Up to 120 configurable GPIO pins |
| Interfaces | Built-in I2C, SPI, USART, I2S, CAN, and SDIO communication interfaces |
Anwendung des STM32F407
Dank seiner Flexibilität und einfachen Skalierbarkeit wird der STM32F407 in verschiedenen intelligenten Szenarien eingesetzt, darunter unter anderem:
- Geräte für das Internet der Dinge (IoT)
Der geringe Stromverbrauch des STM32F407 macht ihn geeignet als zentrale Verarbeitungseinheit für IoT-Geräte wie Sensoren und Steuerungen.
- Industrielle Automatisierung
In Bereichen wie CNC-Werkzeugmaschinen und Industrierobotern kann der STM32F407 für die Systemsteuerung, die Datenerfassung und -verarbeitung sowie die Kommunikation mit Peripheriegeräten zuständig sein.
- Unterhaltungselektronik
Der STM32F407 kann in Bereichen der Unterhaltungselektronik wie Smart Homes und Wearables eingesetzt werden, um die Anforderungen der Verbraucher an Leistung und Stromverbrauch zu erfüllen.
STM32F407 Entwicklungsressource
Um Entwicklern die Arbeit zu erleichtern, bietet ST eine Vielzahl von Entwicklungsressourcen und Tool-Support, darunter:
- Entwicklungsboards der Serien Discovery und Nucleo
- Integrierte Entwicklungsumgebungen (IDEs) wie Keil uVision und IAR
- JLINK, CMSIS-DAP, ULINK oder STLINK Debugger
- STM32CubeF4 Software-Entwicklungskit auf Basis der HAL/HLL-Bibliothek
Diese Ressourcen vereinfachen den Entwicklungsprozess, verkürzen den Entwicklungszyklus und ermöglichen es Entwicklern, technischen Support zu erhalten, Erfahrungen auszutauschen und Ressourcen zu nutzen.
HAL-Bibliothek
Die HAL-Bibliothek (Hardware Abstraction Layer) ist eigentlich das Peripherietreiberpaket des STM32F407. Die Code-Datei befindet sich unter dem Pfad: \Drivers\STM32F4xx_HAL_Driver.

CMSIS
CMSIS (Cortex Microcontroller Software Interface Standard) ist ein von ARM offiziell entwickeltes Treiberpaket. Das Blockdiagramm sieht wie folgt aus:

Mit diesem CMSIS-Softwarepaket will ARM die Peripherietreiber, die digitale Signalverarbeitung (DSP), die Downloader und die APIs verschiedener gängiger Echtzeitbetriebssysteme (RTOS) verschiedener Chiphersteller vereinheitlichen.
STM32CubeMX ist eine Grafikentwicklungssoftware, die 2014 von ST auf den Markt gebracht wurde, um Benutzern die Konfiguration von Takten, Peripheriegeräten, Pins, RTOS und verschiedener Middleware zu erleichtern. Das Blockdiagramm sieht wie folgt aus:

Mit dieser Grafiksoftware können Sie ganz einfach Engineering-Code generieren und Compiler wie MDK, IAR und TrueSTUDIO unterstützen.
STM32F407-Entwicklungsboard-Projekt
In diesem Entwicklungsexperiment verwenden wir die HAL-Bibliothek, um eine LED zum Leuchten zu bringen oder eine LED-Laufleuchte zu erstellen.
Schritt 1: Öffnen Sie STM32CubeMX, suchen Sie den Pin, der der LED entspricht, und konfigurieren Sie ihn als GPIO-Ausgang.

Schritt 2: Wählen Sie „Serial Wire“ in SYS aus. Nur wenn diese Option ausgewählt ist, können nachfolgende Projekte normal mit st-link gebrannt werden.

Schritt 3: Schalten Sie die externe Uhr ein und aktivieren Sie sie, damit sie die maximale Frequenz von 407 168 MHz erreicht.

Schritt 4: Generieren Sie den technischen Code.

Der generierte Code ist unten dargestellt, und die Pin- und Taktkonfigurationen sind alle konfiguriert.
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct= {0}:
/*GPIO Ports Clock Enable */
_ _HAL_RCC_GPIOF_CLK_ENABLE():
_ _HAL_RCC GPIOH_CLK_ENABLE():
_ _HAL RCC GPIOA CLK_ENABLE():
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET):
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_RESET):
/*Configure GPIO pins:PF9 PF10 */
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10:
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP:
GPIO_InitStruct.Pul1 =GPIO_NOPULL:
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW:
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct):
/*EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI2_IRQn, 0, 0):
HAL NVIC_EnableIRQ(EXTI2_IRQn):
HAL_NVIC_SetPriority(EXTI3_IRQn, 0, 0):
HAL_NVIC_EnableIRQ(EXTI3_IRQn):
HAL_NVIC_SetPriority(EXTI4_IRQn, 0, 0):
HAL_NVIC_EnableIRQ(EXTI4_IRQn):
}
Schreiben Sie dann das Programm zur Steuerung der LED-Leuchte in while(1) der Hauptfunktion.
while (1)
{
/* USER CODE END WHILE */
//Light up the LED
//HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10|GPIO_PIN_9, GPIO_PIN_RESET);
{
//LED flashes
HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_9|GPIO_PIN_10);
HAL_Delay(1000);
}
/* USER CODE BEGIN 3 */
}




