Mise en route Étudier STM32 ou gérer la lumière intelligemment

Petite introduction


Une fois, lorsque je suis entré dans le prochain appartement loué, j'ai rencontré un certain inconvénient qui était assez ennuyeux: l'interrupteur d'éclairage dans la pièce principale s'est avéré être derrière l'armoire murale, qui était vissée au mur, et son réarrangement était impossible car cela a pris beaucoup de temps et d'efforts. Je voulais beaucoup résoudre ce problème et une pensée m'est venue à l'esprit: faire une télécommande pour contrôler l'éclairage!

C'est avec l'idée de créer ma propre télécommande pour contrôler la lumière dans la pièce que ma passion pour l'électronique, les microcontrôleurs et divers appareils radio a commencé.

Liste d'articles:
  1. Mise en route Étudier STM32 ou gérer la lumière intelligemment
  2. Mise en route STM32: opérations sur les bits
  3. Mise en route STM32: Que sont les registres? Comment travailler avec eux?


Après cela, j'ai commencé à étudier ce sujet, à me familiariser avec les bases de l'électronique, des exemples d'appareils et à apprendre comment les gens implémentent de tels appareils. Après avoir cherché des informations sur la façon de commencer à étudier les microcontrôleurs, j'ai découvert ce qu'est l'Arduino, ce avec quoi ils mangent, comment travailler avec eux. La solution facile semblait très attrayante, car pour autant que je sache à l'époque, le code va être construit une ou deux fois. Mais ayant conclu que je ne savais pas ce qui se passait à l'intérieur du microcontrôleur en dehors du cadre des croquis Arduino, j'ai décidé de chercher une option plus intéressante, ce qui impliquait une étude approfondie et une immersion dans la jungle de la technologie des microcontrôleurs.

L'entreprise dans laquelle je travaille dispose d'un département de développement, et j'ai décidé de contacter les ingénieurs pour m'orienter sur la bonne voie et montrer par où commencer à résoudre mon problème. J'étais fortement découragé d'étudier l'Arduino et j'avais entre les mains une écharpe verte inconnue et incompréhensible sur laquelle il y avait des inscriptions, des lettres, divers composants électroniques.


Tout cela pour moi à ce moment-là semblait incompréhensiblement compliqué, et je suis même venu à une certaine confusion, mais je n'allais pas refuser d'exécuter la tâche. J'ai donc fait la connaissance de la famille de microcontrôleurs STM32 et de la carte STM32F0-Discovery, après avoir étudié ce que j'aimerais empiler mon appareil pour les besoins dont j'ai besoin.

À ma grande surprise, une si grande communauté, des articles, des exemples, divers matériaux sur STM n'étaient pas dans la même abondance que pour Arduino. Bien sûr, si vous recherchez, il existe de nombreux articles "pour les débutants" qui décrivent comment et par où commencer. Mais à ce moment-là, il me semblait que tout cela était très compliqué, beaucoup de détails qui étaient intéressants pour l'esprit curieux d'un débutant, les choses n'étaient pas dites. Bien que de nombreux articles aient été qualifiés d '«apprentissage pour les plus petits», il n'a pas toujours été possible d'obtenir le résultat souhaité avec leur aide, même avec des exemples de code prêts à l'emploi. C'est pourquoi j'ai décidé d'écrire une courte série d'articles sur la programmation sur STM32 à la lumière de la mise en œuvre d'une idée spécifique: un panneau de commande d'éclairage dans la pièce.

Pourquoi pas AVR / Arduino?


Anticipant les déclarations selon lesquelles il serait trop tôt pour un débutant inexpérimenté de se lancer immédiatement dans l'étude d'un MK aussi complexe que le STM32 - je vais vous expliquer pourquoi j'ai décidé de suivre cette voie sans entrer dans la famille de processeurs Atmel et sans me familiariser avec elle, sans même envisager Arduino comme une option .

Premièrement, la relation prix-fonctionnalité a joué un rôle décisif, la différence est visible même entre l'un des MK les moins chers et les plus simples de ST et l'ATMega plutôt «gros»:


Après avoir vu des différences importantes entre le prix et les capacités de l'AVR et du STM32 - j'ai décidé que je n'utiliserais pas l'AVR dans mon développement =)

Deuxièmement, j'ai déjà essayé par moi-même de déterminer l'ensemble des compétences que j'aurais reçues au moment où j'atteindrais le résultat souhaité. Au cas où je déciderais d'utiliser Arduino - il me suffirait de copier les bibliothèques finies, de mettre un croquis et le tour est joué. Mais comprendre comment fonctionnent les bus numériques, comment fonctionne un émetteur radio, comment tout est configuré et utilisé - dans cette situation, je ne serais jamais venu. Pour moi, j'ai choisi le chemin le plus difficile et le plus épineux, de sorte que sur le chemin de l'atteinte du résultat - j'obtienne le maximum d'expérience et de connaissances.

Troisièmement, tout STM32 peut être remplacé par un autre STM32, mais avec de meilleures fonctionnalités. De plus, sans changer le circuit de commutation.

Quatrièmement, les personnes ayant un développement professionnel sont plus susceptibles d'utiliser des MK 32 bits, et le plus souvent, ce sont des modèles de NXP, Texas Instruments et ST Microelectronics. Oui, et je pouvais à tout moment aller voir mes ingénieurs du département de développement et savoir comment résoudre un problème particulier et obtenir des conseils sur les problèmes qui m'intéressent.

Pourquoi commencer à explorer les microcontrôleurs STM32 avec une carte Discovery?


Comme vous l'avez déjà compris, nous allons commencer notre connaissance et l'étude du microcontrôleur STM32, chers lecteurs, avec l'utilisation de la carte Discovery. Pourquoi Discovery, et non sa propre carte?

  1. Sur toute carte Discovery, il y a un programmeur / débogueur ST-LINK intégré qui se connecte à l'ordinateur via USB et peut être utilisé à la fois pour programmer le microcontrôleur sur la carte et les périphériques externes en retirant / installant les cavaliers correspondants. Autrement dit, un avantage à tout - nous économisons également de l'argent en obtenant une solution deux-en-un: un microcontrôleur et un programmeur.
  2. Les cartes de découverte ont un câblage complet de toutes les broches directement du microcontrôleur aux broches de la carte. Pour plus de commodité, j'ai collé Discovery dans les deux mêmes cartes de prototypage.
  3. 3. Sur la carte, il y a toujours un certain nombre de périphériques de toutes sortes, par exemple des accéléromètres, des microphones, des écrans, des capteurs et bien d'autres. Différentes cartes Discovery ont différentes options de kit de carrosserie. Si quelqu'un est intéressé, vous pouvez en savoir plus sur le site Web du fabricant.

De quoi avons-nous besoin pour le développement en plus de la carte Discovery?


Dans notre travail avec la carte Discovery, nous aurons besoin d'un certain nombre de choses irremplaçables dont nous ne pouvons pas nous passer:

  1. Circuit imprimé pour voir où, où et ce qui est connecté. Vous pouvez prendre le circuit sur la page du fabricant de votre carte mère dans la section Schematic Pack. Vous pouvez télécharger les schémas en faisant défiler une page un peu plus bas dans le bloc indiqué dans l'image:
  2. Fiche technique sur notre microcontrôleur pour qu'à tout moment vous puissiez voir le brochage, les spécifications, les paramètres et autres informations nécessaires au travail. Dans mon cas, c'est STM32F051R8T6 . Le lien de la fiche technique se trouve dans le titre de la page:
  3. Nous avons également besoin du manuel de référence sur notre microcontrôleur. Il s'agit d'un document dans lequel des méthodes et des approches pour travailler avec le noyau MK, avec son bloc d'horloge, avec des périphériques, etc. sont décrites en détail. Il contient également une description de tous les registres MK, de toutes les options et paramètres de MK et des périphériques. C'est probablement le fichier le plus important sans lequel il serait très difficile de comprendre comment et ce qui fonctionne à l'intérieur du MK. Vous pouvez télécharger le fichier à partir du lien sur la page du microcontrôleur:
  4. Et enfin, nous devons établir un environnement de développement dans lequel nous pouvons créer des programmes pour notre MK et compiler et flasher calmement nos programmes. À un moment donné, j'ai essayé presque tous les IDE les plus populaires et j'ai opté pour Keil uVision 5. À mon avis, cet environnement de développement m'a semblé le plus pratique et le plus facile à apprendre. Le débogueur intégré, des bibliothèques de bas niveau prêtes à l'emploi et faciles à connecter, un grand nombre d'exemples et une interface de travail bien organisée et un espace IDE ont été les facteurs décisifs qui ont influencé mon choix. Vous pouvez télécharger cet IDE sur le site officiel , mais une simple inscription est requise:. Il y a vraiment une petite restriction sur la taille du firmware téléchargé en 32 Ko car Cet IDE est payé. Mais ce sera plus que suffisant pour nous. Nous aurons besoin de MDK-Arm:

Commençons par la configuration initiale et la préparation de l'IDE pour le travail!


Après avoir téléchargé le fichier d'installation de notre IDE, vous pouvez procéder à l'installation. Suivez les instructions du programme d'installation pour terminer le processus d'installation. Une fois que tous les fichiers nécessaires au fonctionnement ont été copiés, une fenêtre pour le programme d'installation du logiciel pour développer le Pack Installer apparaît. Ce programme d'installation contient des bibliothèques de bas niveau, des middlewares, des exemples de programmes régulièrement mis à jour et mis à jour.


Pour commencer à travailler avec notre carte, nous devons installer un certain nombre de packages nécessaires au travail et nous devons trouver un microcontrôleur avec lequel nous travaillerons. Vous pouvez également utiliser la recherche en haut de la fenêtre. Après avoir trouvé notre MK, cliquez dessus dans la seconde moitié de la fenêtre et nous devons installer la liste de bibliothèques suivante:

  1. Keil :: STM32F0xx_DFP est un progiciel complet pour une famille spécifique de microcontrôleurs, y compris des manuels, des fiches techniques, des fichiers SVD, des bibliothèques du fabricant.
  2. ARM :: CMSIS est un package de Cortex Microcontroller Software Interface Standard, qui comprend un ensemble complet de bibliothèques ARM pour prendre en charge le noyau Cortex.
  3. Keil :: ARM_Compiler est le dernier compilateur pour ARM.

Après avoir installé les packages requis, vous pouvez procéder à la configuration de l'EDI et de notre débogueur / programmeur. Pour ce faire, nous devons ouvrir la fenêtre principale de Keil et créer un nouveau projet.

Pour ce faire, allez dans le menu Projet -> Nouveau projet uVision et sélectionnez le dossier dans lequel nous enregistrerons notre projet.

Après Keil nous demandera quel MK sera utilisé dans le projet. Sélectionnez le MK souhaité et cliquez sur OK .


Et une fenêtre apparaîtra à nouveau, déjà familière pour nous, dans laquelle nous pouvons connecter les modules d'intérêt au projet. Pour notre projet, nous avons besoin de deux modules:

  1. Le noyau de la bibliothèque CMSIS , dans lequel les paramètres, les adresses d'enregistrement et bien plus de ce qui est nécessaire pour le travail de notre MK sont déclarés.
  2. Fichier de démarrage , qui est responsable de l'initialisation de MK au démarrage, de la déclaration des vecteurs et des gestionnaires d'interruption, et bien plus encore.

Si toutes les dépendances du plug-in sont satisfaites, le gestionnaire nous le signalera en vert:


Après avoir appuyé sur le bouton OK, nous pouvons commencer à créer notre projet.

Pour configurer les paramètres du projet et configurer notre programmeur, faites un clic droit sur Target 1 pour ouvrir le menu correspondant.


Dans le menu principal du projet, définissez le paramètre Xtal sur 8,0 MHz . Ce paramètre est responsable de la fréquence de fonctionnement de l'oscillateur à quartz de notre MK:


Ensuite, nous configurons notre programmeur / débogueur. Dans la même fenêtre, cliquez sur l'onglet Débogage et sélectionnez le paramètre Débogueur ST-Link dans le champ Utiliser et accédez aux paramètres:


Dans les paramètres, nous devrions voir le modèle de notre ST-Link installé sur la carte, son numéro de série, la version de HW et IDCODE MK que nous flasherons:



Pour plus de commodité, vous pouvez configurer le paramètre responsable du fait que le MK est réinitialisé automatiquement après le clignotement. Pour ce faire, cochez le champ Réinitialiser et exécuter .


Après cela, vous devez configurer une autre option qui nous permettra d'écrire des commentaires en russe sur le code de nos projets. Nous cliquons sur le bouton Configuration et dans le menu qui s'ouvre, sélectionnez Russian Windows-1251 dans le champ Encoding .


C’est tout. Notre IDE et notre programmeur sont prêts à partir!

Keil dispose d'un navigateur de projet pratique dans lequel nous pouvons voir la structure du projet, les documents de référence nécessaires pour le travail, y compris ceux que nous avons déjà téléchargés sur notre ordinateur auparavant (schéma de découverte, fiche technique, manuel de référence), liste fonctions utilisées dans le projet et modèles pour l'insertion rapide de différentes constructions de langage d'un langage de programmation.


Renommez le dossier dans la structure du projet du groupe source 1 en application / utilisateur , indiquant ainsi que nous aurons les fichiers du programme utilisateur dans ce dossier:


Ajoutez le fichier de programme principal via le navigateur de projet en exécutant la commande Ajouter un nouvel élément au groupe «App / Utilisateur» .


Vous devez sélectionner le fichier C (.c) dans la liste et lui attribuer le nom main.c :


Le fichier créé sera automatiquement ajouté à la structure du projet et s'ouvrira dans la fenêtre principale du programme.

Eh bien, maintenant nous pouvons commencer à créer notre programme.

Tout d'abord, vous devez connecter le document d'en-tête de notre famille de microcontrôleurs à notre fichier exécutable. Ajoutez les lignes suivantes au fichier main.c , ce programme fera clignoter nos LED alternativement:

/*      */
#include "stm32f0xx.h"

/*    */
int main(void)
{
	/*     GPIO */
	RCC->AHBENR |= RCC_AHBENR_GPIOCEN;
	
	/*     PC8  PC9  Output*/
	GPIOC ->MODER = 0x50000;
	
	/*  Output type   Push-Pull */
	GPIOC->OTYPER = 0;
	
	/*      Low */
	GPIOC->OSPEEDR = 0;
	
	while(1)
	{
		/*   PC8,  PC9 */
		GPIOC->ODR = 0x100;
		for (int i=0; i<500000; i++){}	//  
					
		/*   PC9,  PC8 */
		GPIOC->ODR = 0x200;
		for (int i=0; i<500000; i++){}	//  
	}		
}

, , . :


Build ( F7) , , :


Load ( F8) :


, .


! STM32 ! , , , Discovery. )

:
  1. STM32 -
  2. STM32:
  3. STM32: ? ?

Source: https://habr.com/ru/post/fr406839/


All Articles