En el campo de los sistemas integrados, los microcontroladores, como componentes clave, desempeñan un papel importante en escenarios como el control automático, el Internet de las cosas y las aplicaciones industriales. El STM32F407 lanzado por ST Company es un microcontrolador de 32 bits de alto rendimiento y bajo consumo que ha atraído la atención del mercado debido a sus excelentes funciones y facilidad de uso. En este artículo, profundizaremos en las características, especificaciones, áreas de aplicación y entorno de desarrollo del STM32F407.
Acerca de STM32F407
La serie de chips STM32F407 es un microcontrolador de alto rendimiento lanzado por STMicroelectronics basado en el núcleo ARM Cortex™-M4. Utiliza un proceso NVM de 90 nanómetros y ART (Adaptive Real-Time Memory Accelerator™).
Características del STM32F407
El STM32F407 se basa en el núcleo ARM Cortex-M4, tiene instrucciones DSP y una unidad de punto flotante (FPU), y tiene una frecuencia de reloj de hasta 168 MHz. Estas son sus principales características:
- Alto rendimiento
Equipado con un núcleo Cortex-M4 de 32 bits, que admite operaciones de punto flotante y baja latencia de ciclo de reloj, puede proporcionar capacidades de computación de alta velocidad.
- Bajo consumo
Se utiliza tecnología de ajuste dinámico de voltaje para cambiar entre diferentes modos de consumo de energía y reducir el consumo energético del sistema.
- Múltiples configuraciones de almacenamiento
Hasta 1 MB de memoria flash y 192 KB de RAM para satisfacer los requisitos de espacio de almacenamiento de diversas aplicaciones.
- Potente compatibilidad con periféricos
El STM32F407 cuenta con numerosas interfaces de comunicación, como SPI, I2C, UART, etc.; admite hasta 3 convertidores ADC de 12 bits, 2 convertidores DAC y temporizadores de alta resolución.
- Seguridad y fiabilidad
El módulo CRC de hardware integrado proporciona una función de detección de errores de suma de comprobación en tiempo real; el temporizador Watchdog puede supervisar el estado de funcionamiento del sistema y evitar bloqueos de software.
Especificaciones del 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 |
Aplicación del STM32F407
Gracias a su flexibilidad y fácil escalabilidad, el STM32F407 se utiliza ampliamente en diversos escenarios inteligentes, entre los que se incluyen, entre otros:
- Dispositivos del Internet de las cosas (IoT)
El bajo consumo energético del STM32F407 lo hace adecuado como unidad central de procesamiento de dispositivos IoT, como sensores y controladores.
- Automatización industrial
En campos como las máquinas herramienta CNC y los robots industriales, el STM32F407 puede encargarse del control del sistema, la adquisición y el procesamiento de datos y la comunicación con dispositivos periféricos.
- Electrónica de consumo
El STM32F407 se puede utilizar en campos de la electrónica de consumo, como hogares inteligentes y dispositivos portátiles, para satisfacer las necesidades de los consumidores en cuanto a rendimiento y consumo de energía.
Recursos de desarrollo STM32F407
Para facilitar el trabajo de los desarrolladores, ST proporciona una gran cantidad de recursos de desarrollo y herramientas de apoyo, entre los que se incluyen:
- Placas de desarrollo de las series Discovery y Nucleo
- Entornos de desarrollo integrados (IDE) como Keil uVision e IAR
- Depuradores JLINK, CMSIS-DAP, ULINK o STLINK
- Kit de desarrollo de software STM32CubeF4 basado en la biblioteca HAL/HLL
Estos recursos ayudan a simplificar el proceso de desarrollo, acortar el ciclo de desarrollo y permiten a los desarrolladores obtener asistencia técnica, compartir experiencias y aprender recursos.
Biblioteca HAL
La biblioteca HAL (Hardware Abstraction Layer, capa de abstracción de hardware) es, en realidad, el paquete de controladores periféricos de STM32F407. El archivo de código se encuentra en la ruta:\Drivers\STM32F4xx_HAL_Driver.

CMSIS
CMSIS (Cortex Microcontroller Software Interface Standard) es un paquete de controladores diseñado oficialmente por ARM. El diagrama de bloques es el siguiente:

Con este paquete de software CMSIS, se espera que ARM unifique los controladores periféricos, el procesamiento de señales digitales DSP, los descargadores y las API de varios sistemas operativos en tiempo real (RTOS) convencionales de diversos fabricantes de chips.
STM32CubeMX es un software de desarrollo gráfico lanzado por ST en 2014 para facilitar a los usuarios la configuración de relojes, periféricos, pines, RTOS y diversos middleware. El diagrama de bloques es el siguiente:

A través de este software gráfico, puede generar fácilmente código de ingeniería y compilers compatibles como MDK, IAR y TrueSTUDIO.
Proyecto de placa de desarrollo STM32F407
En este experimento de desarrollo, utilizamos la biblioteca HAL para encender un LED o hacer que un LED se encienda de forma intermitente.
Paso 1: Abra STM32CubeMX, busque el pin correspondiente al LED y configúrelo como salida GPIO.

Paso 2: Seleccione Serial Wire en SYS. Solo si está seleccionado, los proyectos posteriores se podrán grabar normalmente utilizando st-link.

Paso 3: Encienda el reloj externo y habilítelo para que alcance la frecuencia máxima de 407 168 MHz.

Paso 4: Generar código de ingeniería.

El código generado es el que se muestra a continuación, y las configuraciones de los pines y el reloj están todas configuradas.
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):
}
A continuación, escribe el programa para controlar la luz LED en while(1) de la función principal.
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 */
}




