Microcontrollore STM32F407: Caratteristiche, Specifiche, Progetto di Sviluppo

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

SpecificationDetails
MCU ModelSTM32F407ZGT6
Flash Memory1MB
Clock FrequencyUp to 168MHz
ADCThree 12-bit
DACTwo 12-bit
DMATwo DMA controllers
TimersUp to 17 timers
GPIOUp to 120 configurable GPIO pins
InterfacesBuilt-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.

An Example of STM32F4xx HAL Library
An Example of STM32F4xx HAL Library

CMSIS

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

Overview
Struttura CMSIS (Immagine con credito: Keil)

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:

Open the STM32CubeMX

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.

Configure LED's pin as GPIO output in STM32CubeMX
Configure LED's pin as GPIO output in STM32CubeMX

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

Select Serial Wire Debug in SYS Mode and Configuration
Select Serial Wire Debug in SYS Mode and Configuration

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

Select High Speed Clock (HSE) in RCC Mode and Configuration
Select High Speed Clock (HSE) in RCC Mode and Configuration

Passaggio 4: Genera il codice di ingegneria.

Generate Code for STM32F407 Project in STM32CubeMX
Generate Code for STM32F407 Project in STM32CubeMX

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 */
}
				
			

Condividi con:

Torna in alto

Instant Quote