[STM32] Verwenden Sie RTE, um ein (keil) ARM MDK-Projekt aus 0 zu erstellen (reines Keil, Standardbibliothek, nehmen Sie STM32F103C8T6 als Beispiel).

Um entsprechendes Grundwissen zu erlernen, lesen Sie bitte andere Artikel in dieser Spalte, dort muss das sein, was Sie wollen.

https://blog.csdn.net/weixin_43764974/category_11021363.html

Die Software und Hardware dieses Artikels:

  • STM32F103C8T6
  • ARM MDK 5.38
  • ARM-Compiler 6
  • ST-Link v2
  • StdPeriph-Treiber (Standardbibliothek)

Bevor der Artikel beginnt, möchte ich es noch einmal sagen: keil, μvision, ARM MDKdiese Substantive (obwohl es im vorherigen Artikel bereits mehrfach gesagt wurde)

  • Keil ist ein deutsches Unternehmen, das eine Reihe von Softwaretools für die Entwicklung eingebetteter Systeme anbietet. Darunter ist Keil MDK (Microcontroller Development Kit), eine Reihe integrierter Entwicklungsumgebungen (IDE), die von Keil eingeführt wurden und zur Entwicklung eingebetteter Anwendungen auf Basis von ARM-Prozessoren verwendet werden.

  • μVision (MicroVision) ist die Kernkomponente von Keil MDK. Es handelt sich um eine leistungsstarke integrierte Entwicklungsumgebung, die Funktionen wie Codebearbeitung, Kompilierung, Debugging, Simulation und Programmierung bietet. Als Front-End-Tool von Keil MDK bietet μVision Benutzern eine benutzerfreundliche grafische Oberfläche und eine praktische Entwicklungserfahrung.

  • ARM MDK (ARM Microcontroller Development Kit) ist ein komplettes Software-Entwicklungskit, das von Keil entwickelt und von ARM autorisiert wurde. Es kombiniert Keils Softwareentwicklungstools und Softwarebibliotheken wie CMSIS (Cortex Microcontroller Software Interface Standard), die von ARM bereitgestellt werden, um eingebettete Systeme auf Basis von Prozessoren der ARM Cortex-M-Serie zu entwickeln.

Normalerweise wird Keil verwendet, um auf die oben genannten drei zu verweisen.

1. Ingenieurstruktur

Beim Erstellen eines STM32-Projekts in der Keil-Umgebung wird normalerweise die folgende Struktur befolgt:

  1. Projektdateien (Projektdateien) :

    • Projektdatei ( .uvprojx): Die Hauptdatei des Keil-Projekts, in der die Einstellungen und Konfigurationsinformationen des Projekts gespeichert werden.
    • Projektoptionsdatei ( .uvoptx): Speichert Konfigurationsoptionen für den Compiler, Linker und Debugger.
    • Projektkonfigurationsdatei ( .uvproj.user): speichert die Benutzerkonfigurationsoptionen des Projekts, wie z. B. Quelldateiliste, Kompilierungsoptionen usw. (wobei Benutzer der Windows-Benutzername ist, wenn Sie das Projekt erstellen).
  2. Quelldateien :

    • C/C++-Quelldateien (.c, .cpp): Enthält den Hauptquellcode der Anwendung.
    • Assembly-Quelldatei (.s): Eine optionale Assembler-Sprachdatei für bestimmte Prozessoranweisungen oder Startcode.
    • Header-Datei (.h): Enthält verschiedene Konfigurationen und Makrodefinitionen.
  3. Bibliotheksdateien (Bibliotheksdateien) :

    • STM32-Standardperipheriebibliothek (.a): Enthält die Standardperipheriebibliotheksdatei des STM32-Chips und stellt Funktionen und Konstanten für den Zugriff auf STM32-Peripheriegeräte bereit.
    • Bibliotheksdateien von Drittanbietern: Wenn Sie Bibliotheken von Drittanbietern (wie FreeRTOS, CMSIS usw.) verwenden, können die Dateien dieser Bibliotheken auch hier abgelegt werden.
  4. Zwischendateien :

    • Objektdatei (.o): Die durch Kompilieren der Quelldatei generierte Objektdatei wird für nachfolgende Verknüpfungsvorgänge verwendet.
    • Listendatei (.lst): Enthält kompilierten Assemblycode, der zum Debuggen und zur Analyse verwendet werden kann.
  5. Ausgabedateien :

    • Ausführbare Dateien (.axf, .elf): Der Linker verknüpft die Objektdateien in ausführbare Dateien zum Brennen und Ausführen auf dem STM32-Chip.
    • HEX-Datei (.hex): Das Hexadezimalformat der ausführbaren Datei, das häufig zum Brennen durch den Brenner verwendet wird.
    • BIN-Datei (.bin): Das Binärformat der ausführbaren Datei, das üblicherweise auch zum Brennen durch den Brenner verwendet wird.
  6. Debug-Dateien (Debug-Dateien) :

    • Debug-Informationsdatei (.axf, .elf): enthält Symbolinformationen und Debugging-Informationen, die vom Debugger benötigt werden.
    • Debug-Ausgabedatei (.txt): enthält Ausgabeinformationen und Protokolle während des Debuggens.

Zusätzlich zu den oben genannten Dateien kann das Keil-Projekt auch andere Hilfsdateien enthalten, wie zum Beispiel:

  • Startdatei (startup_xxx.s): Enthält den Startcode des Prozessors und initialisiert den Prozessor und die Peripheriegeräte.
  • Konfigurationsdatei (xxx.h): Enthält verschiedene Konfigurationsoptionen und Makrodefinitionen.
  • Treiberdateien (xxx.c, xxx.h): Treibercode- und Header-Dateien für bestimmte Peripheriegeräte.
  • Interrupt-Handler-Funktion (xxx.c): Die Funktion, die Interrupt-Anfragen verarbeitet.

Dies soll es Ihnen erleichtern, die Erklärungen anderer Codes zu lesen. Sie können tun, was Sie wollen, aber sie sind alle ähnlich. Der Kern besteht aus dem Benutzerprogramm + Systemdateien (Startdateien, Treiberdateien usw.).

Zweitens, praktische Bedienung

Für eine ausführliche Einführung in keil können Sie die vorherigen Artikel in dieser Kolumne lesen.

(1) Klicken Sie auf Projekt -> Neues μVision-Projekt und wählen Sie einen Speicherort für das Projekt aus

(2) Wählen Sie das Gerät aus: STM32F103C8 (das Paket hier muss zuerst installiert werden, das im vorherigen Artikel ausführlich vorgestellt wurde)

Fügen Sie hier eine Bildbeschreibung ein

(3) Klicken Sie auf OK, um eine Laufzeitkonfigurationsoberfläche aufzurufen

Fügen Sie hier eine Bildbeschreibung ein


Manage Run-Time EnvironmentEs handelt sich um eine Funktion, die in der Keil-Software zur Verwaltung von Softwarekomponenten verwendet wird. In diesem Fenster können Sie die erforderlichen Komponenten wie CMSIS, Gerät, Middleware usw. auswählen oder abbrechen. Diese Komponenten können einige vorkompilierte Bibliotheksdateien, Header-Dateien, Quellcode usw. bereitstellen, um die Entwicklung von STM32-Projekten zu erleichtern.

  • Im Popup-Fenster „Laufzeitumgebung verwalten“ können Sie in der Baumliste auf der linken Seite verschiedene Kategorien von Komponenten sehen, z. B. CMSIS, Gerät, Middleware usw. Die entsprechende Beschreibung, Version, Dokument und weitere Informationen werden rechts angezeigt.

  • Aktivieren oder deaktivieren Sie die erforderlichen Komponenten in den Kontrollkästchen rechts. Im Allgemeinen sind mindestens Select CMSIS->COREund Device->Startupdiese beiden Komponenten erforderlich, die einige grundlegende Definitionen und Startcode bereitstellen. Andere Komponenten werden entsprechend den technischen Anforderungen bestimmt. Wenn ich beispielsweise eine Lampe anzünde, wähle ich eine andere GPIO(hier wird die Standardbibliothek verwendet und der GPIO unter stdPeriph Drivers ist ausgewählt).
    Fügen Sie hier eine Bildbeschreibung ein

  • Klicken Sie nach Auswahl der Komponenten auf Resolvedie Schaltfläche, um einige Abhängigkeiten oder Konflikte zu lösen und andere Abhängigkeitsoptionen zu prüfen.

In der späteren Entwicklung können Sie weiterhin auf die grüne Raute in der Symbolleiste klicken, um die erforderlichen Komponenten auszuwählen.


(4) Nachdem Sie alle Probleme gelöst haben, klicken Sie auf die Schaltfläche „OK“, um das Fenster „Laufzeitumgebung verwalten“ zu schließen und die entsprechenden Projektdateien zu generieren.
Fügen Sie hier eine Bildbeschreibung ein
Im vorherigen Vorgang hat keil für uns die notwendigen Dateien für das Projekt generiert:

  • Systeminitialisierungsdatei: system_stm32f10x.c, enthält die Definition einiger Systeminitialisierungsfunktionen.
  • Startdatei: startup_stm32f10x_md.senthält die Definition der Reset-Vektortabelle und der Reset-Verarbeitungsfunktion.
  • GPIO-Treiber: stm32f10x_gpio.cIn dieser Datei können Sie die Funktionen und Parameter des GPIO-Treibers anzeigen.
  • usw.

Darunter können Dateien mit gelben Schlüsseln nicht geändert werden und werden nicht im Projektordner angezeigt. Natürlich müssen diese generierten Dateien normalerweise nicht geändert werden. Darüber hinaus verfügen einige Dateien auch über ein +-Zeichen, das erweitert werden kann, was die Einschlussbeziehung der Datei widerspiegelt und zum Anzeigen von Dateiabhängigkeiten praktisch ist.

Dies kann sich ein wenig von der „Projektvorlage“ unterscheiden, die Sie verwenden, da einige Projekte mit einer alten Keil-Version erstellt werden, möglicherweise keine Softwarepakete oder RTE-Funktionen (d. h. Laufzeitumgebung) verwenden oder auf CubeMX basieren. wie zum Beispiel dieses:
Fügen Sie hier eine Bildbeschreibung ein

Der Inhalt des aktuellen Projektverzeichnisses:
Fügen Sie hier eine Bildbeschreibung ein
Die letzten drei sind Projektdateien, die zuvor eingeführt wurden, und die Ordner sind:

  • RTE : Dieser Ordner enthält Konfigurationsdateien, Header-Dateien und Quelldateien für Ihre ausgewählten Softwarekomponenten. Hier können Sie Ihre Komponenteneinstellungen und Ihren Code überprüfen oder ändern.
  • DebugConfig : Dieser Ordner enthält Ihre Debug-Konfigurationsdateien, z. B. Zieleinstellungen, Debugger-Einstellungen, Trace-Einstellungen usw. Debug-Parameter können hier angezeigt oder geändert werden.
  • Auflistungen : Dieser Ordner enthält den Assemblercode, die Symboltabelle, die Zuordnungsdatei usw., die nach der Kompilierung des Projekts generiert wurden. Hier können Sie Ihre Kompilierungsergebnisse einsehen oder analysieren.
  • Objekte : Dieser Ordner enthält die Objektdateien, Bibliotheksdateien, ausführbaren Dateien usw., die nach der Kompilierung des Projekts generiert werden.

( 5) Benutzerprogramm schreiben

  • Sie können beispielsweise im Projektordner einen neuen Benutzerprogrammordner erstellen User;

  • Erstellen Sie dann eine neue Datei, speichern Sie sie als .c-Datei und speichern Sie sie gerade in der Datei.

  • Code schreiben;

  • Füge sie zu keil hinzu:

    • Klicken Sie Manage project itemshier, um eine neue Gruppe zu erstellen und die Quelldatei hinzuzufügen, wie in der Abbildung gezeigt:
      Fügen Sie hier eine Bildbeschreibung ein
    • Aktivieren Sie unter „ Dateien option for targeterstellen“.hex

( 6) Herunterladen

Ich habe es über ST-Link heruntergeladen. Wenn nicht, können Sie meinen vorherigen Artikel lesen:

[STM32] Bootstrap-Modus und Programm-Download (Beispiel für ST-Link und serielle Schnittstelle)

3. Angelegenheiten, die Aufmerksamkeit erfordern

3.1 Mir scheinen einige Einstellungen zu fehlen?

In diesem Artikel verwende ich STM32F103C8T6. Im Projekt habe ich lediglich die Ein-Aus-Steuerung des LED-Lichts realisiert. Es gibt oben nur eine mian.c-Datei.
Fügen Sie hier eine Bildbeschreibung ein

Meine vollständige Workflow-Übersicht ist:

  1. Neubau, Modell auswählen;
  2. RTE konfigurieren;
  3. Programmierung;
  4. Fügen Sie das Programm zu Keil hinzu;
  5. Wählen Sie die Generierung einer Hex-Datei.
  6. kompilieren;
  7. ST-Link-Download einstellen;
  8. Herunterladen.

Da ich das Projekt mit RTE erstellt habe, verarbeitet RTE automatisch die erforderlichen Include-Pfade und Bibliotheksdateien, um einen korrekten Kompilierungs- und Verknüpfungsprozess sicherzustellen. Basierend auf den Geräte- und Peripherietreibern, die Sie im RTE-Konfigurationsassistenten ausgewählt haben, werden automatisch die entsprechenden Konfigurationsdateien einschließlich der richtigen Include-Pfade generiert. RTE generiert außerdem automatisch entsprechende Prozessorsymbole und Makrodefinitionen entsprechend den von Ihnen ausgewählten Geräte- und Peripherietreibern.

Allerdings bleiben diese Einstellungen normalerweise unverändert:
Fügen Sie hier eine Bildbeschreibung ein

3.2 RTE-Auswahl

Wenn Sie die Standardbibliothek verwenden möchten , wählen Sie Device--StdPeriph Driversdie folgenden Peripheriegeräte aus
Fügen Sie hier eine Bildbeschreibung ein
. Wenn Sie die HAL-Bibliothek verwenden möchten, wählen Sie: CMSIS Driversdie folgende Peripherie-API, GPIO, wählen Sie Gerät

Fügen Sie hier eine Bildbeschreibung ein


CMSIS DriverDabei handelt es sich um ARMeinen vom Unternehmen definierten gemeinsamen Treiberschnittstellenstandard für die Peripheriesteuerung verschiedener Cortex-M-Mikrocontroller. Es bietet eine konsistente Programmierschnittstelle und Portabilität und ermöglicht die gemeinsame Nutzung und Wiederverwendung von Treibercode zwischen Mikrocontrollern verschiedener Anbieter. STMicroelectronics bietet eine CMSIS-Treiber-kompatible Treiberimplementierung für Kompatibilität mit seinen Mikrocontrollern der STM32-Serie.

HAL (Hardware Abstraction Layer)ist STMicroelectronicseine High-Level-Bibliothek für die Peripherieprogrammierung von STM32-Mikrocontrollern. HAL bietet funktionale Funktionen und Konfigurationsoptionen für bestimmte Peripheriegeräte der STM32-Serie und macht es für Entwickler relativ einfach, Peripheriegeräte zu schreiben und zu steuern. HAL befindet sich auf dem CMSIS-Treiber und verwendet die zugrunde liegende Schnittstelle des CMSIS-Treibers zur Steuerung von Peripheriegeräten.

stdPeriph Driversist STMicroelectronicseine ältere Peripherietreiberbibliothek, die von bereitgestellt wird. stdPeriph-Treiber bieten eine High-Level-API, um die Programmierung relativ einfach zu machen, aber für verschiedene Serien von STM32-Mikrocontrollern können ihre Peripheriefunktionen und Registerdefinitionen unterschiedlich sein.

Anhang, Code

Einfaches LED-Blinken, Standardbibliothek:

Wenn die chinesischen Zeichen nach dem Kopieren verstümmelt sind, ändern Sie einfach die Kodierung auf UTF-8.

#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"

void LED_Init(void); //LED初始化函数声明
void Delay(uint32_t nCount); //延时函数声明

int main(void)
{
    
    
  LED_Init(); //调用LED初始化函数
  while (1)
  {
    
    
    GPIO_ResetBits(GPIOC, GPIO_Pin_13); //将PC13置低,点亮LED
    Delay(0x0FFFFF); //延时一段时间
    GPIO_SetBits(GPIOC, GPIO_Pin_13); //将PC13置高,熄灭LED
    Delay(0x0FFFFF); //延时一段时间
  }
}


void LED_Init(void) //LED初始化函数定义
{
    
    
  GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体变量
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能GPIOC端口时钟
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //选择PC13引脚
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置为推挽输出模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO口速度为50MHz
  GPIO_Init(GPIOC, &GPIO_InitStructure); //根据参数初始化GPIOC
  GPIO_SetBits(GPIOC, GPIO_Pin_13); //将PC13置高,熄灭LED
}

void Delay(uint32_t nCount) //延时函数定义
{
    
    
  for(; nCount != 0; nCount--); //循环减计数
}

Wirkung:

Fügen Sie hier eine Bildbeschreibung ein



Schreiben Sie „Ich liebe dich für immer“ an das Ende des Gedichts ~

Ich denke du magst

Origin blog.csdn.net/weixin_43764974/article/details/131754334
Empfohlen
Rangfolge