Vous êtes sur la page 1sur 17

 

Blink Led avec keil de microcontrôleur Stm32f103c8 et


Stmcubemx

Par EG Projects

Après avoir beaucoup travaillé avec des microcontrôleurs 8 bits et appris tous les protocoles et
fonctions qu'ils offrent, j'ai pensé à passer aux microcontrôleurs 32 bits. J'ai décidé d'opter pour
des processeurs arm 32 bits, en raison de leur popularité sur le marché. J'ai choisi la série de
processeurs arm cortex-m3 pour mes nouveaux projets de loisirs/d'apprentissage. La raison du
choix de la série arm cortex-m3 est que les processeurs cortex-m3 sont spécialement conçus
pour les applications embarquées connectées, et les microcontrôleurs construits avec cette
série sont utilisés dans de nombreux projets/applications/produits embarqués de niveau
intermédiaire. Après tant de recherches sur Google, j'ai finalement pris la décision d'aller de
l'avant avec les microcontrôleurs stm32. Stm32 est une famille de microcontrôleurs 32 bits
proposée par STMicroelectronics . Les microcontrôleurs Stm32 sont construits autour de
Cortex-M7 , Processeurs Cortex-M4F , Cortex-M3 , Cortex-M0+ et Cortex-M0 .

Après avoir décidé d'utiliser stm32, j'ai commencé à suivre des tutoriels initiaux sur la façon de
démarrer avec stm32. J'ai trouvé beaucoup d'informations sur le démarrage, mais aucune n'est
bien organisée. J'ai donc décidé de faire une série de tutoriels sur la prise en main des
microcontrôleurs stm32. Dans toute cette série, je discuterai de tous les protocoles/fonctions
proposés par les microcontrôleurs stm32. Je vais présenter un exemple pratique de
protocole/interface/fonction simple avec code source et schéma de circuit
.
Il existe de nombreux IDE (environnements de développement intégrés) qui prennent en charge
la série stm32 et vous pouvez utiliser n'importe lequel d'entre eux pour programmer votre
microcontrôleur stm32. Certains Ide sont Coocox, keil, mBed, Attolic, microC pour Arm. Je
décide d'aller avec keil et stm32CubeMx. Keil vous donne une connaissance approfondie du
microcontrôleur et de son interface. Si vous ne voulez pas aller dans les profondeurs et que vous
voulez un morceau de gâteau, optez pour MikroElectronica microC pour Arm. Il est très facile de
travailler avec microC ide, il contient de nombreux exemples et bibliothèques dont vous n'avez
qu'à appeler les fonctions et tout est fait. Stm32CubeMx est un configurateur de périphérique de
microcontrôleur. En utilisant stm32cube, vous n'avez pas besoin d'écrire de code de
configuration pour votre microcontrôleur stm32. C'est une plate-forme visuelle où vous pouvez
faire en sorte que les broches du microcontrôleur entrent, sortent, activer les pull-ups et pull-
down peut définir visuellement la fréquence de fonctionnement du microcontrôleur et bien plus
encore. Après la configuration visuelle, vous pouvez générer du code pour la configuration que
vous avez effectuée. Je préfère travailler avec stmCube car il est fourni officiellement par
 
STMicroelectronics et il est bon de travailler avec les éléments fournis par le propriétaire.

Remarque : Stm32CubeMx n'est pas un Ide mais un gestionnaire de configuration. Vous y faites la
configuration de votre microcontrôleur stm32, puis vous générez du code pour la configuration que vous avez
faite à utiliser avec n'importe quel autre ide. Vous pouvez générer directement le projet keil ide avec
stmCubeMx en sélectionnant l'option de stmCubeMx pour traduire la configuration dans le projet keil ide.
Installation de StmCubeMx et Keil MDK ARM

L'installation de Keil Ide est assez simple. Téléchargez le kit MDK ARM, il contient le keil Ide, vous
n'avez pas besoin de l'ide pour l'installer séparément. Téléchargez simplement le fichier à partir
du lien et installez l'ide. ​http://www2.keil.com/mdk5 . Arm mdk est disponible dans de
nombreuses éditions, la dernière est mdk5. J'utilise mdk5 pour mes projets et ce tutoriel est
également basé sur mdk5 et keil uvision-5 ide.
L'installation du StmCubeMx est également simple. Téléchargez le StmCube à partir du lien
http://www.st.com/en/development-tools/stm32cubemx.html. Vous pourriez être invité à vous
connecter. Connectez-vous et vous êtes leur. Une fois StmCubeMx installé, vous devez
maintenant installer les packages pour chaque série stm32 ou pour les séries avec lesquelles
vous souhaitez travailler. StmCubeMx et les packages de la série stm32 sont deux choses
différentes. Le package pour chaque série stm32 doit être installé séparément. Il s'agit
également d'une option du logiciel StmCubeMx qui installe les packages de la série. C'est sous
Aide> Installer de nouvelles bibliothèques. Puisque nous commençons avec stm32f103, nous
devons donc installer le package pour la série stm32f1. Le schéma ci-dessous explique bien
l'installation des packages.
 

Installation des pilotes/packages stm32f1 pour StmCubeMx

J'ai acheté un module stm32f103c8x pas cher chez aliexpress. Cela m'a coûté environ 4,5 $ avec
la livraison gratuite au Pakistan. L'expédition a pris environ 1,5 mois 45 jours. La carte est cool et
offre presque toutes les fonctionnalités nécessaires pour démarrer avec les microcontrôleurs
stm32. Le brochage de la carte est indiqué ci-dessous.

Stm32f103 broches de la carte de développement bon marché et fonctionnalités offertes

Clignotement led avec stm32f103 keil et stmcubemx

Le module supérieur a une led connectée à la broche #13 du port-c. En commençant, nous
allons le faire clignoter. Les broches du microcontrôleur Stm32 offrent plusieurs fonctionnalités
sur une seule broche. En sélectionner un et en désactiver d'autres doit être manipulé avec soin.
Les broches d'E/S des microcontrôleurs Stm32 peuvent être utilisées dans cinq modes
Mode d'entrée
Mode analogique
Mode de sortie

 Mode de fonctionnement alternatif 


Lignes d'interruption/d'événement externes

Pour notre propos, nous allons utiliser la broche #13 du port-c comme sortie. Presque toutes les
broches stm32 ont des résistances internes pull up et pull down. Comme nous n'utilisons pas le
gpio en mode d'entrée, nous n'utilisons donc pas de résistances de tirage vers le haut et vers le
bas. Les broches Stm32 peuvent fonctionner à différentes fréquences, nous allons faire
fonctionner la broche à basse fréquence. Les broches Stm32 peuvent également être initialisées
comme basses ou hautes après le démarrage. J'ai fait la broche #13 basse.

Remarque : Je vais utiliser l'oscillateur RC interne de 8 Mhz du microcontrôleur. La carte


supérieure a un cristal externe de 8 MHz mais je ne vais pas l'utiliser. Dans les tutoriels
ultérieurs, nous l'utiliserons.
Création d'un nouveau projet dans StmCubeMx

Créer un nouveau projet est simple. Allez dans Fichier> Nouveau projet. Une fenêtre apparaîtra
pour sélectionner votre série de microcontrôleurs, vos lignes de série et votre package. Après
avoir sélectionné le package, cliquez sur le microcontrôleur que vous utilisez pour votre projet.
Dans notre cas, c'est STM32f103C8Tx.
StmCubeMx créant un nouveau projet

Après avoir sélectionné le microcontrôleur stm32f103c8, une fenêtre apparaîtra contenant le


diagramme mcu. Cliquez sur la broche n ° 13 et définissez le gpio comme sortie.
 

StmCubeMx Sélection du microcontrôleur stm32f103c8 gpio asoutput

Pour configurer le gpio, cliquez sur l'onglet de configuration puis sur le bouton GPIO.

Configuration de Gpio de stm32f103 dans stmcubemx


Cliquez sur les noms des broches pour faire apparaître ses paramètres. Dans la fenêtre de
réglage, définissez le mode gpio, le niveau de sortie, la vitesse d'horloge et donnez un nom à
gpio. Appuyez sur appliquer pour appliquer pour appliquer les modifications.

 

Configuration Stmcube Gpio

Le nom que nous avons donné à la broche apparaît maintenant sur la broche. Nous pouvons
utiliser le gpio dans le code avec ce nom. Il est maintenant temps de générer le code. Cliquez sur
l'icône d'engrenage pour générer du code.
nom gpio stmcubemx modifié et génération de code

Une fenêtre apparaît après avoir cliqué sur l'icône d'engrenage. Nommez le projet et sélectionnez
l'emplacement des fichiers du projet. Puisque nous utilisons MDK-ARM V5, dans ToolChain/IDE,
sélectionnez
 mdk-arm. Cliquez sur OK pour générer le code. 

emplacement du projet stmcube et gestion du code keil

Cliquez sur OK après que tous les paramètres et le code seront générés à l'emplacement que
vous avez spécifié. Quatre dossiers apparaîtront à l'emplacement. MDK-ARM contient le code
keil ide. Les fichiers de projet stmcubemx sont également présents à l'emplacement où le fichier
d'extension .ico est de stmcubemx. Ouvrez le dossier MDK-ARM, il contient un fichier. Le fichier
avec l'extension .uvprojx est un fichier keil ide. Vous pouvez maintenant ouvrir le fichier pour
apporter d'autres modifications au code.
 

fichiers stmcube et keil ide

StmCubeMx traduit le code qui contient les fonctions des bibliothèques HAL avec lui. HAL sont
des bibliothèques publiées par stm pour fonctionner avec ses microcontrôleurs. Les fonctions
des bibliothèques HAL et leur fiche technique de définition sont disponibles sur
http://www.st.com/en/development-tools/stm32cubemx.html Le fichier de 19 Mo du manuel de
l'utilisateur est en fait le document d'explication de la définition des fonctions des bibliothèques
HAL . Le code généré par stmcubemx contient les instructions répertoriées ci-dessous. J'écris le
sens de chaque énoncé avec.
1
2 #include "stm32f1xx_hal.h" //This header contains all the functions prototypes for the HA
3 void SystemClock_Config(void); //Initizing System Clock 8Mhz
4 void Error_Handler(void); //Error Handler- We are not going to use it.
5 static void MX_GPIO_Init(void); //GPIO Initialization function
6 HAL_Init(); //Initialize the Hal Drivers
7 HAL_GPIO_TogglePin(Led_GPIO_Port,Led_Pin); //Toggle Gpio
8 HAL_Delay(1000); //Delay 1second
9 __HAL_RCC_GPIOC_CLK_ENABLE(); //Enable GPIO Clock
10 HAL_GPIO_WritePin(Led_GPIO_Port, Led_Pin, GPIO_PIN_RESET); //Initialize the GPIO Pin Out
11 GPIO_InitStruct.Pin = Led_Pin; //Pin name we give in StmCubeMx Configura
12 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //Pin Mode Puch Pull
13 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; //GPIO speed frequency Low
14 HAL_GPIO_Init(Led_GPIO_Port, &GPIO_InitStruct); //Pass the setting perimeters for initi
getting-started-with-stm32f103.c hosted with ❤ by GitHub view raw

Pour faire clignoter la led, ajoutez les lignes à la fonction vide. Rappelez-vous que stmcube ne
génère que le code de configuration. Nous devons écrire notre logique par nous-mêmes. Ainsi,
 la fonction while(1), ajoutez la fonction bascule.
dans 
​HAL_GPIO_TogglePin (Led_GPIO_Port,Led_Pin);
HAL_Delay(1000);

Code led clignotant Stm32

1
2 #include "main.h"
3 #include "stm32f1xx_hal.h" //This header contains all the functions prototypes
4 //for the HAL module driver.
5
6 void SystemClock_Config(void); //Initizing System Clock 8Mhz
7 void Error_Handler(void); //Error Handler- We are not going to use it.
8 static void MX_GPIO_Init(void); //GPIO Initialization function
9
10 int main(void)
11 {
12
13 HAL_Init(); //Initialize the Hal Libraries
14
15 /* Configure the system clock */
16 SystemClock_Config();
17
18 /* Initialize all configured peripherals */
19 MX_GPIO_Init(); //Calling GPIO initializing functions
20
21 /* USER CODE BEGIN WHILE */
22 while (1)
23 {
24 HAL_GPIO_TogglePin(Led_GPIO_Port,Led_Pin); //Toggle Gpio
25 HAL_Delay(1000); //Delay 1 se
26 }
27

28 } 
29
30 /** System Clock Configuration
31 */
32 void SystemClock_Config(void)
33 {
34
35 RCC_OscInitTypeDef RCC_OscInitStruct;
36 RCC_ClkInitTypeDef RCC_ClkInitStruct;
37
38 /**Initializes the CPU, AHB and APB busses clocks
39 */
40 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; //Using internal 8Mhz osci
41 RCC_OscInitStruct.HSIState = RCC_HSI_ON;
42 RCC_OscInitStruct.HSICalibrationValue = 16;
43 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
44 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
45 {
46 Error_Handler();
47 }
48
49 /**Initializes the CPU, AHB and APB busses clocks
50 */
51 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
52 |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
53 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
54 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
55 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
56 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
57
58 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
59 {
60 Error_Handler();
61 }
62
63 /**Configure the Systick interrupt time
64 */
65 HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
66
67 /**Configure the Systick
68 */
69 HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
70
71 /* SysTick_IRQn interrupt configuration */
72 HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
73 }
74

75 static void MX_GPIO_Init(void) 
76 {
77
78 GPIO_InitTypeDef GPIO_InitStruct;
79
80 /* GPIO Ports Clock Enable */
81 __HAL_RCC_GPIOC_CLK_ENABLE(); //Enable GPIO Clock
82
83 /*Configure GPIO pin Output Level */
84 HAL_GPIO_WritePin(Led_GPIO_Port, Led_Pin, GPIO_PIN_RESET); //Initialize the GPIO Pin
85
86 /*Configure GPIO pin : Led_Pin */
87 GPIO_InitStruct.Pin = Led_Pin; //Pin name we give in StmCubeMx Confi
88 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //Pin Mode Push Pull
89 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; //GPIO speed frequency Low
90 HAL_GPIO_Init(Led_GPIO_Port, &GPIO_InitStruct); //Pass the setting perimeters for ini
91
92 }

getting-started-with-stm32f103.c hosted with ❤ by GitHub view raw

Code Upolad au microcontrôleur stm32

Étant donné que la carte de développement n'a pas de programmeur de construction, j'ai donc
utilisé un programmeur St Link externe pour télécharger le code sur la carte. Pour télécharger le
code, vous devez effectuer certains réglages dans keil. Suivez les étapes ci-dessous pour
télécharger le code.
 

Keil télécharge le code sur la carte de développement stm32 à l'aide du débogueur stlink

Remarque : Après avoir téléchargé le code, appuyez sur le bouton de réinitialisation sur la carte.
Le code ne fonctionnera que si vous réinitialisez la carte en appuyant sur le bouton de
réinitialisation.
 

Project Files/Code Folder

Filed Under: Electronic Projects, Microcontroller Projects, STM32

← Previous Article Next Article →

👉
Questions related to this article?
Ask and discuss on EDAboard.com and Electro-Tech-Online.com forums.

Tell Us What You Think!!


You must be logged in to post a comment.

Rechercher ce site Web GO


EE LEARNING CENTER 

BROWSE CLASSROOMS

BROWSE DESIGN GUIDES

HAVE A QUESTION?

Have a technical question about an article or other engineering questions? Check out
our engineering forums EDABoard.com and Electro-Tech-Online.com where you can
get those questions asked and answered by your peers!

EDA BOARD

ELECTRO-TECH-ONLINE

EDABOARD.COM DISCUSSIONS

Impedance matching on Rf PCB


Which Should be powered first: MOSFET Driver IC (Vdd) or MOSFET bridge (Vin)
What does this error mean when trying to Optimize a PLD design?
class E power amplifier impedance matching
Markers for measuring frequency and amplitude in ols spectrum analyzers and scopes.

 
ELECTRO-TECH-ONLINE.COM DISCUSSIONS

atari punk color organ


wobbling polygon motor
Using Thingspeak for multiple devices
Transistor markings
Any way to watch tv on Smart Tv without a cable box?

FEATURED TUTORIALS

What battery chemistries are used in electric vehicles?

What are the different types of EV charging connectors?

What types of motors are used in electric vehicles?

What is Wireless Electric Vehicle Charging System (WEVCS)?

What is the role of embedded software in electric vehicles?

How to build a MicroPython WiFi Sniffer


 

EXPAND YOUR KNOWLEDGE


AND STAY CONNECTED
Get the latest info on technologies, tools
and strategies for EE professionals.

GET THE ENEWSLETTER

RECENT ARTICLES

How to select drone motors


How does LoRa modulation enable long-range communication?
Micron 9400 NVMe™ SSDs
STMicroelectronics offers new Industry 4.0-ready Edge AI-powered microprocessors
Infineon adds support to its AURIX embedded software

EE ENGINEERING TRAINING DAYS

BROWSE TRAINING SESSIONS

SUBMIT A GUEST POST

 
 

ANALOG IC TIPS

CONNECTOR TIPS

DESIGNFAST

EDABOARD FORUMS

EE WORLD ONLINE

ELECTRO-TECH-ONLINE FORUMS

MICROCONTROLLER TIPS

POWER ELECTRONIC TIPS

SENSOR TIPS

TEST AND MEASUREMENT TIPS

5G TECHNOLOGY WORLD

ABOUT US

CONTACT US

ADVERTISE

Copyright © 2023 WTWH Media LLC. Tous les droits sont réservés. Le matériel de ce site ne peut être reproduit, distribué, transmis, mis en cache ou
autrement utilisé, sauf avec l'autorisation écrite préalable de WTWH Media
Privacy Policy

Vous aimerez peut-être aussi