stm32 Tutoriel
Démarrer avec stm32
Recherche…
Remarques
Cette section fournit une vue d'ensemble de ce que stm32 est et de la raison pour laquelle un développeur peut vouloir l'utiliser.
Il devrait également mentionner tous les sujets importants dans stm32, et établir un lien avec les sujets connexes. La documentation de stm32 étant nouvelle, vous devrez peut-être créer des versions initiales de ces rubriques connexes.
Qu'est ce que le STM32?
STM32 est une famille de microcontrôleurs Flash 32 bits développée par ST Microelectronics. Basé sur le processeur ARM® Cortex®-M, il offre une gamme de produits 32 bits alliant des performances en temps réel, un traitement du signal numérique et un fonctionnement basse tension à faible consommation.
Une description détaillée de chaque série, des outils de développement et du décodage des numéros de pièce se trouve sur Wikipedia .
Serie de produits
| Cortex-M0 / -M0 + | Cortex-M3 | Cortex-M4 | Cortex-M7 | |
|---|---|---|---|---|
| Haute performance: | STM32F2 | STM32F4 | STM32F7 , STM32H7 | |
| Courant dominant: | STM32F0 | STM32F1 | STM32F3 | |
| Ultra-basse consommation: | STM32L0 | STM32L1 | STM32L4 |
Conseils de développement
| STM32 Nucleo ( mbed activé ) | Kits de découverte | Cartes d'évaluation | |
|---|---|---|---|
| Cas d'utilisation typique: | Prototypage flexible, communauté | Prototypage, démos créatives | Évaluation complète des fonctionnalités |
| Possibilités d'extension: | +++ | ++ | ++ |
| Connectivité: | Arduino ™, ST, Morpho | ST | ST |
Versions
| Version | Date de sortie |
|---|---|
| 1.0.0 | 2016-11-01 |
Première configuration avec un exemple de clignotement de la LED à l'aide de la bibliothèque SW4STM32 et HAL
( Remarque: il existe de nombreux IDE, chaînes d'outils et bibliothèques prêtes à l'emploi avec STM32. La configuration suivante nécessite peu d'efforts pour que cela fonctionne, mais ce n'est qu'un exemple parmi d'autres. N'hésitez pas à en explorer d'autres, ce n'est pas le cas. Le but de cet exemple est de forcer quiconque à utiliser les outils qui seront utilisés ici.)
Installation IDE
System Workbench for STM32 : IDE gratuit sous Windows, Linux et OS X. Conçu par AC6 et disponible en téléchargement après enregistrement sur le site Web de la communauté OpenSTM32 .
L'EDI lui-même est basé sur Eclipse, mais est livré avec quelques extras pour le développement STM32 comme:
- Ac6 STM32 MCU GCC toolchain
- OpenOCD et GDB (arm-none-eabi-gdb) avec des configurations de débogage générées automatiquement en fonction de la carte cible
- Options intégrées pour programmer ou effacer les puces
Pour commencer avec STM32 avant de créer votre propre carte, il est recommandé d'expérimenter une carte Discovery , Nucleo ou Eval , fournie avec un programmateur / débogueur SWD (Serial Wire Debug) intégré appelé ST-Link.
Créer un projet
Cet exemple utilisera un kit STM32F4 Discovery , qui comprend un microcontrôleur STM32F407VG. (Tout autre tableau peut également être utilisé.)
Ouvrez SW4STM32 et créez un nouveau projet C: Fichier → Nouveau → Projet C
Donnez-lui un nom comme "STM32F4_Discovery-Blinky" et dans la liste Type de projet, choisissez le projet MCU Executable / Ac6 STM32 . Par défaut, la seule chaîne d’outils disponible est Ac6 STM32 MCU GCC . Cliquez sur Suivant.
La prochaine étape est les paramètres de débogage / libération , qui peuvent maintenant être ignorés en cliquant sur Suivant.
Sélection du conseil Les cartes existantes peuvent être sélectionnées comme dans cet exemple, la découverte STM32F4 ou de nouvelles cartes personnalisées peuvent être ajoutées.
La prochaine étape est la configuration du micrologiciel du projet . Choisissez entre Pas de microprogramme , Standard Peripheral Library (SPL) ou Hardware Abstraction Layer (HAL). On se demande laquelle est la plus adaptée au développement, mais cette question est hors de propos dans cet exemple. Cet exemple utilisera la bibliothèque HAL car elle est actuellement prise en charge par ST Microelectronics. STM32CubeMX est un outil logiciel supplémentaire disponible pour HAL, qui est un générateur de code d'initialisation. Plusieurs exemples d'applications sont également disponibles par les progiciels STM32CubeFx ou STM32CubeLx. Téléchargez le micrologiciel cible s'il manque et il est recommandé de sélectionner les options "Ajouter des pilotes de bas niveau dans le projet" et "Comme sources dans l'application" . Enfin, cliquez sur Terminer.
Blink LED application
Comme ce projet a été créé avec une découverte STM32F4, il existe déjà plusieurs fonctions prêtes à l'emploi sous le dossier / STM32F4_Discovery-Blinky / Utilities / STM32F4-Discovery / pouvant être utilisées pour interfacer les périphériques du kit Discovery (accéléromètre, audio). , LED, bouton poussoir). Dans cet exemple, les fonctions void BSP_LED_Init(Led_TypeDef Led) et void BSP_LED_Toggle(Led_TypeDef Led) seront utilisées à partir du fichier stm32f4_discovery.c pour faire clignoter la LED verte, qui est LED4 . Pour décider quelle est la LED qui utilise les schémas du kit Discovery .
Les noms de broches et de ports réels sont déjà masqués par certains #define et enum , utilisez Ctrl + Click pour les suivre.
- Dans la
main, appelez la fonctionHAL_Init()qui réinitialise tous les périphériques, initialise l'interface Flash et le Systick. (Systick sera utilisé pour générer un délai pour le clignotement.) - L'horloge du système doit être configurée. Cela peut être fait en utilisant la fonction de configuration d'horloge STM32CubeMX ou par le manuel de référence. Dans cet exemple, l'horloge système est alimentée par la boucle PLL (Phase Locked Loop) interne, alimentée par un oscillateur à cristal externe (HSE) de 8 MHz. Des pré-gradateurs ont été configurés pour atteindre la fréquence maximale disponible, qui est de 168 MHz dans le cas de la découverte F4.
- Initialisation des périphériques, dans ce cas une broche GPIO.
- Dans une boucle sans fin, appelez la bascule LED et la fonction
HAL_Delay().HAL_Delay()utiliseSysticket génère un délai en millisecondes.
Le code entier est le suivant:
#include "stm32f4xx.h"
#include "stm32f4_discovery.h"
void SystemClock_Config(void);
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize one of the LED GPIO pin */
BSP_LED_Init(LED4);
while(1)
{
BSP_LED_Toggle(LED4);
HAL_Delay(1000); // in miliseconds
}
}
/**
* @brief System Clock Configuration
* The system Clock is configured as follow :
* System Clock source = PLL (HSE)
* SYSCLK(Hz) = 168000000
* HCLK(Hz) = 168000000
* AHB Prescaler = 1
* APB1 Prescaler = 4
* APB2 Prescaler = 2
* HSE Frequency(Hz) = HSE_VALUE
* PLL_M = (HSE_VALUE/1000000u)
* PLL_N = 336
* PLL_P = 2
* PLL_Q = 7
* VDD(V) = 3.3
* Main regulator output voltage = Scale1 mode
* Flash Latency(WS) = 5
* @param None
* @retval None
*/
void SystemClock_Config(void)
{
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;
// Enable Power Control clock
__PWR_CLK_ENABLE();
// The voltage scaling allows optimizing the power consumption when the
// device is clocked below the maximum system frequency, to update the
// voltage scaling value regarding system frequency refer to product
// datasheet.
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
// Enable HSE Oscillator and activate PLL with HSE as source
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
// This assumes the HSE_VALUE is a multiple of 1MHz. If this is not
// your case, you have to recompute these PLL constants.
RCC_OscInitStruct.PLL.PLLM = (HSE_VALUE/1000000u);
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
// Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
// clocks dividers
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
}
Construire avec le marteau
et téléchargez l'application en cliquant avec le bouton droit de la souris sur le dossier du projet et en sélectionnant l'option Cible → Program chip ....
Une autre façon de télécharger consiste à utiliser le débogage . Pour ce faire, cliquez sur la flèche à côté de l'icône du bug
dans la barre d'outils et ouvrez le menu Configuration du débogage . Créez une nouvelle configuration de débogage Ac6 STM32 et, si le champ Application C / C ++ est vide, remplissez les champs suivants:
Debug \ STM32F4_Discovery-Blinky.elf
D'autres paramètres de débogage tels que le fichier de configuration OpenOCD et les ports Telnet et GDB utilisés sont automatiquement générés et complétés par la structure. Enfin, cliquez sur le bouton Déboguer.



