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).)

  1. Aprire SW4STM32 e creare un nuovo progetto C: File → Nuovo → Progetto C

  2. 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.

    inserisci la descrizione dell'immagine qui

  3. Il prossimo passaggio è Debug / Release settings , può essere saltato ora facendo clic su Next.

  4. Selezione del Consiglio . Le schede esistenti possono essere selezionate come in questo esempio è possibile aggiungere il Discovery STM32F4 o nuove schede personalizzate.

    inserisci la descrizione dell'immagine qui

  5. 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.

    inserisci la descrizione dell'immagine qui

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 .

inserisci la descrizione dell'immagine qui

I nomi pin e porte attuali sono già nascosti da alcuni #define ed enum , usa Ctrl + Click per seguirli.

  1. All'interno del main , chiama la funzione HAL_Init() che ripristina tutte le periferiche, inizializza l'interfaccia Flash e il Systick. (La sinergia verrà utilizzata per generare un ritardo per il lampeggiamento.)
  2. 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.
  3. Inizializzazione delle periferiche, in questo caso un pin GPIO.
  4. All'interno di un ciclo infinito, chiamate la commutazione LED e la funzione HAL_Delay() . HAL_Delay() usa il Systick e 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 inserisci la descrizione dell'immagine qui 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 inserisci la descrizione dell'immagine qui 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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow