Bonjour.Comprenant la programmation des microcontrôleurs Stm32, j'ai décidé d'essayer d'installer (système d'exploitation en temps réel) RTOS - FreeRTOS et j'ai rencontré un certain nombre de difficultés. Il existe de nombreux articles sur Internet, mais je n'ai pas trouvé d'instructions claires, je demande donc à tous ceux qui s'intéressent au chat.Donc, pour commencer, décidons de ce que vous devez avoir:- Carte de débogage Stm32VLDiscovery
- IDE Keil ARM 5 et supérieur installé
- Le désir de trier le nouveau
Si vous avez déjà développé quelque chose pour la famille STM32F1x à Keil, vous pouvez ignorer ce paragraphe. Vous devez d'abord installer des packages de développement pour la famille STM32F1x, cela se fait comme suit:- Nous lançons Keil.
- Cliquez sur le bouton Pack Installer dans le panneau

- Dans la fenêtre qui s'ouvre, cliquez sur le bouton Rechercher les mises à jour (nous attendons la mise à jour de la liste des packages)
- Dans l'arborescence, sélectionnez STMicroelectronics-> STM32F1 Series-> STM32F100 et installez tous les packages
Ceci termine la préparation de l'environnement de développement.Nous procédons directement à la création du projet en utilisant FreeRTOS.La première chose à faire est de télécharger la dernière distribution RTOS sur le site officiel www.freertos.org , au moment de la rédaction, la dernière version était FreeRTOSv9.0.0. Nous avons donc une archive impressionnante, décompressez-la n'importe où (je dirai tout de suite que nous n'en avons pas besoin à 99%, alors n'ayez pas peur de la taille du dossier résultant, j'ai plus de 200 Mo).Nous devons maintenant créer un nouveau projet dans Keil.
Je l'ai nommé FreeRTOSDemo, vous pouvez choisir n'importe quel nom approprié, l'essentiel est qu'il n'y ait pas d'espaces et de lettres russes sur le chemin du projet.Maintenant, nous devons choisir notre puce, j'ai testé sur la carte de débogage STM32VLDiscovery avec la puce STM32F100RB, alors je l'ai choisie.
Après avoir choisi une puce, vous devez sélectionner les bibliothèques que nous utiliserons. Nous aurons besoin de la bibliothèque CMSIS et de StdPeriph. Les figures ci-dessous montrent la sélection minimale de composants afin de vérifier le fonctionnement du RTOS et de clignoter avec des diodes (cela s'applique à la bibliothèque StdPeriph, CMSIS est requis).

Nous avons donc créé le projet, il ressemble à ceci:
Ensuite, pour plus de commodité, nous créons plusieurs groupes dans le projet, de sorte que plus tard il y aura un méli-mélo de fichiers.
Tout est prêt pour copier les fichiers RTOS dans le projet. Créez un dossier FreeRTOS dans le dossier du projet.À partir du dossier FreeRTOSv9.0.0 \ FreeRTOS \ Source \, copiez tous les fichiers * .s dans le dossier FreeRTOS créé. Là, nous copions le dossier d'inclusion.À partir du dossier FreeRTOSv9.0.0 \ FreeRTOS \ Source \ portable \ RVDS \ ARM_CM3 \, copiez les fichiers * .s et * .h aux emplacements correspondants dans le dossier FreeRTOS de notre projet.Dans le dossier FreeRTOSv9.0.0 \ FreeRTOS \ Source \ portable \ MemMang \, copiez le fichier heap_2.c.À partir du dossier FreeRTOSv9.0.0 \ FreeRTOS \ Demo \ CORTEX_STM32F103_Keil \ copiez le fichier FreeRTOSConfig.h.Après toutes les manipulations, ce qui suit devrait se produire:
Ensuite, nous devons ajouter les fichiers aux groupes appropriés dans le projet, et créer également le fichier main.cc avec le texte principal du programme.En conséquence, la structure de projet suivante devrait être obtenue.
Pour que le projet compile dans ses paramètres, vous devez spécifier tous les chemins d'accès aux fichiers * .h, ainsi que d'enregistrer la directive USE_STDPERIPH_DRIVER.
Reste maintenant à modifier plusieurs lignes dans le fichier FreeRTOSConfig.h, pour un fonctionnement correct:#define configCPU_CLOCK_HZ ( ( unsigned long ) 72000000 )
#define configCPU_CLOCK_HZ ( ( unsigned long ) 24000000 )
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 17 * 1024 ) )
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 5 * 1024 ) )
Et ajoutez les lignes suivantes après #define FREERTOS_CONFIG_H#define xPortSysTickHandler SysTick_Handler
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
Après cela, dans le fichier main.c, nous écrivons le programme le plus simple pour les LED clignotantes.#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
GPIO_InitTypeDef port;
uint8_t state;
void vFreeRTOSInitAll()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_StructInit(&port);
port.GPIO_Mode = GPIO_Mode_Out_PP;
port.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_8;
port.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &port);
}
void vLedTask (void *pvParameters)
{
while(1)
{
if (state == 0)
{
GPIO_SetBits(GPIOC,GPIO_Pin_9);
GPIO_ResetBits(GPIOC,GPIO_Pin_8);
state = 1;
vTaskDelay(500);
}
else
{
GPIO_ResetBits(GPIOC,GPIO_Pin_9);
GPIO_SetBits(GPIOC,GPIO_Pin_8);
state = 0;
vTaskDelay(500);
}
}
vTaskDelete(NULL);
}
int main(void)
{
vFreeRTOSInitAll();
xTaskCreate(vLedTask,(signed char*)"LedTask", configMINIMAL_STACK_SIZE,
NULL, tskIDLE_PRIORITY + 1, NULL);
vTaskStartScheduler();
}
Vous pouvez maintenant assembler le projet et remplir le firmware dans le microcontrôleur, après le redémarrage, observez les LED clignotantes.