Introducción al chip STM32F030
El chip STM32F030 es un microcontrolador ARM Cortex-M0 de 32 bits y bajo coste de STMicroelectronics. Cuenta con hasta 32 KB de memoria Flash y 4 KB de SRAM, y puede funcionar a una velocidad de hasta 48 MHz. Incluye una variedad de periféricos, como comparadores analógicos, temporizadores e interfaces I2C y SPI. El STM32F030 también es compatible con aplicaciones de control de motores y cuenta con una amplia gama de periféricos analógicos y digitales integrados. El pequeño tamaño y el bajo consumo de energía del chip lo hacen ideal para su uso en una gran variedad de aplicaciones, desde electrónica de consumo hasta sistemas médicos e industriales. El precio y el rendimiento del chip hacen que el STM32F030 sea una excelente opción para los desarrolladores preocupados por los costes. Gracias a la compatibilidad con una gran variedad de herramientas de desarrollo, como STM32Cube y la herramienta de configuración gráfica STM32CubeMX, es fácil ponerse en marcha con el STM32F030 y desarrollar aplicaciones innovadoras.

Parámetros
– CPU: núcleo ARM Cortex-M0 con arquitectura RISC
de 32 bits. – Frecuencia de funcionamiento: hasta 48 MHz
. – Memoria de programa: hasta 32 KB de Flash
. – RAM: hasta 4 KB
. – Fuente de reloj: interna de 8 MHz o externa de 32 kHz
. – Salida de reloj: 2 x 32 kHz
. – E/S digital: hasta 36 pines
de E/S. – Entradas analógicas: hasta 8 canales ADC de
12 bits. – Temporizadores: hasta 3 temporizadores de 16
bits. – Interfaces de comunicación: hasta 2 I2C, 2 USART, SPI, CAN.
Arquitectura del sistema
El marco del sistema interno del STM32F030 se puede dividir simplemente en 2 sistemas maestros y 4 esclavos. Los conceptos de maestro y esclavo aquí son relativos a Busmatrix:
- Maestros
- Núcleo Cortex-M0 Bus AHB
- GP-DMA
- Esclavos
- SRAM interna
- Flash interna
- AHB2APB
- AHB a puertos GPIO
La relación entre 2 maestros y 4 esclavos se muestra con más detalle en la siguiente figura y se ha marcado:

Para el puente AHB2APB, si desea utilizar los periféricos conectados al bus APB, primero debe llamar a un registro como RCC_AHBENR para habilitar el reloj periférico, y el periférico es el controlador periférico. Estos detalles se gestionan generalmente en la API del controlador ST.
Descripción general de la memoria
En el programa STM32F030, los datos, los registros y los puertos IO se asignan al espacio de direcciones de 4 GB (máquina de 32 bits). El mapa de memoria del STM32F030 se detalla en la hoja de datos.
SRAM
La SRAM del STM32F030 tiene un tamaño de 8 KB y se puede acceder a ella en unidades de byte, palabra y media palabra. Esta sección se utiliza para almacenar el código compilado y enlazado, los datos y la pila del programa durante el tiempo de ejecución. Los datos se leen o se escriben constantemente en esta SRAM durante la ejecución del programa.
Flash
La memoria flash interna del STM32F030 suele ser suficiente para su uso, ya que está diseñada para este fin. Cuenta con 64 KB de espacio flash para el usuario. La memoria flash dentro del chip se denomina memoria flash interna o ROM (la ROM y la memoria flash se diferencian en que la ROM no puede ser borrada por el usuario y es fija durante la producción del chip, mientras que la memoria flash puede ser borrada y reescrita en cualquier momento).
La memoria flash interna del STM32F030 se divide en dos tipos:
- 64 KB de espacio flash de usuario: se utiliza para descargar el código .bin generado por la compilación y el enlace del usuario.
- Flash de información: incluye bytes de opción y memoria del sistema.
Los bytes de opción se pueden utilizar para configurar algunas funciones del IC. La memoria
del sistema es la memoria del IC, que contiene un segmento de código fijado durante la producción del IC que no es de código abierto y cuyo funcionamiento solo se puede adivinar. El propósito de la memoria del sistema es actuar como un gestor de arranque integrado. Por lo general, no se utiliza para la depuración. El uso típico es conectar un depurador a través de una interfaz SWD al IC y descargar y depurar fácilmente el código. Sin embargo, en el caso de los productos, es posible que la interfaz SWD no esté expuesta. En este caso, el código .bin del producto se puede descargar y ejecutar a través del gestor de arranque de la memoria interna del sistema del IC mediante una interfaz serie, que es el proceso habitual para las actualizaciones de firmware. STM proporcionará la interfaz y una demostración de uso del gestor de arranque de la memoria del sistema, y hay mucha documentación relacionada que explica cómo utilizarlo.
Configuración de arranque
La depuración a través de SWD se denomina «programación del sistema», mientras que la carga y el inicio de programas mediante un gestor de arranque se considera «programación de aplicaciones». STM dispone de tres modos de arranque configurables para diferentes escenarios de aplicación.
Configuración del modo de arranque:
En primer lugar, hay un pin de arranque que se conecta a niveles altos o bajos. Cuando el chip se inicia, comprueba el nivel del pin de arranque y cambia al modo de arranque correspondiente. Además, nBOOT1 se puede configurar en el byte de opción para seleccionar el modo de arranque correspondiente.
Clasificación de los modos de arranque:
Hay tres tipos: Arranque flash de usuario, que es el más común; después de compilar y enlazar, descargue el código, reinicie y ejecute su propio código flash. Arranque de memoria del sistema, que utiliza el cargador de arranque interno del IC para arrancar. Arranque SRAM.
Marco del reloj
La estructura del reloj del STM32F030 es la siguiente, y aquí hay algunas definiciones de los mismos:
- HSI: denominado reloj interno de alta velocidad, está compuesto por un oscilador RC.
- HSE: denominado reloj externo de alta velocidad, puede conectarse a un resonador externo de cuarzo/cerámica o a una fuente de reloj externa.
- LSI: denominado reloj interno de baja velocidad, compuesto por un oscilador RC, tiene una frecuencia baja, y el STM32F030 es de 40 kHz.
- LSE: denominado reloj externo de baja velocidad, generalmente conectado a un cristal de cuarzo con una frecuencia externa de 32,768 kHz.
- PLL: es la salida multiplicadora del bucle de fase bloqueada.
- HSI14 RC: fuente de reloj que se puede utilizar solo para ADC.

Los periféricos que no se especifican expresamente suelen utilizar PCLK. A continuación se incluye una breve lista de las situaciones en las que es necesario habilitar AHB/APB según el código específico:
- Utilizar AHB como fuente de reloj: GPIOA-F, TS, CRC, FLITF, SRAM, DMA1.
- Utilizar APB1 como fuente de reloj: TIM2, TIM3, TIM6, TIM14, WWDG, SPI2, USART2, I2C1, I2C2, PWR, DAC, CEC.
- Utilizar APB2 como fuente de reloj: SYSCFG, ADC1, TIM1, SPI1, USART1, TIM15, TIM16, TIM17, DBGMCU.
Función de reinicio
El reinicio es una parte crucial del proceso de arranque del sistema MCU. Cuando el circuito integrado comienza a ejecutar el programa, lo hace desde el reinicio, que es el primer paso después de encender el sistema.
Mecanismo de reinicio de Cortex-M0
En el archivo de inicio de Cortex-M0, siempre verá el reset_handler, que se encuentra en la primera posición de la tabla vectorial. La dirección de Cortex-M0 es 0x0000 0004, y el valor de PC cuando Cortex-M0 comienza a funcionar es esta dirección. En el reset_handler, generalmente se llama a la función SystemInit implementada por el usuario, que configura el reloj de los diversos componentes necesarios para que el sistema funcione correctamente, lo que facilita el funcionamiento normal del sistema más adelante. A continuación, se llama a la entrada __main de la biblioteca, que debe realizar algún procesamiento inicial de la biblioteca de tiempo de ejecución C y configurar la pila.
Tipos de restablecimiento
Hay tres tipos principales de reinicio para STM32F030: reinicio de alimentación, reinicio del sistema y reinicio del dominio RTC.
El reinicio de alimentación está relacionado con la fuente de alimentación del IC. Este reinicio se activa al encender el dispositivo y al salir del modo de espera, y la inicialización del sistema comienza después del reinicio.
El reinicio del sistema lo activa el sistema. Es decir, la fuente de alimentación es normal, pero si se pulsa el botón de reinicio, el registro correspondiente se reinicia mediante software o se activa el Watchdog, se producirá este reinicio. Cuando se produce este reinicio, la única diferencia con respecto al reinicio de alimentación es que el bit relevante del registro RCC_CSR utilizado para indicar la fuente de reinicio no se reiniciará, mientras que todos los demás registros se reiniciarán al estado justo después del encendido.
El disparador del reinicio del dominio RTC también es un disparador de software. Se activa escribiendo en el bit correspondiente del registro RCC_BDCR. Sin embargo, este tipo de reinicio solo afecta al RTC y al cristal LSE, etc.
Ciclo de perfeccionamiento continuo
CRC, la comprobación de redundancia cíclica, es un algoritmo de comprobación que verifica la integridad de los datos transmitidos/almacenados. Dado que puede utilizarse en muchos lugares, STM32F030 implementa este algoritmo con una unidad de cálculo CRC de hardware en el IC. Cuando una aplicación necesita utilizar CRC, la unidad de hardware puede controlarse mediante software para cumplir los requisitos (por supuesto, CRC también puede implementarse en software, pero la velocidad no es tan rápida como la del CRC de hardware).

El proceso CRC se implementa dentro del IC, por lo que solo es necesario saber cómo utilizarlo, y es muy sencillo de usar. Escriba los datos de origen que deben calcularse desde el registro de datos (entrada), inicie el cálculo de la unidad de cálculo CRC y, a continuación, lea los resultados calculados en el registro de datos (salida).
De hecho, la entrada y la salida del registro de datos CRC del STM32F030 utilizan el mismo registro, ya que primero debe introducirse la entrada y, a continuación, se puede obtener la salida antes de continuar con la siguiente entrada. De este proceso se desprende que la entrada y la salida no se utilizan al mismo tiempo, por lo que se puede utilizar directamente un registro para multiplexar las dos funciones. El registro puede funcionar en 32 bits, 16 bits y 8 bits, lo que permite satisfacer diferentes requisitos.
Placa de desarrollo STM32F030 - STM32f0308 Discovery
El desarrollo de este microcontrolador STM32F030 se basa en la última biblioteca HAL de STM32, el código de inicialización generado por STM32CubeMX y su compilador es GCC. A continuación se muestra su esquema, diagrama de PCB y placa ensamblada. STM32 ofrece muchas placas de desarrollo de nivel básico, como las series Discovery y Nucleo. La stm32f0308 discovery es una de las placas de la serie Discovery, que está equipada con el chip STM32F030.
Las funciones y características básicas de las placas de desarrollo de la serie Discovery son similares, pero las capacidades de los chips que las acompañan pueden variar. Las características del stm32f0308 discovery son las siguientes:
Cómoda extensión del puerto IO: con solo un cable USB conectado a un PC, se puede llevar a cabo el desarrollo. Los puertos IO del chip STM32F030 de la placa de desarrollo se amplían, lo que facilita la conexión a diferentes dispositivos mediante cables DuPont.
Interfaz de depuración: la placa de desarrollo viene con una interfaz de depuración SWD integrada, que se implementa utilizando otro chip Cortex-M3 de ST (actualmente, la versión v9 de JLINK en el mercado también debería utilizar el chip Cortex-M3 de ST). Esta interfaz de depuración SWD se puede utilizar por separado mediante la conexión de un tapón de puente, lo que significa que el stm32f0308-discovery se puede utilizar como un depurador SWD independiente.
Fuente de alimentación flexible: la placa de desarrollo se alimenta a través de USB, pero cuenta con un circuito de conversión de voltaje que puede suministrar fuentes de alimentación de 5 V y 3 V para dispositivos externos (tenga en cuenta que la corriente de alimentación sigue siendo limitada). Por lo general, los módulos e interfaces pequeños pueden alimentarse directamente a través de ella.
Periféricos a nivel de placa: dado que se trata de una placa de desarrollo básica y de bajo coste, los periféricos integrados son muy sencillos y constan de dos botones y cuatro LED. De los dos botones, uno se utiliza para el reinicio y el otro es un botón programable por el usuario. De los cuatro LED, uno es un indicador de alimentación, otro es un indicador de estado de depuración SWD y los dos restantes se pueden programar para el control. Por lo tanto, en realidad, los periféricos integrados que se pueden programar para el control son solo un botón de usuario y dos LED de usuario.
Rendimiento
- Interfaz SWD reservada para depuración mediante ST-LINK;
- Interfaz PA4 (salida DAC) con alta capacidad de control de puertos;
- Dos botones táctiles ligeros y 3 LED para facilitar la depuración;
- Interfaz LCD1602 y una interfaz compatible con TFT LCD común;
- Uso de un supercondensador como fuente de alimentación de respaldo RTC;
- Interfaz USB con protección de alimentación;
- Múltiples puntos de prueba de la fuente de alimentación para osciloscopio o multímetro.



