Nel campo dei sistemi embedded, i microcontrollori, come componenti chiave, svolgono un ruolo importante in scenari come il controllo automatico, l’Internet delle cose e le applicazioni industriali. L’STM32F407 lanciato da ST Company è un microcontrollore a 32 bit ad alte prestazioni e basso consumo energetico che ha attirato l’attenzione del mercato grazie alle sue eccellenti funzioni e alla facilità d’uso. In questo articolo, approfondiremo le caratteristiche, le specifiche, le aree di applicazione e l’ambiente di sviluppo di STM32F407.
Informazioni su STM32F407
La serie di chip STM32F407 è un microcontrollore ad alte prestazioni lanciato da STMicroelectronics basato sul core ARM Cortex™-M4. Utilizza un processo NVM a 90 nanometri e ART (Adaptive Real-Time Memory Accelerator™).
Caratteristiche di STM32F407
L’STM32F407 è basato sul core ARM Cortex-M4, dispone di istruzioni DSP e di un’unità a virgola mobile (FPU) e ha una frequenza di clock fino a 168 MHz. Ecco le sue caratteristiche principali:
- Alte prestazioni
Dotato di un core Cortex-M4 a 32 bit, che supporta operazioni a virgola mobile e una bassa latenza del ciclo di clock, può fornire elevate capacità di calcolo.
- Basso consumo energetico
Viene utilizzata la tecnologia di regolazione dinamica della tensione per passare tra diverse modalità di consumo energetico e ridurre il consumo energetico del sistema.
- Configurazioni di archiviazione multiple
Fino a 1 MB di Flash e 192 KB di RAM per soddisfare i requisiti di spazio di archiviazione di varie applicazioni.
- Potente supporto periferico
STM32F407 dispone di ricche interfacce di comunicazione, come SPI, I2C, UART, ecc.; supporta fino a 3 convertitori ADC a 12 bit, 2 convertitori DAC e timer ad alta risoluzione.
- Sicurezza e affidabilità
Il modulo CRC hardware integrato fornisce una funzione di rilevamento degli errori di checksum in tempo reale; il timer Watchdog può monitorare lo stato di esecuzione del sistema e prevenire il blocco del software.
Specifiche di STM32F407
| Specification | Details |
|---|---|
| MCU Model | STM32F407ZGT6 |
| Flash Memory | 1MB |
| Clock Frequency | Up to 168MHz |
| ADC | Three 12-bit |
| DAC | Two 12-bit |
| DMA | Two DMA controllers |
| Timers | Up to 17 timers |
| GPIO | Up to 120 configurable GPIO pins |
| Interfaces | Built-in I2C, SPI, USART, I2S, CAN, and SDIO communication interfaces |
Applicazione di STM32F407
Grazie alla sua flessibilità e facile scalabilità, STM32F407 è ampiamente utilizzato in vari scenari intelligenti, tra cui, ma non solo:
- Dispositivi Internet of Things (IoT)
Il basso consumo energetico di STM32F407 lo rende adatto come unità di elaborazione principale di dispositivi IoT come sensori e controller.
- Automazione industriale
In settori come le macchine utensili CNC e i robot industriali, STM32F407 può essere responsabile del controllo del sistema, dell’acquisizione e dell’elaborazione dei dati e della comunicazione con i dispositivi periferici.
- Elettronica di consumo
STM32F407 può essere utilizzato in settori dell’elettronica di consumo come le case intelligenti e i dispositivi indossabili per soddisfare i requisiti dei consumatori in termini di prestazioni e consumo energetico.
Risorsa di sviluppo STM32F407
Per facilitare gli sviluppatori, ST fornisce una ricchezza di risorse di sviluppo e supporto di strumenti, tra cui:
- Schede di sviluppo delle serie Discovery e Nucleo
- Ambienti di sviluppo integrati (IDE) come Keil uVision e IAR
- Debugger JLINK, CMSIS-DAP, ULINK o STLINK
- Kit di sviluppo software STM32CubeF4 basato sulla libreria HAL/HLL
Queste risorse aiutano a semplificare il processo di sviluppo, a ridurre il ciclo di sviluppo e consentono agli sviluppatori di ottenere supporto tecnico, condividere esperienze e apprendere risorse.
Libreria HAL
La libreria HAL, Hardware Abstraction Layer, è in realtà il pacchetto driver periferico di STM32F407. Il file di codice si trova nel percorso:\\Drivers\\STM32F4xx_HAL_Driver.

CMSIS
CMSIS (Cortex Microcontroller Software Interface Standard) è un pacchetto driver progettato ufficialmente da ARM. Il diagramma a blocchi è il seguente:

Con questo pacchetto software CMSIS, ARM si aspetta di unificare i driver periferici, l’elaborazione del segnale digitale DSP, i downloader e le API di vari RTOS mainstream da vari produttori di chip.
STM32CubeMX è un software di sviluppo grafico lanciato da ST nel 2014 per facilitare agli utenti la configurazione di clock, periferiche, pin, RTOS e vari middleware. Il diagramma a blocchi è il seguente:

Attraverso questo software grafico, puoi facilmente generare codice di ingegneria e supportare compilatori come MDK, IAR e TrueSTUDIO.
Progetto della Scheda di Sviluppo STM32F407
In questo esperimento di sviluppo, utilizziamo la libreria HAL per accendere un LED o far lampeggiare un LED.
Passaggio 1: Apri STM32CubeMX, trova il pin corrispondente al LED e configuralo come uscita GPIO.

Passaggio 2: Seleziona Serial Wire in SYS. Solo se è selezionato, i progetti successivi possono essere programmati normalmente utilizzando st-link.

Passaggio 3: Attiva il clock esterno e abilitalo per raggiungere la frequenza massima di 407 168 MHz.

Passaggio 4: Genera il codice di ingegneria.

Il codice generato è mostrato di seguito e le configurazioni dei pin e del clock sono tutte configurate.
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct= {0}:
/*GPIO Ports Clock Enable */
_ _HAL_RCC_GPIOF_CLK_ENABLE():
_ _HAL_RCC GPIOH_CLK_ENABLE():
_ _HAL RCC GPIOA CLK_ENABLE():
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET):
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_RESET):
/*Configure GPIO pins:PF9 PF10 */
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10:
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP:
GPIO_InitStruct.Pul1 =GPIO_NOPULL:
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW:
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct):
/*EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI2_IRQn, 0, 0):
HAL NVIC_EnableIRQ(EXTI2_IRQn):
HAL_NVIC_SetPriority(EXTI3_IRQn, 0, 0):
HAL_NVIC_EnableIRQ(EXTI3_IRQn):
HAL_NVIC_SetPriority(EXTI4_IRQn, 0, 0):
HAL_NVIC_EnableIRQ(EXTI4_IRQn):
}
Quindi scrivi il programma per controllare la luce del LED in while(1) della funzione main.
while (1)
{
/* USER CODE END WHILE */
//Light up the LED
//HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10|GPIO_PIN_9, GPIO_PIN_RESET);
{
//LED flashes
HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_9|GPIO_PIN_10);
HAL_Delay(1000);
}
/* USER CODE BEGIN 3 */
}




