stm32 Tutorial
Iniziare con stm32
Ricerca…
Osservazioni
Questa sezione fornisce una panoramica di cosa stm32 è, e perché uno sviluppatore potrebbe voler usarlo.
Dovrebbe anche menzionare tutti i soggetti di grandi dimensioni all'interno di stm32 e collegarsi agli argomenti correlati. Poiché la documentazione di stm32 è nuova, potrebbe essere necessario creare versioni iniziali di tali argomenti correlati.
Cos'è STM32?
STM32 è una famiglia di microcontroller Flash a 32 bit sviluppata da ST Microelectronics. È basato sul processore ARM® Cortex®-M e offre una gamma di prodotti a 32 bit che combina prestazioni ad alte prestazioni, funzionalità in tempo reale, elaborazione del segnale digitale e funzionamento a bassa tensione ea bassa tensione.
Una descrizione dettagliata di ciascuna serie, strumenti di sviluppo e decodifica del numero di parte può essere trovata su Wikipedia .
Serie di prodotti
| Cortex-M0 / -M0 + | Cortex-M3 | Cortex-M4 | Cortex-M7 | |
|---|---|---|---|---|
| Alte prestazioni: | STM32F2 | STM32F4 | STM32F7 , STM32H7 | |
| Mainstream: | STM32F0 | STM32F1 | STM32F3 | |
| Ultra-low-power: | STM32L0 | STM32L1 | STM32L4 |
Schede di sviluppo
| STM32 Nucleo ( mbed abilitato ) | Kit di scoperta | Schede di valutazione | |
|---|---|---|---|
| Caso d'uso tipico: | Prototipazione flessibile, comunità | Prototipazione, demo creative | Valutazione completa delle funzionalità |
| Possibilità di estensione: | +++ | ++ | ++ |
| Connettività: | Arduino ™, ST, Morpho | ST | ST |
Versioni
| Versione | Data di rilascio |
|---|---|
| 1.0.0 | 2016/11/01 |
Configurazione iniziale con esempio lampeggiante LED usando SW4STM32 e libreria HAL
( Nota: ci sono molti IDE, toolchain e librerie che sono pronti per l'uso con STM32. La seguente configurazione richiede il minimo sforzo per farlo funzionare, ma è solo uno dei tanti. Sentiti libero di esplorare gli altri, non è lo scopo di questo esempio per costringere chiunque a utilizzare gli strumenti che verranno utilizzati qui.)
Installazione IDE
System Workbench per STM32 : IDE gratuito su Windows, Linux e OS X. È stato creato da AC6 e disponibile per il download dopo la registrazione dal sito Web della community di OpenSTM32 .
L'IDE stesso è basato su Eclipse, ma viene fornito con alcuni extra per lo sviluppo STM32 come:
- Toolchain GCC Ac6 STM32 MCU
- OpenOCD e GDB (arm-none-eabi-gdb) con configurazioni di debug generate automaticamente in base alla scheda di destinazione
- Opzioni integrate per programmare o cancellare il chip
Per iniziare con STM32 prima di creare la propria scheda, si consiglia di sperimentare con una scheda Discovery , Nucleo o Eval , fornita con un programmatore / debugger SWD (Serial Wire Debug) integrato chiamato ST-Link.
Creare un progetto
In questo esempio verrà utilizzato un kit di rilevamento STM32F4 , che presenta un microcontroller STM32F407VG. (È possibile utilizzare qualsiasi altra scheda).)
Aprire SW4STM32 e creare un nuovo progetto C: File → Nuovo → Progetto C
Dagli un nome come "STM32F4_Discovery-Blinky" e dall'elenco Tipo progetto scegli il Progetto MCU eseguibile / Ac6 STM32 . Di default l'unica toolchain disponibile è Ac6 STM32 MCU GCC . Fare clic su Avanti.
Il prossimo passaggio è Debug / Release settings , può essere saltato ora facendo clic su Next.
Selezione del Consiglio . Le schede esistenti possono essere selezionate come in questo esempio è possibile aggiungere il Discovery STM32F4 o nuove schede personalizzate.
Il passaggio successivo è la configurazione del firmware del progetto . Scegliere tra Nessun firmware , Standard Peripheral Library (SPL) o Hardware Abstraction Layer (HAL). Viene messo in discussione quale sia più adatto allo sviluppo, ma in questo esempio la questione non rientra nell'ambito. Questo esempio utilizzerà la libreria HAL poiché è attualmente supportata da ST Microelectronics. Ulteriori strumenti software disponibili per HAL sono STM32CubeMX , che è un generatore di codice di inizializzazione. Sono inoltre disponibili diverse applicazioni di esempio dai pacchetti software STM32CubeFx o STM32CubeLx. Scarica il firmware di destinazione se manca e si consiglia di selezionare "Aggiungi driver di basso livello nel progetto" e le opzioni "Come fonti nell'applicazione" . Infine, fai clic su Fine.
Applicazione LED lampeggiante
Poiché questo progetto è stato creato con un Discovery STM32F4, ci sono già diverse funzioni pronte all'uso nella cartella / STM32F4_Discovery-Blinky / Utilities / STM32F4-Discovery / project che possono essere utilizzate per interfacciare le periferiche del Discovery kit (accelerometro, audio , LED, pulsante). In questo esempio le void BSP_LED_Init(Led_TypeDef Led) e void BSP_LED_Toggle(Led_TypeDef Led) verranno utilizzate dal file stm32f4_discovery.c per lampeggiare sul LED verde, che è LED4 . Per decidere quale LED utilizzare gli schemi del kit Discovery .
I nomi pin e porte attuali sono già nascosti da alcuni #define ed enum , usa Ctrl + Click per seguirli.
- All'interno del
main, chiama la funzioneHAL_Init()che ripristina tutte le periferiche, inizializza l'interfaccia Flash e il Systick. (La sinergia verrà utilizzata per generare un ritardo per il lampeggiamento.) - L'orologio di sistema deve essere configurato. Può essere fatto utilizzando la funzione di configurazione dell'orologio STM32CubeMX o il manuale di riferimento. In questo esempio, l'orologio di sistema è alimentato dal PLL interno (Phase Locked Loop), che è alimentato da un oscillatore a cristallo 8 MHz esterno (HSE). I prestatori sono stati impostati per ottenere la massima frequenza disponibile, che è di 168 MHz nel caso di F4 Discovery.
- Inizializzazione delle periferiche, in questo caso un pin GPIO.
- All'interno di un ciclo infinito, chiamate la commutazione LED e la funzione
HAL_Delay().HAL_Delay()usa ilSysticke genera un ritardo in millisecondi.
L'intero codice è il seguente:
#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);
}
Costruisci con il martello
e scaricare l'applicazione facendo clic con il tasto destro sulla cartella del progetto e selezionando l'opzione Target → Programma chip ....
Un altro modo per scaricare è con l'uso di debug . Per farlo, fai clic sulla freccia accanto all'icona del bug
nella barra degli strumenti e aprire il menu Debug Configuration .... Crea una nuova configurazione di debug di Ac6 STM32 e se il campo Applicazione C / C ++ è vuoto, inserisci quanto segue:
Debug \ STM32F4_Discovery-Blinky.elf
Altri parametri di debug come il file di configurazione di OpenOCD e le porte Telnet e GDB utilizzate vengono generati automaticamente e completati dal framework. Infine, fai clic sul pulsante Debug.



