[STM32] Utilisez RTE pour créer un projet (keil) ARM MDK à partir de 0 (keil pur, bibliothèque standard, prenez STM32F103C8T6 comme exemple)

Pour apprendre les connaissances de base connexes, veuillez lire d'autres articles dans cette colonne, il doit y avoir ce que vous voulez.

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

Le logiciel et le matériel de cet article :

  • STM32F103C8T6
  • BRAS MDK 5.38
  • Compilateur ARM 6
  • ST-Link v2
  • Pilotes StdPeriph (bibliothèque standard)

Avant que l'article ne commence, j'ai envie de le redire : keil, μvision, ARM MDKces noms (bien que cela ait été dit plusieurs fois dans l'article précédent)

  • Keil est une société allemande qui fournit une gamme d'outils logiciels pour le développement de systèmes embarqués. Parmi eux, Keil MDK (Microcontroller Development Kit) est un ensemble d'environnement de développement intégré (IDE) lancé par Keil, qui sert à développer des applications embarquées basées sur des processeurs ARM.

  • μVision (MicroVision) est le composant central de Keil MDK. Il s'agit d'un puissant environnement de développement intégré qui fournit des fonctions telles que l'édition de code, la compilation, le débogage, la simulation et la programmation. En tant qu'outil frontal de Keil MDK, μVision offre aux utilisateurs une interface graphique conviviale et une expérience de développement pratique.

  • ARM MDK (ARM Microcontroller Development Kit) est un kit de développement logiciel complet développé par Keil autorisé par ARM. Il combine les outils de développement logiciel de Keil et les bibliothèques logicielles telles que CMSIS (Cortex Microcontroller Software Interface Standard) fournies par ARM pour développer des systèmes embarqués basés sur des processeurs de la série ARM Cortex-M.

Habituellement, utilisez keil pour faire référence aux trois éléments ci-dessus.

1. Structure d'ingénierie

Lors de la création d'un projet STM32 dans l'environnement Keil, la structure suivante est généralement suivie :

  1. Fichiers de projet (fichiers de projet) :

    • Fichier de projet ( .uvprojx) : Le fichier principal du projet Keil, qui enregistre les paramètres et les informations de configuration du projet.
    • Fichier d'options du projet ( .uvoptx) : enregistre les options de configuration du compilateur, de l'éditeur de liens et du débogueur.
    • Fichier de configuration du projet ( .uvproj.user) : Enregistrez les options de configuration utilisateur du projet, telles que la liste des fichiers source, les options de compilation, etc. (ici, utilisateur est le nom d'utilisateur Windows lorsque vous créez le projet).
  2. Fichiers sources :

    • Fichiers source C/C++ (.c, .cpp) : Contient le code source principal de l'application.
    • Fichier source d'assemblage (.s) : fichier de langage d'assemblage facultatif pour des instructions de processeur ou un code de démarrage spécifiques.
    • Fichier d'en-tête (.h) : Contient diverses configurations et définitions de macros.
  3. Fichiers de bibliothèque (Library Files) :

    • Bibliothèque de périphériques standard STM32 (.a) : contient le fichier de bibliothèque de périphériques standard de la puce STM32, fournissant des fonctions et des constantes pour accéder aux périphériques STM32.
    • Fichiers de bibliothèques tierces : si vous utilisez des bibliothèques tierces (telles que FreeRTOS, CMSIS, etc.), les fichiers de ces bibliothèques peuvent également être placés ici.
  4. Fichiers intermédiaires :

    • Fichier objet (.o) : Le fichier objet généré par la compilation du fichier source est utilisé pour les opérations de liaison ultérieures.
    • Fichier de liste (.lst) : contient du code assembleur compilé, qui peut être utilisé pour le débogage et l'analyse.
  5. Fichiers de sortie :

    • Fichiers exécutables (.axf, .elf) : l'éditeur de liens relie les fichiers objets en fichiers exécutables pour la gravure et l'exécution sur la puce STM32.
    • Fichier HEX (.hex) : Le format hexadécimal du fichier exécutable, qui est souvent utilisé pour la gravure par le graveur.
    • Fichier BIN (.bin) : Le format binaire du fichier exécutable, qui est également couramment utilisé pour la gravure par le graveur.
  6. Fichiers de débogage (fichiers de débogage) :

    • Fichier d'informations de débogage (.axf, .elf) : contient les informations de symbole et les informations de débogage requises par le débogueur.
    • Fichier de sortie de débogage (.txt) : contient les informations de sortie et les journaux pendant le débogage.

En plus des fichiers ci-dessus, le projet Keil peut également contenir d'autres fichiers auxiliaires, tels que :

  • Fichier de démarrage (startup_xxx.s) : Contient le code de démarrage du processeur, initialise le processeur et les périphériques.
  • Fichier de configuration (xxx.h) : Contient diverses options de configuration et définitions de macros.
  • Fichiers de pilote (xxx.c, xxx.h) : code de pilote et fichiers d'en-tête pour des périphériques spécifiques.
  • Fonction de gestionnaire d'interruption (xxx.c) : fonction qui gère les demandes d'interruption.

C'est pour vous faciliter la lecture des explications faites par les codes des autres. Vous pouvez faire ce que vous voulez, mais ils sont tous similaires. Le noyau est le programme utilisateur + les fichiers système (fichiers de démarrage, fichiers de pilote, etc.).

Deux, opération pratique

Pour une introduction détaillée à keil, vous pouvez lire les articles précédents dans cette colonne.

(1) Cliquez sur projet -> nouveau projet μVision, sélectionnez un emplacement de sauvegarde du projet

(2) Sélectionnez l'appareil : STM32F103C8 (le pack ici doit être installé en premier, ce qui a été présenté en détail dans l'article précédent)

insérez la description de l'image ici

(3) Cliquez sur OK pour faire apparaître une interface de configuration d'exécution

insérez la description de l'image ici


Manage Run-Time EnvironmentC'est une fonction utilisée dans le logiciel Keil pour gérer les composants logiciels. Dans cette fenêtre, vous pouvez sélectionner ou annuler les composants requis, tels que CMSIS, Device, Middleware, etc. Ces composants peuvent fournir des fichiers de bibliothèque précompilés, des fichiers d'en-tête, du code source, etc., pour faciliter le développement de projets STM32.

  • Dans la fenêtre contextuelle Gérer l'environnement d'exécution, vous pouvez voir différentes catégories de composants dans l'arborescence à gauche, telles que CMSIS, Périphérique, Middleware, etc. La description correspondante, la version, le document et d'autres informations sont affichés à droite.

  • Sélectionnez ou désélectionnez les composants requis dans les cases à cocher à droite. En général, au moins le select CMSIS->COREet Device->Startupces deux composants sont requis, qui fournissent une définition de base et un code de démarrage. D'autres composants sont déterminés en fonction des exigences techniques.Par exemple, si j'allume une lampe, j'en choisirai une autre GPIO(la bibliothèque standard est utilisée ici, et GPIO sous stdPeriph Drivers est sélectionné).
    insérez la description de l'image ici

  • Après avoir sélectionné les composants, cliquez sur Resolvele bouton pour résoudre certaines dépendances ou conflits et vous aider à vérifier d'autres options de dépendance.

Lors d'un développement ultérieur, vous pouvez toujours cliquer sur le losange vert de la barre d'outils pour sélectionner les composants requis.


(4) Après avoir résolu tous les problèmes, cliquez sur le bouton OK pour fermer la fenêtre Gérer l'environnement d'exécution et générer les fichiers de projet correspondants.
insérez la description de l'image ici
Dans l'opération précédente, keil a généré pour nous les fichiers nécessaires au projet :

  • Fichier d'initialisation du système : system_stm32f10x.c, contient la définition de certaines fonctions d'initialisation du système.
  • Fichier de démarrage : startup_stm32f10x_md.s, contient la définition de la table vectorielle de réinitialisation et de la fonction de traitement de réinitialisation.
  • Pilote GPIO : stm32f10x_gpio.c, vous pouvez afficher les fonctions et les paramètres du pilote GPIO dans ce fichier.
  • etc.

Parmi eux, les fichiers avec des touches jaunes ne peuvent pas être modifiés et ne seront pas affichés dans le dossier du projet. Bien entendu, ces fichiers générés ne nécessitent généralement pas de modification. De plus, certains fichiers ont également un signe +, qui peut être développé, ce qui reflète la relation d'inclusion du fichier et est pratique pour afficher les dépendances de fichiers.

Cela peut être un peu différent du "modèle de projet" que vous utilisez, car certains projets sont créés par une ancienne version de keil, peuvent ne pas utiliser de packages logiciels ou de fonctions RTE (c'est-à-dire Run-Time Environment), ou sont créés sur la base de CubeMX, tel que ceci :
insérez la description de l'image ici

Le contenu du répertoire du projet actuel :
insérez la description de l'image ici
les trois derniers sont des fichiers de projet, qui ont été introduits auparavant, et les dossiers sont :

  • RTE : ce dossier contient des fichiers de configuration, des fichiers d'en-tête et des fichiers source pour vos composants logiciels sélectionnés. Ici, vous pouvez revoir ou modifier les paramètres et le code de votre composant.
  • DebugConfig : Ce dossier contient vos fichiers de configuration de débogage, tels que les paramètres cibles, les paramètres du débogueur, les paramètres de trace, etc. Les paramètres de débogage peuvent être consultés ou modifiés ici.
  • Listings : Ce dossier contient le code assembleur, la table des symboles, le fichier de mappage, etc. généré après la compilation du projet. Vous pouvez consulter ou analyser les résultats de votre compilation ici.
  • Objets : Ce dossier contient les fichiers objets, les fichiers bibliothèques, les fichiers exécutables, etc. générés après la compilation du projet.

( 5) Écrire le programme utilisateur

  • Vous pouvez créer un nouveau dossier programme utilisateur dans le dossier projet, par exemple User;

  • Créez ensuite un nouveau fichier, enregistrez-le en tant que fichier .c et enregistrez-le dans le fichier tout à l'heure ;

  • Écrire du code ;

  • Ajoutez-les à keil :

    • Cliquez Manage project itemspour créer un nouveau groupe et ajoutez le fichier source tout de suite, comme indiqué sur la figure :
      insérez la description de l'image ici
    • Dans option for target, cochez Créer hexdes fichiers

( 6) Télécharger

Je l'ai téléchargé avec ST-Link, sinon vous pouvez lire mon article précédent :

[STM32] Mode Bootstrap et téléchargement du programme (exemple ST-Link et port série)

3. Questions nécessitant une attention particulière

3.1 Il me semble qu'il me manque certains paramètres ?

Dans cet article, j'utilise STM32F103C8T6.Dans le projet, j'ai simplement réalisé le contrôle marche-arrêt de la lumière LED. Il n'y a qu'un seul fichier mian.c ci-dessus.
insérez la description de l'image ici

Mon aperçu complet du flux de travail est :

  1. Nouvelle construction, sélectionnez modèle;
  2. Configurer RTE ;
  3. La programmation;
  4. ajouter le programme à keil ;
  5. Choisissez de générer un fichier hexadécimal ;
  6. compiler;
  7. Définir le téléchargement ST-Link ;
  8. Télécharger.

Depuis que j'ai créé le projet à l'aide de RTE, RTE gère automatiquement les chemins d'inclusion et les fichiers de bibliothèque nécessaires pour assurer un processus de compilation et de liaison correct. En fonction de l'appareil et des pilotes de périphériques que vous avez sélectionnés dans l'assistant de configuration RTE, il générera automatiquement les fichiers de configuration correspondants, y compris les chemins d'inclusion corrects. RTE générera également automatiquement les symboles de processeur et les définitions de macro correspondants en fonction de l'appareil et des pilotes de périphériques que vous choisissez.

Cela dit, ces paramètres sont généralement laissés seuls :
insérez la description de l'image ici

3.2 Sélection RTE

Si vous souhaitez utiliser la librairie standard , choisissez Device--StdPeriph Driversles périphériques suivants
insérez la description de l'image ici
Si vous souhaitez utiliser la librairie HAL, choisissez : CMSIS Driversl'API périphérique suivante, GPIO choisissez Device

insérez la description de l'image ici


CMSIS DriverIl s'agit ARMd'une norme d'interface de pilote commune définie par la société pour le contrôle périphérique de divers microcontrôleurs Cortex-M. Il fournit une interface de programmation et une portabilité cohérentes, permettant de partager et de réutiliser le code du pilote entre les microcontrôleurs de différents fournisseurs. STMicroelectronics fournit une implémentation de pilote conforme au pilote CMSIS pour la compatibilité avec ses microcontrôleurs de la série STM32.

HAL (Hardware Abstraction Layer)est STMicroelectronicsune bibliothèque de haut niveau fournie pour la programmation périphérique des microcontrôleurs STM32. HAL fournit des fonctions fonctionnelles et des options de configuration pour des périphériques spécifiques de la série STM32, ce qui permet aux développeurs d'écrire et de contrôler relativement facilement des périphériques. HAL est situé au-dessus de CMSIS Driver et utilise l'interface sous-jacente fournie par CMSIS Driver pour contrôler les périphériques.

stdPeriph Driversest STMicroelectronicsune bibliothèque de pilotes de périphériques héritée fournie par . Les pilotes stdPeriph fournissent une API de haut niveau pour rendre la programmation relativement simple, mais pour différentes séries de microcontrôleurs STM32, leurs fonctions périphériques et leurs définitions de registre peuvent être différentes.

annexe, code

Clignotement simple de la LED, bibliothèque standard :

Si les caractères chinois sont brouillés après la copie, modifiez simplement l'encodage en 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--); //循环减计数
}

Effet:

insérez la description de l'image ici



Écrivez je t'aime pour toujours à la fin du poème ~

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43764974/article/details/131754334
conseillé
Classement